# zhiyi **Repository Path**: silver-originator/zhiyi ## Basic Information - **Project Name**: zhiyi - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-11-05 - **Last Updated**: 2025-11-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 智医快线 (ZhiYi Express) 智医快线是一个基于 Go 语言开发的在线医疗服务平台,采用微服务架构设计,为用户提供便捷的在线医疗服务。 ## 📋 项目简介 本项目采用前后端分离架构,后端使用微服务架构模式,通过 gRPC 进行服务间通信,使用 API Gateway 作为统一入口,实现了服务的解耦和高可用性。 ## 🏗️ 技术架构 ### 核心技术栈 - **开发语言**: Go 1.25.1 - **Web 框架**: Gin - **微服务通信**: gRPC + Protocol Buffers - **服务发现**: Consul - **数据库**: MySQL - **ORM 框架**: GORM - **认证方式**: JWT (JSON Web Token) - **配置管理**: Viper - **日志系统**: Zap + Lumberjack - **文件存储**: 阿里云 OSS / 本地存储 ### 架构设计 ``` ┌─────────────────┐ │ 患者端/医生端 │ └────────┬────────┘ │ HTTP ▼ ┌─────────────────────────────────┐ │ API Gateway │ │ - 患者端路由 │ │ - 医生端路由 │ │ - JWT 认证中间件 │ │ - 日志中间件 │ │ - 文件上传 │ │ - gRPC 客户端 │ └────────┬────────────────────────┘ │ gRPC ▼ ┌─────────────────────────────────┐ │ 微服务层 │ │ ┌──────────────┐ ┌────────────┐│ │ │ Patient Srv │ │ Doctor Srv ││ │ │ (患者服务) │ │ (医生服务) ││ │ └──────────────┘ └────────────┘│ └────────┬────────────────────────┘ │ ▼ ┌─────────────────────────────────┐ │ MySQL 数据库 │ │ zhiyi_express │ └─────────────────────────────────┘ ``` ## 📁 项目结构 ``` zhiyi-express/ ├── api-gateway/ # API 网关服务 │ ├── basic/ # 基础配置模块 │ │ ├── cmd/ # 应用程序入口 │ │ ├── config/ # 配置文件结构定义 │ │ ├── inits/ # 初始化模块(配置、gRPC连接) │ │ └── proto/ # Protocol Buffers 定义文件 │ ├── handler/ # 业务处理器 │ │ ├── common/ # 公共接口(短信、上传、配置) │ │ ├── doctor/ # 医生端接口(认证、排班、接诊、处方、统计) │ │ ├── patient/ # 患者端接口(用户、预约、问诊、开药、订单) │ │ └── request/ # 请求参数模型 │ ├── middleware/ # 中间件 │ │ ├── authToken.go # JWT 认证中间件 │ │ └── log.go # 日志中间件 │ ├── pkg/ # 工具包 │ │ ├── aliyunFileUpload.go # 阿里云 OSS 上传 │ │ ├── jwt.go # JWT 工具 │ │ ├── localFileUpload.go # 本地文件上传 │ │ └── str.go # 字符串工具 │ ├── router/ # 路由配置 │ │ ├── router.go # 主路由 │ │ ├── patient_router.go # 患者端路由(预约、问诊、开药) │ │ └── doctor_router.go # 医生端路由(接诊、处方、统计) │ ├── utils/ # 公共工具类 │ │ ├── consul.go # Consul 服务发现 │ │ ├── file.go # 文件操作工具 │ │ └── logs.go # 日志工具 │ ├── uploads/ # 本地文件上传目录 │ ├── logs/ # 日志文件目录 │ ├── dev.yaml # 开发环境配置 │ └── go.mod # Go 模块依赖 │ ├── patient-srv/ # 患者微服务 │ ├── basic/ # 基础配置模块 │ │ ├── cmd/ # 应用程序入口 │ │ ├── config/ # 配置文件结构定义 │ │ ├── inits/ # 初始化模块(配置、MySQL) │ │ └── proto/ # Protocol Buffers 定义文件 │ ├── handler/ # 业务处理器 │ │ ├── model/ # 数据模型 │ │ │ ├── user.go # 用户模型 │ │ │ ├── patient.go # 患者档案模型 │ │ │ ├── address.go # 地址模型 │ │ │ ├── appointment.go # 预约挂号模型 │ │ │ ├── consultation.go # 问诊模型 │ │ │ ├── prescription.go # 处方模型 │ │ │ └── order.go # 订单模型 │ │ └── service/ # gRPC 服务实现 │ │ ├── patient_service.go # 患者服务 │ │ ├── address_service.go # 地址服务 │ │ ├── appointment_service.go # 预约服务 │ │ ├── consultation_service.go # 问诊服务 │ │ ├── prescription_service.go # 处方服务 │ │ └── order_service.go # 订单服务 │ ├── dev.yaml # 开发环境配置 │ └── go.mod # Go 模块依赖 │ └── doctor-srv/ # 医生微服务 ├── basic/ # 基础配置模块 │ ├── cmd/ # 应用程序入口 │ ├── config/ # 配置文件结构定义 │ ├── inits/ # 初始化模块(配置、MySQL) │ └── proto/ # Protocol Buffers 定义文件 ├── handler/ # 业务处理器 │ ├── model/ # 数据模型 │ │ ├── doctor.go # 医生模型 │ │ ├── patient.go # 患者模型 │ │ ├── consultation.go # 问诊模型 │ │ ├── medicine.go # 药品、处方、药品订单模型 │ │ ├── medical_record.go # 病历模型 │ │ └── attachment.go # 附件模型 │ └── service/ # gRPC 服务实现 │ ├── doctor_service.go # 医生服务 │ ├── patient_service.go # 患者服务 │ ├── consultation_service.go # 问诊服务 │ ├── medicine_service.go # 药品服务 │ ├── medical_record_service.go # 病历服务 │ ├── attachment_service.go # 附件服务 │ └── statistics_service.go # 统计服务 ├── dev.yaml # 开发环境配置 └── go.mod # Go 模块依赖 ``` ## 🚀 功能模块 ### 1. API Gateway (API 网关) API Gateway 作为系统的统一入口,负责: - **HTTP 接口服务**: 提供 RESTful API 接口 - **请求路由**: 将 HTTP 请求转发到对应的微服务 - **认证鉴权**: JWT Token 验证 - **日志记录**: 统一的请求日志管理 - **文件上传**: 支持本地存储和阿里云 OSS - **服务发现**: 通过 Consul 动态发现微服务 **核心功能**: - 患者端/医生端路由分发 - 文件上传管理(本地/阿里云OSS) - JWT 认证与鉴权 - API 请求统一处理 - 跨服务调用编排 ### 2. Patient Service (患者微服务) 患者微服务负责患者端所有业务功能: - **用户管理**: 患者注册、登录、信息管理 - **患者档案**: 就诊人管理、健康档案 - **地址管理**: 收货地址的增删改查 - **预约挂号**: 预约下单、支付、排班查询 - **在线问诊**: 图文/电话/视频问诊 - **开药服务**: 在线开药、处方管理 - **订单管理**: 订单查询、支付、退款 - **gRPC 接口**: 提供高性能的 RPC 服务 **数据模型**: - User: 用户基础信息(登录账号) - Patient: 患者档案信息(就诊人) - Address: 地址信息 - Appointment: 预约挂号订单 - Consultation: 问诊订单 - Prescription: 处方与开药订单 - Order: 统一订单管理 ### 3. Doctor Service (医生微服务) 医生微服务负责医生端所有业务功能: #### 3.1 医生管理 - **医生注册与登录**: 支持手机号注册,短信验证码验证 - **资质管理**: 上传资格证、执业证,等待平台审核 - **信息完善**: 擅长领域、出诊范围、职称、医院等信息 - **审核流程**: 待审核、通过、驳回三种状态 - **排班管理**: 医生设置出诊时间 #### 3.2 接诊服务 - **预约管理**: 接受/拒绝患者的预约挂号 - **问诊服务**: 处理在线问诊,支持图文/电话/视频 - **处方管理**: 开具电子处方,药品管理 - **患者管理**: 查看接诊患者历史病历 #### 3.3 问诊服务 - **问诊订单**: 处理患者的在线问诊请求 - **实时沟通**: 与患者进行消息交流 - **状态管理**: 接受、拒绝、完成问诊 #### 3.4 处方管理 - **处方开具**: 医生创建电子处方 - **处方审核**: 审核患者的开药申请 - **药品管理**: 药品信息查询 #### 3.5 病历管理 - **病历开具**: 关联问诊订单创建病历 - **病历查询**: 按患者、时间、诊断筛选 - **病历详情**: 包含主诉、现病史、诊断、治疗方案等 #### 3.6 附件管理 - **附件上传**: 医生资格证、患者病历资料、检查报告 - **附件预览**: 支持在线预览 - **权限控制**: 仅授权用户可访问 #### 3.7 统计数据 - **工作台数据**: 今日预约、待接诊等 - **收入统计**: 按日、月、年统计 - **问诊量统计**: 接诊量统计 - **患者统计**: 新增患者、回访患者 **数据模型**: - Doctor: 医生信息(含资质、审核状态) - Patient: 医生查看的患者信息 - Consultation: 问诊订单 - Medicine: 药品信息 - MedicalRecord: 病历信息 - Attachment: 附件信息 ### 4. Video Service (视频服务) 视频相关服务(待开发),预计包括: - 医疗视频资源管理 - 视频播放服务 - 视频分类管理 ## 🔧 环境配置 ### 前置要求 - Go 1.25.1 或更高版本 - MySQL 5.7 或更高版本 - Consul (可选,用于服务发现) ### 配置文件 #### API Gateway 配置 (`api-gateway/dev.yaml`) ```yaml jwt: secretKey: "your-secret-key" # JWT 密钥 expires: 86400 # Token 过期时间(秒) ``` #### Patient Service 配置 (`patient-srv/dev.yaml`) ```yaml mysql: host: "127.0.0.1" port: 3306 user: "root" password: "your-password" dbname: "zhiyi_express" grpc: port: 50051 # gRPC 服务端口 server: name: "patient-service" version: "1.0.0" ``` #### Doctor Service 配置 (`doctor-srv/dev.yaml`) ```yaml mysql: host: "127.0.0.1" port: 3306 user: "root" password: "your-password" dbname: "zhiyi_express" grpc: port: 50053 # gRPC 服务端口 ``` ## 📦 安装部署 ### 1. 克隆项目 ```bash git clone cd zhiyi-express ``` ### 2. 安装依赖 ```bash # API Gateway cd api-gateway go mod download # Patient Service cd ../patient-srv go mod download # Doctor Service cd ../doctor-srv go mod download ``` ### 3. 数据库初始化 ```bash # 创建数据库 mysql -u root -p -e "CREATE DATABASE zhiyi_express CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" # 运行服务时会自动创建表结构(GORM AutoMigrate) ``` ### 4. 启动服务 ```bash # 启动 Patient Service cd patient-srv/basic/cmd go run main.go # 启动 Doctor Service(新开一个终端) cd ../../../doctor-srv/basic/cmd go run main.go # 启动 API Gateway(新开一个终端) cd ../../../api-gateway/basic/cmd go run main.go ``` 服务启动后: - API Gateway: http://localhost:8080 - Patient Service (gRPC): localhost:50051 - Doctor Service (gRPC): localhost:50053 ## 🔌 API 接口 ### 用户相关接口 | 方法 | 路径 | 描述 | 认证 | |------|------|------|------| | POST | `/user/register` | 用户注册 | 否 | | POST | `/user/login` | 用户登录 | 否 | | POST | `/auth/user/realNameAuth` | 实名认证 | 是 | ### 医生相关接口 | 方法 | 路径 | 描述 | 认证 | |------|------|------|------| | POST | `/doctor/register` | 医生注册 | 否 | | POST | `/doctor/login` | 医生登录 | 否 | | GET | `/doctor/list` | 获取医生列表 | 否 | | GET | `/doctor/info` | 获取医生信息 | 否 | | POST | `/auth/doctor/qualification` | 上传医生资质 | 是 | | PUT | `/auth/doctor/info` | 更新医生信息 | 是 | | GET | `/auth/doctor/audit/status` | 获取审核状态 | 是 | ### 患者相关接口 | 方法 | 路径 | 描述 | 认证 | |------|------|------|------| | POST | `/patient/register` | 患者注册 | 否 | | POST | `/patient/login` | 患者登录 | 否 | | PUT | `/auth/patient/info` | 更新患者信息 | 是 | | POST | `/auth/patient/verify` | 患者实名认证 | 是 | | GET | `/auth/patient/info` | 获取患者信息 | 是 | ### 问诊相关接口 | 方法 | 路径 | 描述 | 认证 | |------|------|------|------| | POST | `/auth/consultation` | 创建问诊 | 是 | | GET | `/auth/consultation/:id` | 获取问诊详情 | 是 | | PUT | `/auth/consultation/status` | 更新问诊状态 | 是 | | GET | `/auth/consultation/list` | 获取问诊列表 | 是 | | POST | `/auth/consultation/rate` | 评价问诊 | 是 | ### 药品和处方接口 | 方法 | 路径 | 描述 | 认证 | |------|------|------|------| | GET | `/medicine/list` | 获取药品列表 | 否 | | GET | `/medicine/:id` | 获取药品详情 | 否 | | POST | `/auth/medicine/prescription` | 创建处方 | 是 | | GET | `/auth/medicine/prescription/:id/status` | 获取处方状态 | 是 | | POST | `/auth/medicine/order` | 创建药品订单 | 是 | | GET | `/auth/medicine/order/list` | 获取药品订单列表 | 是 | ### 病历相关接口 | 方法 | 路径 | 描述 | 认证 | |------|------|------|------| | POST | `/auth/medical-record` | 创建病历 | 是 | | GET | `/auth/medical-record/list` | 获取病历列表 | 是 | | GET | `/auth/medical-record/:id` | 获取病历详情 | 是 | | GET | `/auth/medical-record/:id/export` | 导出病历 | 是 | | POST | `/auth/medical-record/rate` | 评价病历 | 是 | ### 附件相关接口 | 方法 | 路径 | 描述 | 认证 | |------|------|------|------| | POST | `/file/upload` | 文件上传 | 否 | | POST | `/auth/attachment/upload` | 上传附件信息 | 是 | | GET | `/auth/attachment/list` | 获取附件列表 | 是 | | POST | `/auth/attachment/permission` | 设置附件权限 | 是 | ### 统计相关接口 | 方法 | 路径 | 描述 | 认证 | |------|------|------|------| | GET | `/auth/statistics/consultation` | 问诊量统计 | 是 | | GET | `/auth/statistics/doctor/performance` | 医生业绩统计 | 是 | | GET | `/auth/statistics/medicine/sales` | 药品销售统计 | 是 | | GET | `/auth/statistics/patient/satisfaction` | 患者满意度统计 | 是 | ### API 请求示例 #### 1. 医生注册 ```bash curl -X POST http://localhost:8080/doctor/register \ -H "Content-Type: application/json" \ -d '{ "phone": "13800138000", "password": "123456", "smsCode": "123456", "name": "张医生" }' ``` #### 2. 创建问诊 ```bash curl -X POST http://localhost:8080/auth/consultation \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_TOKEN" \ -d '{ "doctorId": 1, "consultationType": 1, "symptomDescription": "头痛、发烧", "attachmentUrls": ["http://example.com/image1.jpg"] }' ``` #### 3. 创建处方 ```bash curl -X POST http://localhost:8080/auth/medicine/prescription \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_TOKEN" \ -d '{ "consultationId": 1, "items": [ { "medicineId": 1, "medicineName": "阿莫西林", "quantity": 2, "dosage": "每日3次,每次1粒" } ] }' ``` ## 🛠️ 开发指南 ### Protocol Buffers 编译 当修改 `.proto` 文件后,需要重新编译生成 Go 代码: ```bash # 进入 proto 目录 cd api-gateway/basic/proto # 编译 proto 文件 protoc --go_out=. --go_opt=paths=source_relative \ --go-grpc_out=. --go-grpc_opt=paths=source_relative \ user.proto video.proto ``` ### 添加新的微服务 1. 创建服务目录结构 2. 定义 Protocol Buffers 接口 3. 实现 gRPC 服务 4. 在 API Gateway 中注册服务连接 5. 添加路由和处理器 ## 📝 日志管理 项目使用 Zap + Lumberjack 进行日志管理: - **日志位置**: `api-gateway/logs/` - **日志格式**: 按日期分割,格式为 `YYYYMMDD.log` - **日志级别**: Info, Warn, Error - **日志轮转**: 自动按日期切割 ## 🔒 安全性 - **JWT 认证**: 使用 JWT Token 进行用户身份验证 - **密码加密**: 用户密码使用加密存储 - **中间件保护**: 敏感接口通过认证中间件保护 - **输入验证**: 所有用户输入进行严格验证 ## 🤝 贡献指南 欢迎提交 Issue 和 Pull Request 来改进项目。 ## 📄 许可证 本项目仅供教学使用。 ## 📞 联系方式 如有问题,请联系项目维护者。 --- **智医快线** - 让医疗服务触手可及