# yaolifang **Repository Path**: git-liu-zi-jun/yaolifang ## Basic Information - **Project Name**: yaolifang - **Description**: 药立方是一个基于Vue 3 + Node.js构建的在线医疗问诊系统,涵盖医生端、用户端和商家端三大模块,支持实时图文/视频问诊、处方开具、健康档案管理、医生排班、库存管理及优惠券等核心功能,通过WebSocket实现医患双向实时通信,为用户提供便捷的在线医疗服务体验。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-22 - **Last Updated**: 2026-07-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 药立方 - 医疗电商平台

集药品电商 · 互联网医院 · 处方审核 · 药品追溯于一体的综合性医疗健康服务平台

Spring Boot Node.js Vue Java MySQL License

## 项目简介 药立方(Yaolifang)是一个采用前后端分离架构的医疗电商平台,覆盖 **C 端用户购药**、**B 端商家运营**、**平台监管**三端业务,并深度集成**互联网医院**、**处方审核**、**药品追溯**等医疗特有功能。 **核心特性**: - 🔐 **安全合规**:患者隐私数据 AES-256 加密存储,问诊记录保留 15 年 - 💊 **处方药闭环**:上传/开方 → 药师审核 → 购药 → 发货校验全程可追溯 - 🏥 **在线问诊**:图文/视频问诊 + WebSocket 实时消息 + 电子处方签名 - 🔍 **药品追溯**:一物一码,对接国家药品追溯协同服务平台,支持召回管理 - 📱 **多端支持**:C端移动端 H5 + B端/运营端 PC 后台 ## 技术栈 ### 前端 | 技术 | 版本 | 用途 | |------|------|------| | Vue 3 + TypeScript | ^3.4 | 核心框架 | | Vite | ^5.0 | 构建工具 | | Vant 4 | ^4.8 | C端移动端 UI | | Element Plus | ^2.4 | B端 / 运营端 UI | | Pinia | ^2.1 | 状态管理 | | Vue Router 4 | ^4.2 | 路由管理 | | Axios | ^1.6 | HTTP 客户端 | | WebSocket | 原生 | 问诊实时消息 | | postcss-px-to-viewport | - | 移动端适配(375px 设计稿) | ### 后端(Java Spring Boot) | 技术 | 版本 | 用途 | |------|------|------| | Spring Boot | 3.2.0 | 核心框架 | | JDK | 17 | 运行环境 | | MyBatis-Plus | 3.5.5 | ORM 框架 | | MySQL | 8.0 | 关系型数据库 | | Druid | 1.2.20 | 数据库连接池 | | JWT (jjwt) | 0.12.3 | 身份认证 | | Knife4j | 4.4.0 | API 文档 | | Hutool | 5.8.23 | 工具类库 | | Lombok | 1.18.30 | 简化代码 | ### 后端(Node.js) | 技术 | 版本 | 用途 | |------|------|------| | Node.js | 18.x | 运行环境 | | Express | ^4.18 | Web 框架 | | TypeScript | ^5.3 | 类型安全 | | mysql2 | ^3.23 | MySQL 驱动 | | jsonwebtoken | ^9.0 | JWT 认证 | | cors | ^2.8 | 跨域支持 | | multer | ^1.4 | 文件上传 | ### 安全与合规 - AES-256 加密:患者隐私数据加密存储 - 数据脱敏:敏感信息展示脱敏 - JWT 鉴权:Token + 拦截器 - 数字签名:SHA256withRSA 电子处方签名 - 数据留痕:操作日志全程记录 - 合规存储:问诊档案保留 15 年(医疗法规要求) ## 项目结构 ``` yaolifang/ ├── backend/ # 后端服务 │ ├── yaolifang-common/ # Java 公共模块 │ │ └── src/main/java/com/yaolifang/common/ │ │ ├── config/ # MyBatis 自动填充 │ │ ├── context/ # 用户上下文 │ │ ├── entity/ # 基础实体 │ │ ├── exception/ # 全局异常处理 │ │ ├── interceptor/ # 认证拦截器 │ │ ├── result/ # 统一响应格式 │ │ └── security/ # AES/JWT/脱敏工具 │ ├── yaolifang-user/ # Java 用户服务 (8081) │ ├── yaolifang-user-node/ # Node 用户服务 (8001) │ ├── yaolifang-prescription/ # Java 处方服务 (8082) │ ├── yaolifang-prescription-node/ # Node 处方服务 (8003) │ ├── yaolifang-consultation/ # Java 问诊服务 (8083) │ ├── yaolifang-product/ # Java 商品服务 (8084) │ ├── yaolifang-product-node/ # Node 商品服务 (8002) │ ├── yaolifang-order/ # Java 订单服务 (8085) │ ├── yaolifang-order-node/ # Node 订单服务 (8004) │ ├── yaolifang-traceability/ # Java 追溯服务 (8086) │ ├── yaolifang-hospital/ # Java 医院服务 (8087) │ ├── yaolifang-gateway/ # Java API 网关 (8080) │ ├── yaolifang-gateway-node/ # Node API 网关 │ └── uploads/ # 文件上传目录 ├── frontend/ # 前端项目 │ ├── c-end/ # C端用户端 (5173) │ │ ├── src/ │ │ │ ├── api/ # API 接口定义 │ │ │ ├── components/ # 公共组件 │ │ │ ├── router/ # 路由配置 │ │ │ ├── stores/ # Pinia 状态管理 │ │ │ ├── utils/ # 工具函数 │ │ │ └── views/ # 页面组件 │ │ └── vite.config.ts # 代理配置 │ ├── b-end/ # B端商家端 (5174) │ └── admin/ # 运营端 (5175) ├── database/ # 数据库脚本 │ ├── init.sql # 初始化脚本 │ └── migrations/ # 增量迁移脚本 └── README.md ``` ## 核心功能模块 ### 1. 处方药购买流程 ``` 用户上传处方照片 / 在线问诊开方 ↓ 执业药师在线审核(通过 / 驳回 / 要求补充) ↓ 审核通过 → 加入购物车并支付 ↓ 订单关联处方编号,全程可追溯 ↓ 发货时校验处方与药品匹配性 ``` - 6 状态机:待审核 → 审核通过/驳回/要求补充 → 已使用/已过期 - 发货前强制校验药品与处方匹配 ### 2. 处方上传功能 - 📷 支持多图上传(最多5张,单张不超过5MB) - 📋 药品选择器,从药品库中搜索选择 - ✅ 表单验证:患者姓名、照片、药品必填 - 🔐 上传需 JWT 认证,服务端类型和大小校验 ### 3. 在线问诊模块 ``` 用户选择科室和医生 → 发起图文/视频问诊 ↓ 医生接诊 → WebSocket 实时消息通信 ↓ 医生开具电子处方(SHA256withRSA 数字签名) ↓ 处方自动流转至药品购买流程 ↓ 问诊记录加密存储,保留 15 年 ``` - WebSocket 原生实现,消息持久化 + 离线推送 - RSA-2048 密钥对签名,SHA-256 哈希校验 ### 4. 药品追溯模块 ``` 入库扫码(批量导入追溯码) → 状态:在库 ↓ 出库扫码 → 状态:已出库 ↓ 销售绑定订单+患者 → 状态:已销售(一物一码) ↓ 上报国家药品追溯协同服务平台 ↓ 消费者扫码查询 → 状态:已验证 ↓ 召回发起 → 自动定位受影响追溯码 → 通知/退回 → 上报召回数据 ``` - 6 状态机:未入库 → 在库 → 已出库 → 已销售 → 已验证,任意状态 → 已召回 - 对接国家药品追溯协同服务平台(NMPA) - 召回自动按药品+批次定位受影响追溯码 ### 5. 用户端首页 - 顶部搜索栏(药品名 / 疾病名 / 批准文号 三种搜索类型) - 轮播 Banner(健康科普,带"已审核"标识) - 快捷入口:在线问诊、处方药、OTC药品、医疗器械、慢病管理 - 药品推荐列表(基于健康档案合规推荐,区分 Rx/OTC) - 底部 Tab:首页、分类、问诊、购物车、我的 ### 6. 药品分类浏览 - 4 大一级分类:处方药、OTC非处方药、医疗器械、保健品 - 11 个子分类,每个分类都有对应产品 - 点击子分类跳转搜索页面,展示该分类下的药品列表 ## 后端服务端口(Node.js 版本) | 服务 | 端口 | Context Path | 说明 | |------|------|--------------|------| | yaolifang-user-node | 8001 | /api/user | 用户服务(含文件上传) | | yaolifang-product-node | 8002 | /api/product | 商品服务(分类/列表/详情) | | yaolifang-prescription-node | 8003 | /api/prescription | 处方服务(上传/审核/校验) | | yaolifang-order-node | 8004 | /api/order | 订单服务 | | yaolifang-traceability | 8888 | /api/traceability | 药品追溯服务 | ## 后端服务端口(Java 版本) | 服务 | 端口 | Context Path | 说明 | |------|------|--------------|------| | yaolifang-gateway | 8080 | - | API 网关 | | yaolifang-user | 8081 | /api/user | 用户服务 | | yaolifang-prescription | 8082 | /api/prescription | 处方服务 | | yaolifang-consultation | 8083 | /api/consultation | 问诊服务 | | yaolifang-product | 8084 | /api/product | 商品服务 | | yaolifang-order | 8085 | /api/order | 订单服务 | | yaolifang-traceability | 8086 | /api/traceability | 药品追溯服务 | | yaolifang-hospital | 8087 | /api/hospital | 互联网医院服务 | ## 快速开始 ### 环境要求 - JDK 17+(Java 服务) - Node.js 18+(Node.js 服务) - MySQL 8.0+ - Maven 3.8+(Java 服务) ### 1. 数据库初始化 ```bash # 创建数据库 mysql -u root -p -e "CREATE DATABASE yaolifang DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" # 执行初始化脚本 mysql -u root -p yaolifang < database/init.sql # 执行增量迁移脚本(如需) mysql -u root -p yaolifang < database/migrations/V2__prescription_drug_purchase.sql mysql -u root -p yaolifang < database/migrations/V3__consultation_module.sql mysql -u root -p yaolifang < database/migrations/V4__traceability_module.sql ``` ### 2. 启动 Node.js 后端服务(推荐) ```bash # 用户服务(端口 8001) cd backend/yaolifang-user-node npm install npm run build npm start # 商品服务(端口 8002) cd backend/yaolifang-product-node npm install npm run build npm start # 处方服务(端口 8003) cd backend/yaolifang-prescription-node npm install npm run build npm start # 订单服务(端口 8004) cd backend/yaolifang-order-node npm install npm run build npm start # 药品追溯服务(端口 8888) # 追溯服务为 Java 版本 cd backend/yaolifang-traceability mvn clean package -DskipTests java -jar target/yaolifang-traceability-1.0.0.jar ``` ### 3. 启动 Java 后端服务 ```bash # 编译所有模块 cd backend mvn clean install -DskipTests # 启动各微服务(按需启动) cd yaolifang-user && mvn spring-boot:run cd yaolifang-prescription && mvn spring-boot:run cd yaolifang-consultation && mvn spring-boot:run cd yaolifang-order && mvn spring-boot:run cd yaolifang-traceability && mvn spring-boot:run ``` ### 4. 启动前端 ```bash # C端用户端(推荐优先启动) cd frontend/c-end npm install npm run dev # http://localhost:5173 # B端商家端 cd frontend/b-end npm install npm run dev # http://localhost:5174 # 运营端 cd frontend/admin npm install npm run dev # http://localhost:5175 ``` ### 5. 数据库配置 **Node.js 服务**:配置位于各服务的 `.env` 文件 ```env DB_HOST=localhost DB_PORT=3306 DB_NAME=yaolifang DB_USER=root DB_PASSWORD=123456 ``` **Java 服务**:配置位于各服务的 `application.yml` ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/yaolifang?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai username: root password: 123456 ``` 请根据实际环境修改数据库连接信息。 ## 访问地址 | 端 | 地址 | 说明 | |---|---|---| | C端用户端 | http://localhost:5173 | 移动端 H5 | | B端商家端 | http://localhost:5174 | PC 后台 | | 运营端 | http://localhost:5175 | PC 后台 | | 用户服务 | http://localhost:8001 | Node 服务 | | 商品服务 | http://localhost:8002 | Node 服务 | | 处方服务 | http://localhost:8003 | Node 服务 | | 订单服务 | http://localhost:8004 | Node 服务 | | 药品追溯服务 | http://localhost:8888 | Java 服务 | | API 网关 | http://localhost:8080 | Java 网关 | | 接口文档 | http://localhost:8081/doc.html | Knife4j | ## 核心业务流程 ### 处方药购买流程 ``` 上传处方 / 在线开方 → 药师审核 → 加购支付 → 订单关联处方 → 发货校验 ``` ### 在线问诊流程 ``` 选科室医生 → 发起问诊 → 医生接诊(WebSocket) → 开电子处方(RSA签名) → 处方流转至购药 ``` ### 药品追溯流程 ``` 入库扫码 → 出库扫码 → 销售绑定(一物一码) → 上报国家平台 → 消费者扫码查询 → 召回自动定位 ``` ### 处方上传流程 ``` 填写患者姓名 → 上传处方照片 → 选择处方药品 → 提交审核 → 查看审方状态 ``` ## 目录说明 ### backend/yaolifang-common 公共基础模块,提供: - `Result` / `ResultCode`:统一响应格式 - `BusinessException` / `GlobalExceptionHandler`:全局异常处理 - `JwtUtil`:JWT 生成与校验 - `AesEncryptUtil`:AES-256 加解密 - `DataMaskUtil`:数据脱敏 - `AuthInterceptor` / `UserContext`:认证拦截器与用户上下文 - `BaseEntity`:基础实体(id/createTime/updateTime/deleted) - `MybatisMetaObjectHandler`:自动填充处理器 ### frontend/c-end C端移动端前端,包含: - `api/`:API 接口定义(auth, product, prescription, order, consultation 等) - `components/`:公共组件(Banner、搜索栏、快捷入口、TabBar 等) - `views/`:页面组件(首页、分类、商品详情、处方上传、问诊、订单等) - `stores/`:Pinia 状态管理(购物车) - `router/`:路由配置 - `utils/`:工具函数(HTTP 请求封装、WebSocket) ### database/ - `init.sql`:基础表结构(用户、商品、订单等 25+ 表) - `migrations/`:增量迁移脚本 - V2:处方药购买流程相关表 - V3:问诊模块、电子处方签名、问诊档案表 - V4:药品追溯、召回、监管上报相关表 ## 开发规范 - **数据库约束**:建表脚本仅展示主键(PK)和外键(FK)约束 - **逻辑删除**:所有业务表使用 `deleted` 字段逻辑删除(0-未删除,1-已删除) - **自动填充**:`createTime` / `updateTime` / `createBy` / `updateBy` 自动填充 - **接口规范**:统一返回 `Result` 包装,含 code/message/data/timestamp - **命名规范**:数据库下划线命名,Java/TypeScript 驼峰命名 - **前端代理**:Vite proxy 配置,将 `/api/*` 请求转发到对应后端服务 ## API 接口示例 ### 获取分类树 ``` GET /api/product/categories ``` ### 获取药品列表 ``` GET /api/product/list?page=1&size=10&categoryId=5&keyword=阿莫西林 ``` ### 上传处方(需 JWT) ``` POST /api/prescription Content-Type: application/json { "userName": "张三", "images": ["/uploads/xxx.jpg"], "drugs": [ {"drugId": 1, "drugName": "阿莫西林胶囊", "specification": "0.25g×24粒", "quantity": 2} ] } ``` ### 文件上传(需 JWT) ``` POST /api/upload Content-Type: multipart/form-data files: ``` ## License MIT