|
|
# 秦皇岛中医院医技预约系统需求文档
|
|
|
|
|
|
## 1. 原始需求
|
|
|
|
|
|
### 1.1 业务背景
|
|
|
秦皇岛中医院作为综合性医疗机构,拥有多个医技检查科室(如CT、MRI、超声、内镜等)。随着医疗业务量增长,传统的手工预约管理模式已无法满足需求,存在以下问题:
|
|
|
- 患者排队时间长,检查安排效率低
|
|
|
- 各科室号源管理混乱,无法合理分配
|
|
|
- 住院、门诊、急诊、体检等不同渠道的患者预约需求难以统筹
|
|
|
- HIS系统医嘱信息无法及时同步到检查科室
|
|
|
- 缺乏统一的报到和登记流程
|
|
|
|
|
|
### 1.2 核心需求(大白话描述)
|
|
|
- 医生开医嘱后,患者能通过各种方式(自助机、手机、窗口)预约检查时间
|
|
|
- 各科室能设置每天的号源,按住院、门诊、急诊等不同渠道分配号源比例
|
|
|
- 患者预约后能按时段报到,科室能管理检查进度
|
|
|
- HIS系统开医嘱后自动推送到预约系统,不用人工录入
|
|
|
- 管理后台能统计预约情况,监控科室运营状况
|
|
|
|
|
|
### 1.3 业务场景
|
|
|
1. **住院患者预约场景**:住院医生在HIS系统开医嘱 → HIS推送医嘱信息 → 护士站工作人员查看待预约列表 → 根据病情和科室号源情况预约合适时段 → 通知患者检查时间 → 患者按时报到检查
|
|
|
2. **门诊患者预约场景**:门诊医生开医嘱 → 患者缴费后 → 通过自助机或手机H5预约 → 选择合适时段 → 按预约时间报到检查
|
|
|
3. **急诊患者预约场景**:急诊医生开医嘱 → 急诊优先通道快速预约 → 优先检查
|
|
|
4. **体检患者预约场景**:体检中心开检查单 → 患者预约体检时段 → 按时段完成检查
|
|
|
|
|
|
---
|
|
|
|
|
|
## 2. 设计需求(功能需求)
|
|
|
|
|
|
### 2.1 系统角色定义
|
|
|
|
|
|
#### 2.1.1 系统管理员
|
|
|
- 权限:系统全局配置、用户管理、权限分配、科室基础信息管理
|
|
|
- 职责:维护系统正常运行,配置全局参数
|
|
|
|
|
|
#### 2.1.2 科室管理员(医技科室)
|
|
|
- 权限:本科室号源管理、预约计划制定、科室设备管理、预约记录查询
|
|
|
- 职责:管理本科室号源,制定预约计划,处理预约业务
|
|
|
|
|
|
#### 2.1.3 护士站工作人员(住院科室)
|
|
|
- 权限:查看本病区医嘱、为住院患者预约、取消预约、查看预约记录
|
|
|
- 职责:为本病区住院患者预约医技检查
|
|
|
|
|
|
#### 2.1.4 临床医生
|
|
|
- 权限:查看本人开具医嘱的预约情况、为患者预约
|
|
|
- 职责:开医嘱后可查看或协助患者预约
|
|
|
|
|
|
#### 2.1.5 患者/家属
|
|
|
- 权限:查看本人医嘱、自助预约、取消预约、改约
|
|
|
- 职责:通过自助机或H5完成自助预约
|
|
|
|
|
|
#### 2.1.6 第三方系统
|
|
|
- 权限:通过接口推送医嘱、查询预约状态
|
|
|
- 著作:HIS系统、PACS系统、体检系统等外部系统对接
|
|
|
|
|
|
### 2.2 功能模块划分
|
|
|
|
|
|
#### 2.2.1 系统管理模块
|
|
|
| 功能编号 | 功能名称 | 功能描述 | 角色 |
|
|
|
|---------|---------|---------|------|
|
|
|
| SYS-001 | 用户管理 | 添加、修改、删除系统用户,分配用户分组,重置密码 | 系统管理员 |
|
|
|
| SYS-002 | 分组管理 | 创建用户分组,分配菜单权限 | 系统管理员 |
|
|
|
| SYS-003 | 菜单管理 | 配置系统菜单结构、菜单权限 | 系统管理员 |
|
|
|
| SYS-004 | 系统配置 | 配置系统全局参数(如预约超时时间、缴费超时等) | 系统管理员 |
|
|
|
| SYS-005 | 密码修改 | 用户修改自身密码 | 所有用户 |
|
|
|
|
|
|
#### 2.2.2 基础数据管理模块
|
|
|
| 功能编号 | 功能名称 | 功能描述 | 角色 |
|
|
|
|---------|---------|---------|------|
|
|
|
| BASE-001 | 科室管理 | 维护医技科室信息(科室名称、编号、位置、状态) | 系统管理员/科室管理员 |
|
|
|
| BASE-002 | 科室资源管理 | 维护科室检查室/机房资源(资源名称、位置、状态、冬夏时令配置) | 科室管理员 |
|
|
|
| BASE-003 | 设备管理 | 维护检查设备信息(设备名称、状态) | 科室管理员 |
|
|
|
| BASE-004 | 检查项目管理 | 维护检查项目(项目名称、代码、分类、检查须知、空腹要求、检查时长、关联服务组) | 科室管理员 |
|
|
|
| BASE-005 | 检查项目分类 | 维护检查项目分类信息 | 科室管理员 |
|
|
|
| BASE-006 | 项目设备绑定 | 配置检查项目可用的设备/服务组 | 科室管理员 |
|
|
|
| BASE-007 | 项目互斥配置 | 配置检查项目之间的互斥关系(如某些检查不能在同一天进行) | 科室管理员 |
|
|
|
| BASE-008 | 时间段管理 | 配置预约时间段(时间段名称、开始时间、结束时间、截止预约时间) | 科室管理员 |
|
|
|
| BASE-009 | 病区管理 | 维护住院病区信息 | 系统管理员 |
|
|
|
| BASE-010 | HIS数据同步 | 从HIS系统同步科室、用户、检查项目等基础数据 | 系统管理员 |
|
|
|
|
|
|
#### 2.2.3 预约计划管理模块
|
|
|
| 功能编号 | 功能名称 | 功能描述 | 角色 |
|
|
|
|---------|---------|---------|------|
|
|
|
| PLAN-001 | 预约计划模板 | 配置每周的号源模板(按星期、时间段、资源、设备配置号源) | 科室管理员 |
|
|
|
| PLAN-002 | 渠道比例配置 | 配置各预约渠道(住院/门诊/急诊/体检)的号源占比 | 科室管理员 |
|
|
|
| PLAN-003 | 模板占位管理 | 设置模板的占位数量(预留号源) | 科室管理员 |
|
|
|
| PLAN-004 | 生成计划明细 | 根据模板批量生成未来日期的号源明细 | 科室管理员 |
|
|
|
| PLAN-005 | 计划明细管理 | 查看、修改、删除已生成的号源明细 | 科室管理员 |
|
|
|
| PLAN-006 | 明细占位管理 | 调整特定日期号源的占位数量 | 科室管理员 |
|
|
|
| PLAN-007 | 节假日配置 | 配置特殊日期的工作日/节假日标识 | 科室管理员 |
|
|
|
| PLAN-008 | 体检日历管理 | 为体检机构配置预约日历 | 科室管理员 |
|
|
|
|
|
|
#### 2.2.4 预约业务处理模块
|
|
|
| 功能编号 | 功能名称 | 功能描述 | 角色 |
|
|
|
|---------|---------|---------|------|
|
|
|
| YUYUE-001 | 医嘱查询列表 | 查看待预约、已预约、已报到、已完成的医嘱列表 | 科室管理员/护士/医生 |
|
|
|
| YUYUE-002 | 开始预约 | 为患者选择合适的时段完成预约 | 科室管理员/护士/医生/患者 |
|
|
|
| YUYUE-003 | 取消预约 | 取消已预约记录,释放号源 | 科室管理员/护士/医生/患者 |
|
|
|
| YUYUE-004 | 更改预约 | 修改预约时间,调整到其他时段 | 科室管理员/护士/医生/患者 |
|
|
|
| YUYUE-005 | 报到登记 | 患者到院后报到登记 | 科室管理员 |
|
|
|
| YUYUE-006 | 取消报到 | 取消报到状态 | 科室管理员 |
|
|
|
| YUYUE-007 | 查看日志 | 查看医嘱状态变更日志 | 所有用户 |
|
|
|
| YUYUE-008 | 打印申请单 | 打印检查申请单(含条形码) | 科室管理员/护士 |
|
|
|
| YUYUE-009 | 自动预约 | 系统根据规则自动为患者分配时段 | 系统 |
|
|
|
| YUYUE-010 | 门诊缴费检查 | 检查门诊患者是否缴费,未缴费提示 | 系统 |
|
|
|
| YUYUE-011 | 超时取消 | 门诊患者缴费超时自动取消预约 | 系统 |
|
|
|
|
|
|
#### 2.2.5 统计查询模块
|
|
|
| 功能编号 | 功能名称 | 功能描述 | 角色 |
|
|
|
|---------|---------|---------|------|
|
|
|
| STAT-001 | 预约统计 | 统计各科室、各时段的预约情况 | 科室管理员 |
|
|
|
| STAT-002 | 渠道统计 | 统计各预约渠道的使用情况 | 科室管理员 |
|
|
|
| STAT-003 | 开单统计 | 统计医生开单情况 | 科室管理员 |
|
|
|
| STAT-004 | 号源占用查询 | 查看特定时段号源占用明细 | 科室管理员 |
|
|
|
|
|
|
#### 2.2.6 HIS集成模块
|
|
|
| 功能编号 | 功能名称 | 功能描述 | 角色 |
|
|
|
|---------|---------|---------|------|
|
|
|
| HIS-001 | 医嘱消息接收 | 接收HIS推送的医嘱信息(MI0150) | 系统 |
|
|
|
| HIS-002 | 医嘱状态变更 | 接收医嘱状态变更消息(MI0164) | 系统 |
|
|
|
| HIS-003 | 医嘱更新 | 接收医嘱更新消息(MU0165) | 系统 |
|
|
|
| HIS-004 | 检查信息同步 | 接收检查信息消息(CI0047/CI0054/CI0055) | 系统 |
|
|
|
| HIS-005 | 检查确认同步 | 接收检查确认消息(CD0050) | 系统 |
|
|
|
| HIS-006 | 医嘱订单同步 | 接收医嘱订单消息(OI0083/OD0084) | 系统 |
|
|
|
| HIS-007 | 向PACS推送申请单 | 预约后向PACS系统推送检查申请单 | 系统 |
|
|
|
| HIS-008 | 从PACS接收报到 | 接收PACS系统的报到/取消报到通知 | 系统 |
|
|
|
|
|
|
#### 2.2.7 自助机模块
|
|
|
| 功能编号 | 功能名称 | 功能描述 | 角色 |
|
|
|
|---------|---------|---------|------|
|
|
|
| ZIZHU-001 | 患者登录 | 通过登记号/就诊卡登录 | 患者 |
|
|
|
| ZIZHU-002 | 查看医嘱列表 | 查看本人的医嘱检查项目 | 患者 |
|
|
|
| ZIZHU-003 | 自助预约 | 选择时段完成预约 | 患者 |
|
|
|
| ZIZHU-004 | 取消/改约 | 取消预约或更改预约时间 | 患者 |
|
|
|
|
|
|
#### 2.2.8 H5移动端模块
|
|
|
| 功能编号 | 功能名称 | 功能描述 | 角色 |
|
|
|
|---------|---------|---------|------|
|
|
|
| H5-001 | 患者登录 | 通过患者ID登录 | 患者 |
|
|
|
| H5-002 | 查看医嘱 | 查看本人医嘱检查项目 | 患者 |
|
|
|
| H5-003 | 预约操作 | 完成预约、取消预约 | 患者 |
|
|
|
| H5-004 | 查看详情 | 查看医嘱详情、预约信息 | 患者 |
|
|
|
|
|
|
### 2.3 核心业务流程
|
|
|
|
|
|
#### 2.3.1 住院患者预约流程
|
|
|
```
|
|
|
HIS开医嘱 → MQ推送医嘱信息 → 监听服务接收写入s_list(状态0) →
|
|
|
护士站查询待预约列表 → 选择医嘱 → 选择时段 → 预约操作(状态1) →
|
|
|
通知患者 → 患者按时报到(状态2) → 检查完成(状态3)
|
|
|
```
|
|
|
|
|
|
#### 2.3.2 门诊患者预约流程
|
|
|
```
|
|
|
HIS开医嘱 → MQ推送医嘱信息 → 监听服务接收写入s_list(状态0) →
|
|
|
患者缴费 → 缴费状态更新 → 患者自助机/H5登录 →
|
|
|
查看医嘱 → 选择时段预约 → 检查缴费状态 → 预约成功(状态1) →
|
|
|
患者按时报到(状态2) → 检查完成(状态3)
|
|
|
```
|
|
|
|
|
|
#### 2.3.3 号源生成流程
|
|
|
```
|
|
|
科室管理员配置预约计划模板 → 配置各渠道号源比例 →
|
|
|
选择模板 → 设置日期范围 → 批量生成计划明细 →
|
|
|
生成s_source_roster_detail表记录 →
|
|
|
生成s_source_roster_detail_count表记录(含乐观锁version)
|
|
|
```
|
|
|
|
|
|
#### 2.3.4 HIS消息处理流程
|
|
|
```
|
|
|
HIS系统推送MQ消息 → C#监听服务接收 →
|
|
|
解析XML消息 → 提取医嘱信息 →
|
|
|
写入/更新s_list表 → 记录操作日志 →
|
|
|
返回确认消息
|
|
|
```
|
|
|
|
|
|
---
|
|
|
|
|
|
## 3. 设计规格(技术规范)
|
|
|
|
|
|
### 3.1 技术栈选择
|
|
|
|
|
|
#### 3.1.1 后端技术栈
|
|
|
- **框架**: Laravel 8 (PHP 7.4+/8.0+)
|
|
|
- **数据库**: MySQL 5.7+
|
|
|
- **认证**: Laravel Sanctum (Token认证)
|
|
|
- **PDF生成**: barryvdh/laravel-snappy + wkhtmltopdf
|
|
|
- **条形码生成**: picqer/php-barcode-generator
|
|
|
- **跨域处理**: fruitcake/laravel-cors
|
|
|
|
|
|
#### 3.1.2 前端技术栈
|
|
|
- **管理后台**: Vue 3 + Vite 4 + Element Plus 2.3 + Pinia + Vue Router
|
|
|
- **自助机**: Vue 3 + Vite 5 + Element Plus 2.7 + Vue Router
|
|
|
- **H5移动端**: uni-app (支持多端发布)
|
|
|
- **HTTP客户端**: Axios
|
|
|
|
|
|
#### 3.1.3 其他服务
|
|
|
- **WebSocket服务**: Workerman (PHP)
|
|
|
- **HIS监听服务**: C# Windows Service + MQ Client
|
|
|
|
|
|
### 3.2 接口规范
|
|
|
|
|
|
#### 3.2.1 API基础规范
|
|
|
- **基础路径**: `/api/v1/`
|
|
|
- **认证方式**: Bearer Token (Sanctum)
|
|
|
- **请求方式**: POST (业务接口)、GET (查询接口)
|
|
|
- **响应格式**: JSON
|
|
|
```json
|
|
|
{
|
|
|
"status": true/false,
|
|
|
"msg": "提示信息",
|
|
|
"data": {}
|
|
|
}
|
|
|
```
|
|
|
|
|
|
#### 3.2.2 接口分类
|
|
|
1. **系统管理接口** (`/api/v1/admin/*`)
|
|
|
- 用户、分组、菜单、配置管理
|
|
|
2. **业务管理接口** (`/api/v1/admin/*`)
|
|
|
- 科室、设备、检查项目、预约计划管理
|
|
|
3. **H5端接口** (`/api/v1/H5/*`)
|
|
|
- 患者登录、医嘱查询、预约操作
|
|
|
4. **第三方接口** (`/api/v1/T/*`)
|
|
|
- HIS推送医嘱、PACS报到通知
|
|
|
|
|
|
#### 3.2.3 中间件
|
|
|
- `checktoken`: 验证用户Token
|
|
|
- `check.sign`: 验证第三方接口签名
|
|
|
- `log`: 记录接口访问日志
|
|
|
- `xmllog`: 记录XML格式接口日志
|
|
|
|
|
|
### 3.3 数据库规范
|
|
|
|
|
|
#### 3.3.1 表命名规范
|
|
|
- 系统表:无前缀 (如 `users`, `group`, `menu`)
|
|
|
- 业务表:前缀 `s_` (如 `s_department`, `s_list`)
|
|
|
- 字段使用下划线命名法
|
|
|
|
|
|
#### 3.3.2 通用字段规范
|
|
|
- **主键**: `id` (自增INT或BIGINT)
|
|
|
- **创建时间**: `created_at` (timestamp, 自动填充)
|
|
|
- **更新时间**: `updated_at` (datetime, 自动更新)
|
|
|
- **状态字段**: `status` (0-关闭/禁用, 1-开启/正常)
|
|
|
- **删除标记**: `is_del` (0-未删除, 1-已删除,软删除)
|
|
|
- **操作人**: `adduser` / `create_user` (INT)
|
|
|
|
|
|
#### 3.3.3 状态编码规范
|
|
|
- **预约状态** (`list_status`):
|
|
|
- 0: 正在申请(医嘱已接收,待预约)
|
|
|
- 1: 已预约
|
|
|
- 2: 已登记(已报到)
|
|
|
- 3: 已结束(检查完成)
|
|
|
- **患者类型** (`patient_type`):
|
|
|
- 0: 住院
|
|
|
- 1: 门诊
|
|
|
- 2: 急诊
|
|
|
- 3: 体检
|
|
|
|
|
|
#### 3.3.4 乐观锁机制
|
|
|
- 号源数量表 `s_source_roster_detail_count` 使用 `version` 字段实现乐观锁
|
|
|
- 预约操作时需检查version并递增,防止并发冲突
|
|
|
|
|
|
### 3.4 代码规范
|
|
|
|
|
|
#### 3.4.1 Laravel代码规范
|
|
|
- 遵循PSR-12编码规范
|
|
|
- 控制器命名: `XxxController.php`
|
|
|
- 模型命名: 单数形式,对应表名
|
|
|
- 控制器位于 `App\Http\Controllers\API\Admin\YeWu\` 目录
|
|
|
- 复杂业务逻辑封装在 `app\Lib\` 或Service层
|
|
|
- 使用Eloquent ORM操作数据库
|
|
|
|
|
|
#### 3.4.2 Vue前端规范
|
|
|
- 组件命名: PascalCase (如 `PlanModel.vue`)
|
|
|
- 使用Composition API (推荐) 或 Options API
|
|
|
- Element Plus组件库统一UI风格
|
|
|
- API调用通过 `src/api/` 模块统一管理
|
|
|
- 使用Pinia进行状态管理
|
|
|
|
|
|
#### 3.4.3 通用规范
|
|
|
- 避免硬编码,使用配置表或环境变量
|
|
|
- 异常统一捕获和记录
|
|
|
- 关键操作记录日志
|
|
|
- 防止SQL注入、XSS攻击
|
|
|
|
|
|
### 3.5 安全与权限规范
|
|
|
|
|
|
#### 3.5.1 认证机制
|
|
|
- 用户登录: 用户名+密码验证,返回Token
|
|
|
- Token有效期: 可配置,支持Token刷新
|
|
|
- Token存储: 客户端存储access_token和refresh_token
|
|
|
|
|
|
#### 3.5.2 权限控制
|
|
|
- 基于分组+菜单的权限体系
|
|
|
- 用户属于分组,分组关联菜单
|
|
|
- API层面检查用户分组和菜单权限
|
|
|
- 科室管理员只能操作本科室数据
|
|
|
|
|
|
#### 3.5.3 数据安全
|
|
|
- 密码加密存储 (bcrypt/hash)
|
|
|
- 第三方接口签名验证 (app_id + app_secret + timestamp + sign)
|
|
|
- HIS医嘱ID唯一性校验 (`entrust_id`字段)
|
|
|
- 软删除机制保护数据不物理删除
|
|
|
|
|
|
#### 3.5.4 业务安全
|
|
|
- 门诊患者未缴费不允许预约(可配置)
|
|
|
- 预约超时自动取消并释放号源
|
|
|
- 检查项目互斥校验(部分检查不能同一天进行)
|
|
|
- 号源数量一致性校验(乐观锁)
|
|
|
|
|
|
---
|
|
|
|
|
|
## 4. 概要设计(整体架构)
|
|
|
|
|
|
### 4.1 系统架构图
|
|
|
|
|
|
```
|
|
|
┌─────────────────────────────────────────────────────────────┐
|
|
|
│ HIS系统 │
|
|
|
│ (医嘱开立、缴费、医嘱状态变更、检查信息) │
|
|
|
└─────────────────┬───────────────────────────────────────────┘
|
|
|
│ MQ消息队列
|
|
|
↓
|
|
|
┌─────────────────────────────────────────────────────────────┐
|
|
|
│ HIS消息监听服务 (C# Windows Service) │
|
|
|
│ - MI0150Listener (医嘱信息) │
|
|
|
│ - MI0164Listener (医嘱状态变更) │
|
|
|
│ - MU0165Listener (医嘱更新) │
|
|
|
│ - CI0047/CI0054/CI0055Listener (检查信息) │
|
|
|
│ - CD0050Listener (检查确认) │
|
|
|
│ - OI0083/OD0084Listener (医嘱订单) │
|
|
|
└─────────────────┬───────────────────────────────────────────┘
|
|
|
│ 写入数据库
|
|
|
↓
|
|
|
┌─────────────────────────────────────────────────────────────┐
|
|
|
│ MySQL数据库 │
|
|
|
│ - 基础数据表 (科室、设备、检查项目) │
|
|
|
│ - 号源表 (计划模板、计划明细、号源数量) │
|
|
|
│ - 业务表 (s_list预约主表、日志表) │
|
|
|
│ - 系统表 (用户、分组、菜单) │
|
|
|
└─────────────────┬───────────────────────────────────────────┘
|
|
|
│
|
|
|
↓
|
|
|
┌─────────────────────────────────────────────────────────────┐
|
|
|
│ Laravel后端API服务 │
|
|
|
│ ├─ 系统管理API (用户、权限、配置) │
|
|
|
│ ├─ 基础数据API (科室、设备、项目) │
|
|
|
│ ├─ 预约管理API (计划模板、号源管理) │
|
|
|
│ ├─ 业务处理API (预约、取消、报到) │
|
|
|
│ ├─ H5端API (患者自助预约) │
|
|
|
│ ├─ 第三方API (HIS推送、PACS报到) │
|
|
|
│ └─ WebSocket推送 (实时通知) │
|
|
|
└─────────────────┬───────────────────────────────────────────┘
|
|
|
│ HTTP/WebSocket
|
|
|
↓
|
|
|
┌──────────────┬──────────────┬──────────────┬────────────────┐
|
|
|
│ 管理后台 │ 自助机 │ H5移动端 │ PACS系统 │
|
|
|
│ (Vue 3) │ (Vue 3) │ (uni-app) │ │
|
|
|
│ │ │ │ │
|
|
|
│ - 科室管理 │ - 患者登录 │ - 患者登录 │ - 接收申请单 │
|
|
|
│ - 号源配置 │ - 查看医嘱 │ - 查看医嘱 │ - 报到通知 │
|
|
|
│ - 预约管理 │ - 自助预约 │ - 自助预约 │ │
|
|
|
│ - 统计查询 │ - 取消改约 │ - 取消改约 │ │
|
|
|
└──────────────┴──────────────┴──────────────┴────────────────┘
|
|
|
```
|
|
|
|
|
|
### 4.2 模块划分
|
|
|
|
|
|
#### 4.2.1 后端模块结构
|
|
|
```
|
|
|
Laravel/
|
|
|
├── app/
|
|
|
│ ├── Http/Controllers/API/
|
|
|
│ │ ├── Admin/
|
|
|
│ │ │ ├── YeWu/ # 业务控制器
|
|
|
│ │ │ │ ├── DepartmentController.php
|
|
|
│ │ │ │ ├── DevicesController.php
|
|
|
│ │ │ │ ├── CheckItemController.php
|
|
|
│ │ │ │ ├── PlanModelController.php
|
|
|
│ │ │ │ ├── PlanListController.php
|
|
|
│ │ │ │ ├── WorkMainController.php
|
|
|
│ │ │ │ ├── SignInController.php
|
|
|
│ │ │ │ └── ...
|
|
|
│ │ │ ├── LoginController.php
|
|
|
│ │ │ ├── UserController.php
|
|
|
│ │ │ ├── GroupController.php
|
|
|
│ │ │ ├── MenuController.php
|
|
|
│ │ │ └── ...
|
|
|
│ │ ├── H5/ # H5端控制器
|
|
|
│ │ ├── His/ # HIS对接控制器
|
|
|
│ │ ├── Third/ # 第三方接口控制器
|
|
|
│ │ └── PdfController.php
|
|
|
│ ├── Lib/ # 自定义类库
|
|
|
│ │ ├── Tools.php # 工具类
|
|
|
│ │ ├── Yz.php # 响应格式化类
|
|
|
│ │ └── JWT.php # JWT处理类
|
|
|
│ ├── Models/ # 数据模型
|
|
|
│ ├── Middleware/ # 中间件
|
|
|
│ │ ├── CheckToken.php
|
|
|
│ │ ├── Log.php
|
|
|
│ │ └── CheckSign.php
|
|
|
│ └── Services/ # 服务层(业务逻辑)
|
|
|
│ └ Admin/YeWu/
|
|
|
│ │ ├── RosterService.php
|
|
|
│ │ ├── PlanListService.php
|
|
|
│ └── ...
|
|
|
├── routes/
|
|
|
│ ├── api.php # API路由
|
|
|
│ └── web.php
|
|
|
├── config/
|
|
|
│ ├── app.php
|
|
|
│ ├── database.php
|
|
|
│ └── ...
|
|
|
└── database/
|
|
|
└── migrations/ # 数据库迁移文件
|
|
|
```
|
|
|
|
|
|
#### 4.2.2 前端模块结构
|
|
|
```
|
|
|
YiJi-admin/ # 管理后台
|
|
|
├── src/
|
|
|
│ ├── views/
|
|
|
│ │ ├── YeWu/ # 业务管理页面
|
|
|
│ │ │ ├── DepartmentConfig.vue
|
|
|
│ │ │ ├── DevicesConfig.vue
|
|
|
│ │ │ ├── CheckItemConfig.vue
|
|
|
│ │ │ ├── MainList.vue
|
|
|
│ │ │ ├── DoctorYuYue.vue
|
|
|
│ │ │ └── ...
|
|
|
│ │ ├── AppointmentMngr/ # 预约管理页面
|
|
|
│ │ │ ├── PlanModel.vue
|
|
|
│ │ │ ├── PlanList.vue
|
|
|
│ │ │ ├── TimePeriodMngr.vue
|
|
|
│ │ │ ├── RatioMngr.vue
|
|
|
│ │ │ └── ...
|
|
|
│ │ ├── SystemMngr/ # 系统管理页面
|
|
|
│ │ │ ├── User/List.vue
|
|
|
│ │ │ ├── Group/List.vue
|
|
|
│ │ │ ├── Menu/List.vue
|
|
|
│ │ │ └── ...
|
|
|
│ │ ├── Info/ # 统计查询页面
|
|
|
│ │ └── Login.vue
|
|
|
│ ├── components/ # 公共组件
|
|
|
│ ├── router/ # 路由配置
|
|
|
│ ├── store/ # Pinia状态管理
|
|
|
│ ├── api/ # API接口模块
|
|
|
│ └── utils/ # 工具函数
|
|
|
|
|
|
ZiZhuJi/ # 自助机
|
|
|
├── src/
|
|
|
│ ├── views/
|
|
|
│ │ ├── Login.vue
|
|
|
│ │ ├── CheckItemMainList.vue
|
|
|
│ │ ├── PlanList.vue
|
|
|
│ │ └── ...
|
|
|
│ ├── tools/
|
|
|
│ ├── router/
|
|
|
│ └── api/
|
|
|
|
|
|
h5/ # H5移动端
|
|
|
├── pages/
|
|
|
│ ├── Login.vue
|
|
|
│ ├── CheckItemMainList.vue
|
|
|
│ ├── PlanList.vue
|
|
|
│ └── ...
|
|
|
├── api/
|
|
|
├── static/
|
|
|
└── uni_modules/ # uni-app组件模块
|
|
|
```
|
|
|
|
|
|
### 4.3 数据流程
|
|
|
|
|
|
#### 4.3.1 医嘱接收流程
|
|
|
```
|
|
|
HIS开医嘱
|
|
|
↓
|
|
|
MQ推送XML消息 (MI0150)
|
|
|
↓
|
|
|
C#监听服务接收消息
|
|
|
↓
|
|
|
解析XML提取医嘱信息:
|
|
|
- 患者信息 (姓名、性别、年龄、身份证)
|
|
|
- 医嘱信息 (医嘱名称、医嘱代码、医嘱时间)
|
|
|
- 科室信息 (申请科室、执行科室)
|
|
|
- 患者类型 (住院/门诊/急诊)
|
|
|
- 住院信息 (病区、床号)
|
|
|
↓
|
|
|
写入s_list表 (list_status=0)
|
|
|
↓
|
|
|
记录s_list_log日志
|
|
|
↓
|
|
|
返回确认消息给HIS
|
|
|
```
|
|
|
|
|
|
#### 4.3.2 预约操作流程
|
|
|
```
|
|
|
用户选择医嘱
|
|
|
↓
|
|
|
查询可预约时段
|
|
|
↓
|
|
|
GetEnablePlan接口查询:
|
|
|
- 根据医嘱查找关联科室/资源/设备
|
|
|
- 查询s_source_roster_detail可用号源
|
|
|
- 检查号源数量 (s_source_roster_detail_count)
|
|
|
- 检查项目互斥关系 (s_huchi)
|
|
|
- 检查门诊缴费状态
|
|
|
↓
|
|
|
返回可用时段列表
|
|
|
↓
|
|
|
用户选择时段
|
|
|
↓
|
|
|
YuYue接口执行预约:
|
|
|
- 乐观锁检查version
|
|
|
- 更新号源数量 (递增used_count, 递增version)
|
|
|
- 更新s_list记录 (list_status=1, 预约时间、资源)
|
|
|
- 记录s_list_log日志
|
|
|
- 向PACS推送申请单
|
|
|
↓
|
|
|
预约成功
|
|
|
```
|
|
|
|
|
|
#### 4.3.3 号源生成流程
|
|
|
```
|
|
|
科室管理员配置模板
|
|
|
↓
|
|
|
PlanModelSave接口保存:
|
|
|
- 写入s_source_roster表
|
|
|
- 配置时间段、资源、设备
|
|
|
- 配置患者类型
|
|
|
↓
|
|
|
配置渠道比例
|
|
|
↓
|
|
|
SaveAppointmentRatio接口保存:
|
|
|
- 写入s_appointment_type_ratio表
|
|
|
- 设置各渠道占比
|
|
|
- 设置合并号源渠道
|
|
|
↓
|
|
|
生成计划明细
|
|
|
↓
|
|
|
Create接口批量生成:
|
|
|
- 根据模板和日期范围
|
|
|
- 写入s_source_roster_detail表 (每日号源)
|
|
|
- 写入s_source_roster_detail_count表 (各渠道数量)
|
|
|
- 初始化version=0
|
|
|
↓
|
|
|
号源生成完成
|
|
|
```
|
|
|
|
|
|
### 4.4 核心表设计思路
|
|
|
|
|
|
#### 4.4.1 号源管理表设计
|
|
|
```
|
|
|
预约计划模板 (s_source_roster)
|
|
|
↑ 模板配置
|
|
|
↓
|
|
|
模板渠道数量 (s_source_roster_count)
|
|
|
↑ 各渠道号源配置
|
|
|
↓
|
|
|
预约计划明细 (s_source_roster_detail)
|
|
|
↑ 每日具体号源
|
|
|
↓
|
|
|
明细渠道数量 (s_source_roster_detail_count)
|
|
|
↑ 各渠道实际数量 + 乐观锁version
|
|
|
↓
|
|
|
预约记录 (s_list)
|
|
|
↑ 占用号源
|
|
|
```
|
|
|
|
|
|
#### 4.4.2 预约主表设计
|
|
|
```
|
|
|
s_list表 (预约主表)
|
|
|
├─ 患者信息字段
|
|
|
│ - user_name, user_sex, user_age, user_brithday
|
|
|
│ - user_phone, idCardNumber
|
|
|
│ - hospital_number (住院号), prescription_id (患者ID)
|
|
|
│
|
|
|
├─ 医嘱信息字段
|
|
|
│ - entrust (医嘱名称), entrust_code (医嘱代码)
|
|
|
│ - entrust_id (HIS医嘱ID, 唯一标识)
|
|
|
│ - entrust_date, entrust_time (医嘱时间)
|
|
|
│ - app_num (申请单号)
|
|
|
│
|
|
|
├─ 科室信息字段
|
|
|
│ - reservation_department (申请科室)
|
|
|
│ - RISRAcceptDeptCode (执行科室代码)
|
|
|
│ - department_id (预约科室ID)
|
|
|
│
|
|
|
├─ 预约信息字段
|
|
|
│ - reservation_date (预约日期)
|
|
|
│ - reservation_time (时间段ID)
|
|
|
│ - reservation_sources (预约资源ID)
|
|
|
│ - roster_id (计划明细ID)
|
|
|
│ - services_group (服务组)
|
|
|
│ - appointment_type_id (占用号源的渠道)
|
|
|
│ - qudao_appointment_type_id (预约来源渠道)
|
|
|
│
|
|
|
├─ 住院信息字段
|
|
|
│ - warddesc (病区), wardcode (病区编号)
|
|
|
│ - bedname, bedno (床号)
|
|
|
│
|
|
|
├─ 状态字段
|
|
|
│ - list_status (0申请/1预约/2登记/3结束)
|
|
|
│ - is_pay (是否缴费)
|
|
|
│ - is_del (删除标记)
|
|
|
│ - is_nullify (作废标记)
|
|
|
│ - his_is_emergency (HIS加急标记)
|
|
|
│ - is_emergency (加急预约)
|
|
|
│
|
|
|
├─ 时间字段
|
|
|
│ - canel_time (取消预约时间)
|
|
|
│ - reg_date, reg_time (登记时间)
|
|
|
│ - addtime (预约时间)
|
|
|
│
|
|
|
└─ 其他字段
|
|
|
- reg_num (登记号)
|
|
|
- check_num (检查号)
|
|
|
- medicalHistory (病史)
|
|
|
- diagnosisName (诊断)
|
|
|
- check_aply_pdf (申请单PDF地址)
|
|
|
```
|
|
|
|
|
|
---
|
|
|
|
|
|
## 5. 详细设计(实现细节)
|
|
|
|
|
|
### 5.1 全部接口清单
|
|
|
|
|
|
系统共提供 **91个接口**,分为以下几大类:
|
|
|
- 系统管理接口(15个)
|
|
|
- 基础数据管理接口(20个)
|
|
|
- 预约计划管理接口(15个)
|
|
|
- 预约业务处理接口(20个)
|
|
|
- HIS集成接口(6个)
|
|
|
- H5移动端接口(5个)
|
|
|
- 第三方对接接口(10个)
|
|
|
|
|
|
---
|
|
|
|
|
|
#### 5.1.1 系统管理接口(15个)
|
|
|
|
|
|
##### 1. 用户登录
|
|
|
- **URL**: `POST /api/admin/login`
|
|
|
- **权限**: 无需认证
|
|
|
- **入参**:
|
|
|
```json
|
|
|
{
|
|
|
"username": "用户名",
|
|
|
"pwd": "密码"
|
|
|
}
|
|
|
```
|
|
|
- **出参**:
|
|
|
```json
|
|
|
{
|
|
|
"status": true,
|
|
|
"msg": "登录成功",
|
|
|
"data": {
|
|
|
"token": "access_token",
|
|
|
"refresh_token": "refresh_token",
|
|
|
"userinfo": {
|
|
|
"id": 1,
|
|
|
"cn_name": "姓名",
|
|
|
"username": "用户名",
|
|
|
"group": 1,
|
|
|
"department_id": 1
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
```
|
|
|
|
|
|
##### 2. 刷新Token
|
|
|
- **URL**: `POST /api/tokenRefresh`
|
|
|
- **权限**: 无需认证
|
|
|
- **入参**:
|
|
|
```json
|
|
|
{
|
|
|
"refresh_token": "refresh_token"
|
|
|
}
|
|
|
```
|
|
|
- **出参**: 返回新的access_token和refresh_token
|
|
|
|
|
|
##### 3. 获取服务器时间
|
|
|
- **URL**: `POST /api/GetServiceDateTime`
|
|
|
- **权限**: 无需认证
|
|
|
- **入参**: 无
|
|
|
- **出参**: 返回当前服务器时间
|
|
|
|
|
|
##### 4. 获取用户菜单列表
|
|
|
- **URL**: `POST /api/v1/admin/getBaseMenuList`
|
|
|
- **权限**: 需要Token
|
|
|
- **入参**: 无
|
|
|
- **出参**: 返回当前用户权限范围内的菜单树
|
|
|
|
|
|
##### 5. 获取用户基本信息
|
|
|
- **URL**: `POST /api/v1/admin/GetBaseUserInfo`
|
|
|
- **权限**: 需要Token
|
|
|
- **入参**: 无
|
|
|
- **出参**: 返回用户详细信息
|
|
|
|
|
|
##### 6. 获取菜单列表
|
|
|
- **URL**: `POST /api/v1/admin/getMenuList`
|
|
|
- **权限**: 需要Token
|
|
|
- **入参**: 无
|
|
|
- **出参**: 返回所有菜单列表(树形结构)
|
|
|
|
|
|
##### 7. 获取一级菜单
|
|
|
- **URL**: `POST /api/v1/admin/GetFatherMenuList`
|
|
|
- **权限**: 需要Token
|
|
|
- **入参**: 无
|
|
|
- **出参**: 返回一级菜单列表
|
|
|
|
|
|
##### 8. 添加菜单
|
|
|
- **URL**: `POST /api/v1/admin/AddMenu`
|
|
|
- **权限**: 需要Token
|
|
|
- **入参**:
|
|
|
```json
|
|
|
{
|
|
|
"pid": 0,
|
|
|
"name": "菜单名称",
|
|
|
"url": "/path",
|
|
|
"order": 1,
|
|
|
"icon": "icon-name"
|
|
|
}
|
|
|
```
|
|
|
- **出参**: 返回添加结果
|
|
|
|
|
|
##### 9. 修改菜单
|
|
|
- **URL**: `POST /api/v1/admin/EditMenu`
|
|
|
- **权限**: 需要Token
|
|
|
- **入参**: 菜单完整信息(含id)
|
|
|
- **出参**: 返回修改结果
|
|
|
|
|
|
##### 10. 获取用户列表
|
|
|
- **URL**: `POST /api/v1/admin/getUserList`
|
|
|
- **权限**: 需要Token
|
|
|
- **入参**:
|
|
|
```json
|
|
|
{
|
|
|
"page": 1,
|
|
|
"pageSize": 20,
|
|
|
"searchInfo": {}
|
|
|
}
|
|
|
```
|
|
|
- **出参**: 返回用户列表和总数
|
|
|
|
|
|
##### 11. 获取用户详情
|
|
|
- **URL**: `POST /api/v1/admin/GetSystemUserDetail`
|
|
|
- **权限**: 需要Token
|
|
|
- **入参**: `{ "id": 1 }`
|
|
|
- **出参**: 返回用户详细信息
|
|
|
|
|
|
##### 12. 保存用户信息
|
|
|
- **URL**: `POST /api/v1/admin/SaveSystemUserInfo`
|
|
|
- **权限**: 需要Token
|
|
|
- **入参**: 用户完整信息(新增/编辑)
|
|
|
- **出参**: 返回保存结果
|
|
|
|
|
|
##### 13. 重置用户密码
|
|
|
- **URL**: `POST /api/v1/admin/resetPwd`
|
|
|
- **权限**: 需要Token
|
|
|
- **入参**: `{ "id": 1 }`
|
|
|
- **出参**: 返回重置后的默认密码
|
|
|
|
|
|
##### 14. 修改密码
|
|
|
- **URL**: `POST /api/v1/admin/adminChangePwd`
|
|
|
- **权限**: 需要Token
|
|
|
- **入参**:
|
|
|
```json
|
|
|
{
|
|
|
"old_pwd": "旧密码",
|
|
|
"new_pwd": "新密码"
|
|
|
}
|
|
|
```
|
|
|
- **出参**: 返回修改结果
|
|
|
|
|
|
##### 15. 修改个人信息
|
|
|
- **URL**: `POST /api/v1/admin/ChangInfo`
|
|
|
- **权限**: 需要Token
|
|
|
- **入参**: 可修改的个人信息字段
|
|
|
- **出参**: 返回修改结果
|
|
|
|
|
|
##### 16. 获取分组列表
|
|
|
- **URL**: `POST /api/v1/admin/getGroupList`
|
|
|
- **权限**: 需要Token
|
|
|
- **入参**: 无
|
|
|
- **出参**: 返回用户分组列表
|
|
|
|
|
|
##### 17. 保存分组
|
|
|
- **URL**: `POST /api/v1/admin/SaveGroup`
|
|
|
- **权限**: 需要Token
|
|
|
- **入参**: 分组信息(新增/编辑)
|
|
|
- **出参**: 返回保存结果
|
|
|
|
|
|
##### 18. 获取分组菜单列表
|
|
|
- **URL**: `POST /api/v1/admin/GetGroupMenuList`
|
|
|
- **权限**: 需要Token
|
|
|
- **入参**: `{ "group_id": 1 }`
|
|
|
- **出参**: 返回该分组关联的菜单ID列表
|
|
|
|
|
|
##### 19. 修改分组菜单
|
|
|
- **URL**: `POST /api/v1/admin/GroupChangeMenu`
|
|
|
- **权限**: 需要Token
|
|
|
- **入参**:
|
|
|
```json
|
|
|
{
|
|
|
"group_id": 1,
|
|
|
"menu_ids": [1, 2, 3]
|
|
|
}
|
|
|
```
|
|
|
- **出参**: 返回修改结果
|
|
|
|
|
|
##### 20. 检查菜单权限
|
|
|
- **URL**: `POST /api/v1/admin/CheckMenuAuth`
|
|
|
- **权限**: 需要Token
|
|
|
- **入参**: `{ "menu_id": 1 }`
|
|
|
- **出参**: 返回是否有权限
|
|
|
|
|
|
##### 21. 获取配置信息
|
|
|
- **URL**: `POST /api/v1/admin/GetConfigInfo`
|
|
|
- **权限**: 需要Token
|
|
|
- **入参**: 无
|
|
|
- **出参**: 返回系统配置参数
|
|
|
|
|
|
##### 22. 保存配置信息
|
|
|
- **URL**: `POST /api/v1/admin/SaveConfigInfo`
|
|
|
- **权限**: 需要Token
|
|
|
- **入参**: 配置参数键值对
|
|
|
- **出参**: 返回保存结果
|
|
|
|
|
|
##### 23. 上传文件
|
|
|
- **URL**: `POST /api/UpFile`
|
|
|
- **权限**: 需要Token
|
|
|
- **入参**: multipart/form-data文件
|
|
|
- **出参**: 返回文件URL
|
|
|
|
|
|
##### 24. 切换默认科室
|
|
|
- **URL**: `POST /api/v1/admin/ChangeDefaultDept`
|
|
|
- **权限**: 需要Token
|
|
|
- **入参**: `{ "department_id": 1 }`
|
|
|
- **出参**: 返回切换结果
|
|
|
|
|
|
---
|
|
|
|
|
|
#### 5.1.2 基础数据管理接口(20个)
|
|
|
|
|
|
##### 1. 获取科室列表
|
|
|
- **URL**: `POST /api/v1/admin/GetDepartmentList`
|
|
|
- **权限**: 需要Token
|
|
|
- **入参**:
|
|
|
```json
|
|
|
{
|
|
|
"page": 1,
|
|
|
"pageSize": 20,
|
|
|
"searchInfo": {}
|
|
|
}
|
|
|
```
|
|
|
- **出参**: 返回科室列表
|
|
|
|
|
|
##### 2. 获取启用的科室列表
|
|
|
- **URL**: `POST /api/v1/admin/GetEnableDepartmentList`
|
|
|
- **权限**: 需要Token
|
|
|
- **入参**: 无
|
|
|
- **出参**: 返回启用状态的科室列表
|
|
|
|
|
|
##### 3. 保存科室信息
|
|
|
- **URL**: `POST /api/v1/admin/SaveDepartment`
|
|
|
- **权限**: 需要Token
|
|
|
- **入参**: 科室完整信息
|
|
|
- **出参**: 返回保存结果
|
|
|
|
|
|
##### 4. 删除科室
|
|
|
- **URL**: `POST /api/v1/admin/DelDepartment`
|
|
|
- **权限**: 需要Token
|
|
|
- **入参**: `{ "ids": [1, 2, 3] }`
|
|
|
- **出参**: 返回删除结果
|
|
|
|
|
|
##### 5. 获取科室资源列表
|
|
|
- **URL**: `POST /api/v1/admin/DepartmentResourceGetList`
|
|
|
- **权限**: 需要Token
|
|
|
- **入参**:
|
|
|
```json
|
|
|
{
|
|
|
"page": 1,
|
|
|
"pageSize": 20,
|
|
|
"searchInfo": { "department_id": 1 }
|
|
|
}
|
|
|
```
|
|
|
- **出参**: 返回科室资源列表
|
|
|
|
|
|
##### 6. 获取可用科室资源
|
|
|
- **URL**: `POST /api/v1/admin/DepartmentResourceGetEnableList`
|
|
|
- **权限**: 需要Token
|
|
|
- **入参**: `{ "department_id": 1 }`
|
|
|
- **出参**: 返回可用资源列表
|
|
|
|
|
|
##### 7. 保存科室资源
|
|
|
- **URL**: `POST /api/v1/admin/SaveDepartmentResource`
|
|
|
- **权限**: 需要Token
|
|
|
- **入参**: 资源完整信息
|
|
|
- **出参**: 返回保存结果
|
|
|
|
|
|
##### 8. 删除科室资源
|
|
|
- **URL**: `POST /api/v1/admin/DepartmentResourceDel`
|
|
|
- **权限**: 需要Token
|
|
|
- **入参**: `{ "ids": [1, 2, 3] }`
|
|
|
- **出参**: 返回删除结果
|
|
|
|
|
|
##### 9. 绑定科室资源与设备
|
|
|
- **URL**: `POST /api/v1/admin/DepartmentResourceBindDevice`
|
|
|
- **权限**: 需要Token
|
|
|
- **入参**:
|
|
|
```json
|
|
|
{
|
|
|
"resource_id": 1,
|
|
|
"device_ids": [1, 2, 3]
|
|
|
}
|
|
|
```
|
|
|
- **出参**: 返回绑定结果
|
|
|
|
|
|
##### 10. 获取资源已绑定设备
|
|
|
- **URL**: `POST /api/v1/admin/ResourceGetBindDeviceList`
|
|
|
- **权限**: 需要Token
|
|
|
- **入参**: `{ "resource_id": 1 }`
|
|
|
- **出参**: 返回已绑定的设备列表
|
|
|
|
|
|
##### 11. 获取设备列表
|
|
|
- **URL**: `POST /api/v1/admin/GetDeviceList`
|
|
|
- **权限**: 需要Token
|
|
|
- **入参**:
|
|
|
```json
|
|
|
{
|
|
|
"page": 1,
|
|
|
"pageSize": 20,
|
|
|
"searchInfo": {}
|
|
|
}
|
|
|
```
|
|
|
- **出参**: 返回设备列表
|
|
|
|
|
|
##### 12. 获取可用设备列表
|
|
|
- **URL**: `POST /api/v1/admin/GetEnableDeviceList`
|
|
|
- **权限**: 需要Token
|
|
|
- **入参**: 无
|
|
|
- **出参**: 返回启用状态的设备列表
|
|
|
|
|
|
##### 13. 保存设备
|
|
|
- **URL**: `POST /api/v1/admin/SaveDeviceList`
|
|
|
- **权限**: 需要Token
|
|
|
- **入参**: 设备完整信息
|
|
|
- **出参**: 返回保存结果
|
|
|
|
|
|
##### 14. 删除设备
|
|
|
- **URL**: `POST /api/v1/admin/DelDevice`
|
|
|
- **权限**: 需要Token
|
|
|
- **入参**: `{ "ids": [1, 2, 3] }`
|
|
|
- **出参**: 返回删除结果
|
|
|
|
|
|
##### 15. 获取检查项目分类列表
|
|
|
- **URL**: `POST /api/v1/admin/GetCheckItemClassList`
|
|
|
- **权限**: 需要Token
|
|
|
- **入参**: 无
|
|
|
- **出参**: 返回检查项目分类列表
|
|
|
|
|
|
##### 16. 获取检查项目列表
|
|
|
- **URL**: `POST /api/v1/admin/GetCheckItemList`
|
|
|
- **权限**: 需要Token
|
|
|
- **入参**:
|
|
|
```json
|
|
|
{
|
|
|
"page": 1,
|
|
|
"pageSize": 20,
|
|
|
"searchInfo": {}
|
|
|
}
|
|
|
```
|
|
|
- **出参**: 返回检查项目列表
|
|
|
|
|
|
##### 17. 保存检查项目
|
|
|
- **URL**: `POST /api/v1/admin/SaveItemInfo`
|
|
|
- **权限**: 需要Token
|
|
|
- **入参**: 检查项目完整信息
|
|
|
- **出参**: 返回保存结果
|
|
|
|
|
|
##### 18. 检查项目绑定设备
|
|
|
- **URL**: `POST /api/v1/admin/ItemBindDevice`
|
|
|
- **权限**: 需要Token
|
|
|
- **入参**:
|
|
|
```json
|
|
|
{
|
|
|
"item_id": 1,
|
|
|
"device_ids": [1, 2, 3]
|
|
|
}
|
|
|
```
|
|
|
- **出参**: 返回绑定结果
|
|
|
|
|
|
##### 19. 设置项目互斥
|
|
|
- **URL**: `POST /api/v1/admin/SetHuChi`
|
|
|
- **权限**: 需要Token
|
|
|
- **入参**:
|
|
|
```json
|
|
|
{
|
|
|
"code1": "检查项目代码1",
|
|
|
"code2": "检查项目代码2",
|
|
|
"time": 24
|
|
|
}
|
|
|
```
|
|
|
- **出参**: 返回设置结果
|
|
|
|
|
|
##### 20. 删除项目互斥
|
|
|
- **URL**: `POST /api/v1/admin/DelHuChi`
|
|
|
- **权限**: 需要Token
|
|
|
- **入参**: `{ "id": 1 }`
|
|
|
- **出参**: 返回删除结果
|
|
|
|
|
|
##### 21. 获取项目互斥列表
|
|
|
- **URL**: `POST /api/v1/admin/GetHuChiList`
|
|
|
- **权限**: 需要Token
|
|
|
- **入参**: `{ "item_code": "项目代码" }`
|
|
|
- **出参**: 返回该项目已设置的互斥列表
|
|
|
|
|
|
##### 22. 获取时间段列表
|
|
|
- **URL**: `POST /api/v1/admin/TimePeriodGetList`
|
|
|
- **权限**: 需要Token
|
|
|
- **入参**:
|
|
|
```json
|
|
|
{
|
|
|
"page": 1,
|
|
|
"pageSize": 20,
|
|
|
"searchInfo": { "department_id": 1 }
|
|
|
}
|
|
|
```
|
|
|
- **出参**: 返回时间段列表
|
|
|
|
|
|
##### 23. 获取启用的时间段列表
|
|
|
- **URL**: `POST /api/v1/admin/TimePeriodGetEnableList`
|
|
|
- **权限**: 需要Token
|
|
|
- **入参**: `{ "department_id": 1 }`
|
|
|
- **出参**: 返回启用的时间段列表
|
|
|
|
|
|
##### 24. 获取时间段详情
|
|
|
- **URL**: `POST /api/v1/admin/TimePeriodGetDetail`
|
|
|
- **权限**: 需要Token
|
|
|
- **入参**: `{ "id": 1 }`
|
|
|
- **出参**: 返回时间段详细信息
|
|
|
|
|
|
##### 25. 保存时间段
|
|
|
- **URL**: `POST /api/v1/admin/TimePeriodSave`
|
|
|
- **权限**: 需要Token
|
|
|
- **入参**: 时间段完整信息
|
|
|
- **出参**: 返回保存结果
|
|
|
|
|
|
##### 26. 删除时间段
|
|
|
- **URL**: `POST /api/v1/admin/TimePeriodDel`
|
|
|
- **权限**: 需要Token
|
|
|
- **入参**: `{ "ids": [1, 2, 3] }`
|
|
|
- **出参**: 返回删除结果
|
|
|
|
|
|
##### 27. 获取病区列表
|
|
|
- **URL**: `POST /api/v1/admin/InpatientWardGetList`
|
|
|
- **权限**: 需要Token
|
|
|
- **入参**: 无
|
|
|
- **出参**: 返回病区列表
|
|
|
|
|
|
##### 28. 保存病区
|
|
|
- **URL**: `POST /api/v1/admin/InpatientWardSave`
|
|
|
- **权限**: 需要Token
|
|
|
- **入参**: 病区信息
|
|
|
- **出参**: 返回保存结果
|
|
|
|
|
|
##### 29. 删除病区
|
|
|
- **URL**: `POST /api/v1/admin/InpatientWardDel`
|
|
|
- **权限**: 需要Token
|
|
|
- **入参**: `{ "ids": [1, 2, 3] }`
|
|
|
- **出参**: 返回删除结果
|
|
|
|
|
|
##### 30. 获取预约类型列表
|
|
|
- **URL**: `POST /api/v1/admin/GetYuYueTypes`
|
|
|
- **权限**: 需要Token
|
|
|
- **入参**: 无
|
|
|
- **出参**: 返回预约类型列表
|
|
|
|
|
|
---
|
|
|
|
|
|
#### 5.1.3 预约计划管理接口(15个)
|
|
|
|
|
|
##### 1. 获取预约计划模板列表
|
|
|
- **URL**: `POST /api/v1/admin/PlanModelGetList`
|
|
|
- **入参**:
|
|
|
```json
|
|
|
{
|
|
|
"searchInfo": {
|
|
|
"date_type": 1, // 1工作日/2节假日
|
|
|
"type": 0, // 0默认/1夏令时/2冬令时
|
|
|
"resources_id": 1 // 资源ID
|
|
|
}
|
|
|
}
|
|
|
```
|
|
|
- **出参**: 返回模板列表,含各渠道号源配置
|
|
|
- **逻辑**:
|
|
|
1. 查询s_source_roster表
|
|
|
2. 关联s_source_roster_count表获取渠道数量
|
|
|
3. 按科室、资源、时间段分组展示
|
|
|
|
|
|
#### 5.1.3 生成预约计划明细
|
|
|
- **URL**: `POST /api/v1/admin/CreatePlanList`
|
|
|
- **入参**:
|
|
|
```json
|
|
|
{
|
|
|
"dateRange": ["2024-01-01", "2024-12-31"],
|
|
|
"ids": [1, 2, 3], // 模板ID数组
|
|
|
"date_type": 1, // 1工作日/2节假日
|
|
|
"HolidayEnable": true // 是否生成节假日
|
|
|
}
|
|
|
```
|
|
|
- **出参**:
|
|
|
```json
|
|
|
{
|
|
|
"status": true,
|
|
|
"msg": "执行完成,共计生成计划 X 条",
|
|
|
"data": {
|
|
|
"count": 365
|
|
|
}
|
|
|
}
|
|
|
```
|
|
|
- **逻辑**:
|
|
|
1. 调用RosterService.generatePlans服务
|
|
|
2. 根据模板和日期范围生成明细
|
|
|
3. 写入s_source_roster_detail表
|
|
|
4. 写入s_source_roster_detail_count表
|
|
|
5. 初始化version=0
|
|
|
|
|
|
#### 5.1.4 获取医嘱列表
|
|
|
- **URL**: `POST /api/v1/admin/GetMainList`
|
|
|
- **入参**:
|
|
|
```json
|
|
|
{
|
|
|
"searchInfo": {
|
|
|
"dateRange": ["2024-01-01", "2024-12-31"],
|
|
|
"list_status": 0, // 状态筛选
|
|
|
"patient_type": 0, // 患者类型
|
|
|
"reg_num": "", // 登记号
|
|
|
"user_name": "", // 患者姓名
|
|
|
"resources": [], // 资源ID数组
|
|
|
"services_group": 1 // 服务组
|
|
|
},
|
|
|
"page": 1,
|
|
|
"pageSize": 20
|
|
|
}
|
|
|
```
|
|
|
- **出参**: 返回医嘱列表,含患者信息、预约信息、状态等
|
|
|
- **逻辑**:
|
|
|
1. 根据用户分组过滤数据(科室管理员/护士/医生)
|
|
|
2. 查询s_list表
|
|
|
3. 关联s_period、s_department_resources表
|
|
|
4. 计算患者年龄、匹配设备信息
|
|
|
5. 分页返回
|
|
|
|
|
|
#### 5.1.5 获取可预约时段
|
|
|
- **URL**: `POST /api/v1/admin/GetEnablePlan`
|
|
|
- **入参**:
|
|
|
```json
|
|
|
{
|
|
|
"regnum": "登记号",
|
|
|
"entrustid": "医嘱ID",
|
|
|
"episodeid": "就诊ID",
|
|
|
"appointment_type": 4 // 预约渠道类型
|
|
|
}
|
|
|
```
|
|
|
- **出参**: 返回可用时段列表,含号源剩余数量
|
|
|
- **逻辑**:
|
|
|
1. 查询医嘱对应的检查项目
|
|
|
2. 查找项目关联的科室、资源、设备
|
|
|
3. 查询可用号源 (s_source_roster_detail)
|
|
|
4. 检查号源数量 (used_count < count)
|
|
|
5. 检查项目互斥关系
|
|
|
6. 检查门诊缴费状态
|
|
|
7. 检查医嘱等待时间 (check_begin_time)
|
|
|
8. 返回可用时段
|
|
|
|
|
|
#### 5.1.6 执行预约
|
|
|
- **URL**: `POST /api/v1/admin/PlanYuYue`
|
|
|
- **入参**:
|
|
|
```json
|
|
|
{
|
|
|
"regnum": "登记号",
|
|
|
"entrustid": ["医嘱ID1", "医嘱ID2"],
|
|
|
"roster_detail_id": 123, // 号源明细ID
|
|
|
"appointment_type": 4, // 预约渠道
|
|
|
"do_user": 1, // 操作人ID
|
|
|
"do_type": 1 // 1预约/2改约
|
|
|
}
|
|
|
```
|
|
|
- **出参**: 预约成功/失败信息
|
|
|
- **逻辑**:
|
|
|
1. 检查医嘱状态(必须是状态0或可改约状态1)
|
|
|
2. 使用乐观锁更新号源数量:
|
|
|
- 查询当前version
|
|
|
- UPDATE时WHERE version=当前值
|
|
|
- 递增used_count和version
|
|
|
- 如果UPDATE失败(version已变),重试或返回失败
|
|
|
3. 更新s_list表:
|
|
|
- list_status = 1
|
|
|
- 预约时间、资源、服务组等
|
|
|
4. 记录s_list_log日志
|
|
|
5. 向PACS推送申请单
|
|
|
6. 返回预约结果
|
|
|
|
|
|
#### 5.1.7 取消预约
|
|
|
- **URL**: `POST /api/v1/admin/CancelYuYue`
|
|
|
- **入参**:
|
|
|
```json
|
|
|
{
|
|
|
"ids": [1, 2, 3], // 医嘱记录ID数组
|
|
|
"cancel_type": "系统取消" // 取消类型
|
|
|
}
|
|
|
```
|
|
|
- **出参**: 取消成功/失败信息
|
|
|
- **逻辑**:
|
|
|
1. 检查医嘱状态(必须是已预约状态1)
|
|
|
2. 释放号源:
|
|
|
- 递减used_count
|
|
|
- 不递增version(释放不需要锁)
|
|
|
3. 更新s_list表:
|
|
|
- list_status恢复原状态或保持0
|
|
|
- 记录canel_time
|
|
|
- 记录cancel_type
|
|
|
4. 记录s_list_log日志
|
|
|
5. 向PACS推送取消申请单
|
|
|
6. 返回取消结果
|
|
|
|
|
|
#### 5.1.8 报到接口
|
|
|
- **URL**: `POST /api/v1/admin/SignIn`
|
|
|
- **入参**:
|
|
|
```json
|
|
|
{
|
|
|
"id": 1 // 医嘱记录ID
|
|
|
}
|
|
|
```
|
|
|
- **出参**: 报到成功/失败信息
|
|
|
- **逻辑**:
|
|
|
1. 检查医嘱状态(必须是已预约状态1)
|
|
|
2. 检查预约日期是否为当天或已过期
|
|
|
3. 更新s_list表:
|
|
|
- list_status = 2
|
|
|
- 记录reg_date, reg_time
|
|
|
4. 记录s_list_log日志
|
|
|
5. 返回报到结果
|
|
|
|
|
|
#### 5.1.9 HIS医嘱推送接口
|
|
|
- **URL**: `POST /api/v1/T/CreateRecordXml`
|
|
|
- **入参**: XML格式的医嘱信息(HL7标准)
|
|
|
- **出参**: 接收确认消息
|
|
|
- **逻辑**:
|
|
|
1. 解析XML消息
|
|
|
2. 提取医嘱信息
|
|
|
3. 检查entrust_id是否已存在(防止重复)
|
|
|
4. 写入s_list表(list_status=0)
|
|
|
5. 返回确认消息
|
|
|
|
|
|
#### 5.1.10 PACS报到通知接口
|
|
|
- **URL**: `POST /api/PacsSignIn`
|
|
|
- **入参**:
|
|
|
```json
|
|
|
{
|
|
|
"reg_num": "登记号",
|
|
|
"entrust_id": "医嘱ID"
|
|
|
}
|
|
|
```
|
|
|
- **出参**: 报到确认
|
|
|
- **逻辑**:
|
|
|
1. 查询医嘱记录
|
|
|
2. 更新list_status=2
|
|
|
3. 记录报到时间
|
|
|
4. 记录日志
|
|
|
|
|
|
### 5.2 数据库表详细设计
|
|
|
|
|
|
#### 5.2.1 预约主表 (s_list)
|
|
|
```sql
|
|
|
CREATE TABLE `s_list` (
|
|
|
`id` bigint(10) UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
|
`list_status` int(11) DEFAULT NULL COMMENT '0申请中/1预约/2登记/3结束',
|
|
|
`reg_num` varchar(255) COMMENT '登记号',
|
|
|
`user_name` varchar(255) COMMENT '患者姓名',
|
|
|
`user_sex` varchar(255) COMMENT '患者性别',
|
|
|
`user_age` varchar(255) COMMENT '患者年龄',
|
|
|
`user_brithday` varchar(255) COMMENT '生日',
|
|
|
`user_phone` varchar(255) COMMENT '电话',
|
|
|
`idCardNumber` varchar(100) COMMENT '身份证号',
|
|
|
|
|
|
`entrust` varchar(255) COMMENT '医嘱名称',
|
|
|
`entrust_code` varchar(100) COMMENT '医嘱代码',
|
|
|
`entrust_id` varchar(255) COMMENT 'HIS医嘱ID(唯一)',
|
|
|
`entrust_date` varchar(255) COMMENT '医嘱日期',
|
|
|
`entrust_time` varchar(255) COMMENT '医嘱时间',
|
|
|
`app_num` varchar(255) COMMENT '申请单号',
|
|
|
|
|
|
`reservation_department` varchar(255) COMMENT '申请科室',
|
|
|
`reservation_department_code` varchar(255) COMMENT '申请科室代码',
|
|
|
`RISRAcceptDeptCode` varchar(255) COMMENT '执行科室代码',
|
|
|
`department_id` int(11) COMMENT '预约科室ID',
|
|
|
|
|
|
`reservation_date` date COMMENT '预约日期',
|
|
|
`reservation_time` varchar(255) COMMENT '预约时间段ID',
|
|
|
`reservation_sources` varchar(255) COMMENT '预约资源ID',
|
|
|
`roster_id` int(11) COMMENT '预约计划明细ID',
|
|
|
`services_group` varchar(100) COMMENT '服务组',
|
|
|
`appointment_type_id` int(11) COMMENT '占用号源的渠道ID',
|
|
|
`qudao_appointment_type_id` int(11) COMMENT '预约来源渠道ID',
|
|
|
|
|
|
`patient_type` varchar(11) COMMENT '0住院/1门诊/2急诊/3体检',
|
|
|
`is_pay` varchar(255) COMMENT '是否缴费 1是/0否',
|
|
|
`his_is_emergency` tinyint(4) DEFAULT 0 COMMENT 'HIS加急标记',
|
|
|
`is_emergency` tinyint(4) DEFAULT 0 COMMENT '加急预约',
|
|
|
|
|
|
`warddesc` varchar(255) COMMENT '病区',
|
|
|
`wardcode` varchar(50) COMMENT '病区编号',
|
|
|
`bedname` varchar(255) COMMENT '床号名称',
|
|
|
`bedno` varchar(50) COMMENT '床号',
|
|
|
`hospital_number` varchar(255) COMMENT '住院号',
|
|
|
|
|
|
`reg_date` date COMMENT '登记日期',
|
|
|
`reg_time` time COMMENT '登记时间',
|
|
|
`canel_time` datetime COMMENT '取消预约时间',
|
|
|
`canel_type` varchar(255) COMMENT '取消类型',
|
|
|
`addtime` datetime COMMENT '预约时间',
|
|
|
|
|
|
`check_num` varchar(255) COMMENT '检查号',
|
|
|
`RISRExamID` varchar(255) COMMENT '检查号',
|
|
|
`medicalHistory` varchar(1000) COMMENT '病史摘要',
|
|
|
`diagnosisName` varchar(255) COMMENT '临床诊断',
|
|
|
`check_aply_pdf` varchar(1000) COMMENT '申请单PDF地址',
|
|
|
|
|
|
`is_del` int(4) DEFAULT 0 COMMENT '是否删除',
|
|
|
`is_nullify` int(4) DEFAULT 0 COMMENT '是否作废',
|
|
|
`entrust_status` varchar(2) COMMENT '医嘱状态',
|
|
|
`flag_tag` varchar(255) COMMENT 'HIS同步标记',
|
|
|
`flag_str` varchar(2550) COMMENT '取消原因',
|
|
|
|
|
|
`created_at` timestamp DEFAULT CURRENT_TIMESTAMP,
|
|
|
`updated_at` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
|
|
|
|
|
|
PRIMARY KEY (`id`),
|
|
|
INDEX `list_status` (`list_status`),
|
|
|
INDEX `reg_num` (`reg_num`),
|
|
|
INDEX `entrust_id` (`entrust_id`),
|
|
|
INDEX `reservation_date` (`reservation_date`)
|
|
|
) ENGINE=InnoDB;
|
|
|
```
|
|
|
|
|
|
#### 5.2.2 预约计划明细渠道数量表 (s_source_roster_detail_count)
|
|
|
```sql
|
|
|
CREATE TABLE `s_source_roster_detail_count` (
|
|
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
|
|
`roster_detail_id` int(10) COMMENT '计划明细ID',
|
|
|
`appointment_type_id` int(10) COMMENT '预约渠道ID',
|
|
|
`count` int(10) DEFAULT 0 COMMENT '可预约数量',
|
|
|
`used_count` int(10) DEFAULT 0 COMMENT '已预约数量',
|
|
|
`locked_count` int(10) DEFAULT 0 COMMENT '占位数量',
|
|
|
`max_total` int(10) DEFAULT 0 COMMENT '单日最大总量',
|
|
|
`version` int(11) DEFAULT 0 COMMENT '乐观锁版本号',
|
|
|
`created_at` timestamp DEFAULT CURRENT_TIMESTAMP,
|
|
|
`updated_at` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
|
|
|
PRIMARY KEY (`id`)
|
|
|
) ENGINE=InnoDB COMMENT='号源数量表(含乐观锁)';
|
|
|
```
|
|
|
|
|
|
#### 5.2.3 检查项目表 (s_check_item)
|
|
|
```sql
|
|
|
CREATE TABLE `s_check_item` (
|
|
|
`id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
|
`item_code` varchar(255) COMMENT '检查项目代码',
|
|
|
`item_class_id` int(11) COMMENT '项目分类ID',
|
|
|
`sheetType` varchar(20) COMMENT 'HIS sheetType',
|
|
|
`item_name` varchar(255) COMMENT '检查项目名称',
|
|
|
`item_desc` varchar(255) COMMENT '描述',
|
|
|
`reservation_method` varchar(100) COMMENT '支持的预约渠道',
|
|
|
`limosis` int(11) COMMENT '是否空腹 1是/0否',
|
|
|
`check_notice` varchar(8000) COMMENT '检查须知',
|
|
|
`check_time` int(11) COMMENT '检查时长(分钟)',
|
|
|
`check_begin_time` int(11) COMMENT '医嘱后等待时间(分钟)',
|
|
|
`use_seats` int(10) DEFAULT 1 COMMENT '占位数量',
|
|
|
`services_group` int(255) COMMENT '关联服务组',
|
|
|
`status` int(4) DEFAULT 1 COMMENT '1启用/0停用',
|
|
|
`is_del` int(11) DEFAULT 0 COMMENT '是否删除',
|
|
|
PRIMARY KEY (`id`)
|
|
|
) ENGINE=InnoDB COMMENT='检查项目表';
|
|
|
```
|
|
|
|
|
|
#### 5.2.4 检查项目互斥表 (s_huchi)
|
|
|
```sql
|
|
|
CREATE TABLE `s_huchi` (
|
|
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
|
|
`code1` varchar(100) COMMENT '检查项目代码1',
|
|
|
`code2` varchar(100) COMMENT '检查项目代码2',
|
|
|
`time` int(11) COMMENT '互斥时间(小时),0永久互斥',
|
|
|
`add_user` int(11) COMMENT '添加人',
|
|
|
`is_del` int(4) COMMENT '是否删除',
|
|
|
`created_at` timestamp DEFAULT CURRENT_TIMESTAMP,
|
|
|
`updated_at` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
|
|
|
PRIMARY KEY (`id`)
|
|
|
) ENGINE=InnoDB COMMENT='项目互斥表';
|
|
|
```
|
|
|
|
|
|
### 5.3 页面结构设计
|
|
|
|
|
|
#### 5.3.1 管理后台页面结构
|
|
|
|
|
|
**预约计划模板页面 (PlanModel.vue)**
|
|
|
```
|
|
|
页面布局:
|
|
|
┌─────────────────────────────────────────┐
|
|
|
│ 操作按钮区 │
|
|
|
│ [添加] [删除] [生成选中的计划] │
|
|
|
├─────────────────────────────────────────┤
|
|
|
│ 筛选区 │
|
|
|
│ [工作日/节假日] [夏令时/冬令时] │
|
|
|
├─────────────────────────────────────────┤
|
|
|
│ 号源模板表格 │
|
|
|
│ ┌─左侧资源列表──┬─右侧时段表格───────┐ │
|
|
|
│ │ 资源1 │ 时段1 时段2 时段3 │ │
|
|
|
│ │ 资源2 │ 周一 周二 周三... │ │
|
|
|
│ │ ... │ [号源配置格子] │ │
|
|
|
│ └─────────────┴────────────────────┘ │
|
|
|
│ │
|
|
|
│ 号源格子结构: │
|
|
|
│ ┌─────────────┐ │
|
|
|
│ │ [勾选框] │ │
|
|
|
│ │ 总:X 住院:X │ │
|
|
|
│ │ 门诊:X 急诊:X│ │
|
|
|
│ │ 体检:X │ │
|
|
|
│ │ [编辑] [占位]│ │
|
|
|
│ └─────────────┘ │
|
|
|
└─────────────────────────────────────────┘
|
|
|
|
|
|
弹窗:
|
|
|
- 添加/编辑模板弹窗
|
|
|
- 占位数量设置弹窗
|
|
|
```
|
|
|
|
|
|
**医嘱工作列表页面 (MainList.vue)**
|
|
|
```
|
|
|
页面布局:
|
|
|
┌─────────────────────────────────────────┐
|
|
|
│ 搜索区 │
|
|
|
│ [日期范围] [状态] [患者类型] [资源] │
|
|
|
│ [服务组] [登记号] [姓名] [科室] [医生] │
|
|
|
│ [查询] │
|
|
|
├─────────────────────────────────────────┤
|
|
|
│ 操作按钮区 │
|
|
|
│ [预约] [取消预约] [更改预约] │
|
|
|
│ [报到] [取消报到] [打印申请单] │
|
|
|
├─────────────────────────────────────────┤
|
|
|
│ 医嘱列表表格 │
|
|
|
│ ┌────┬────┬────┬────┬────┬────┬────┐ │
|
|
|
│ │勾选│状态│登记号│姓名│性别│年龄│医嘱│ │
|
|
|
│ ├────┼────┼────┼────┼────┼────┼────┤ │
|
|
|
│ │ □ │申请│002.. │张三│男 │45 │CT │ │
|
|
|
│ │ □ │预约│003.. │李四│女 │30 │MRI │ │
|
|
|
│ └───────────────────────────────────┘ │
|
|
|
│ │
|
|
|
│ 表格列: │
|
|
|
│ - 勾选框、状态、登记号、姓名、性别 │
|
|
|
│ - 年龄、医嘱、是否缴费、预约日期 │
|
|
|
│ - 预约时间、预约资源、服务组、申请科室 │
|
|
|
│ - 医嘱时间、申请医生、病人类型、电话 │
|
|
|
│ - 操作(查看日志) │
|
|
|
└─────────────────────────────────────────┘
|
|
|
|
|
|
弹窗:
|
|
|
- 预约弹窗(选择时段)
|
|
|
- 日志查看弹窗
|
|
|
- 申请单打印预览
|
|
|
```
|
|
|
|
|
|
#### 5.3.2 自助机页面结构
|
|
|
|
|
|
**医嘱列表页面 (CheckItemMainList.vue)**
|
|
|
```
|
|
|
页面布局(大屏触摸屏风格):
|
|
|
┌─────────────────────────────────────────┐
|
|
|
│ 患者信息区 │
|
|
|
│ 姓名:张XX 性别:女 电话:199... │
|
|
|
│ 登记号:002000022 │
|
|
|
├─────────────────────────────────────────┤
|
|
|
│ 日期选择 │
|
|
|
│ [日期范围选择器] │
|
|
|
├─────────────────────────────────────────┤
|
|
|
│ 医嘱列表(大卡片) │
|
|
|
│ ┌───────────────────────────────────┐ │
|
|
|
│ │ 检查项目:CT检查 [待预约] │ │
|
|
|
│ │ 医嘱时间:2024-01-01 申请科室:内科 │ │
|
|
|
│ │ [开始预约] │ │
|
|
|
│ └───────────────────────────────────┘ │
|
|
|
│ │
|
|
|
│ ┌───────────────────────────────────┐ │
|
|
|
│ │ 检查项目:MRI检查 [已预约] │ │
|
|
|
│ │ 预约时段:2024-01-05 08:00~09:00 │ │
|
|
|
│ │ [取消] [改约] │ │
|
|
|
│ └───────────────────────────────────┘ │
|
|
|
└─────────────────────────────────────────┘
|
|
|
```
|
|
|
|
|
|
**预约时段选择页面 (PlanList.vue)**
|
|
|
```
|
|
|
页面布局:
|
|
|
┌─────────────────────────────────────────┐
|
|
|
│ 顶部 │
|
|
|
│ [返回] 选择预约时间 │
|
|
|
├─────────────────────────────────────────┤
|
|
|
│ 日期选择 │
|
|
|
│ [2024-01-01] [2024-01-02] [2024-01-03] │
|
|
|
├─────────────────────────────────────────┤
|
|
|
│ 时段列表(大按钮) │
|
|
|
│ ┌───────┬───────┬───────┬───────┐ │
|
|
|
│ │08:00 │09:00 │10:00 │11:00 │ │
|
|
|
│ │~09:00 │~10:00 │~11:00 │~12:00 │ │
|
|
|
│ │[剩余5]│[剩余3]│[剩余0]│[剩余2]│ │
|
|
|
│ └───────┴───────┴───────┴───────┘ │
|
|
|
│ │
|
|
|
│ 点击时段显示详情: │
|
|
|
│ - 检查项目: XXX │
|
|
|
│ - 预约时段: XXX │
|
|
|
│ - 检查须知: XXX │
|
|
|
│ - [确认预约] [取消] │
|
|
|
└─────────────────────────────────────────┘
|
|
|
```
|
|
|
|
|
|
#### 5.3.3 H5移动端页面结构
|
|
|
|
|
|
**登录页面 (Login.vue)**
|
|
|
```
|
|
|
页面布局(移动端适配):
|
|
|
┌─────────────────────────────────────────┐
|
|
|
│ │
|
|
|
│ 患者登录 │
|
|
|
│ │
|
|
|
│ [请输入患者ID] │
|
|
|
│ │
|
|
|
│ [登录按钮] │
|
|
|
│ │
|
|
|
└─────────────────────────────────────────┘
|
|
|
```
|
|
|
|
|
|
**医嘱列表页面**
|
|
|
```
|
|
|
页面布局(uni-app移动端):
|
|
|
┌─────────────────────────────────────────┐
|
|
|
│ 标题: 我的检查项目 │
|
|
|
├─────────────────────────────────────────┤
|
|
|
│ 医嘱卡片列表 │
|
|
|
│ ┌───────────────────────────────────┐ │
|
|
|
│ │ 检查项目:CT检查 │ │
|
|
|
│ │ 状态:待预约 │ │
|
|
|
│ │ 申请时间:2024-01-01 │ │
|
|
|
│ │ [预约] │ │
|
|
|
│ └───────────────────────────────────┘ │
|
|
|
└─────────────────────────────────────────┘
|
|
|
```
|
|
|
|
|
|
---
|
|
|
|
|
|
## 6. 部署与运维
|
|
|
|
|
|
### 6.1 系统部署架构
|
|
|
|
|
|
```
|
|
|
生产环境部署建议:
|
|
|
┌─────────────────────────────────────────┐
|
|
|
│ Web服务器 (Nginx/Apache) │
|
|
|
│ ├─ 管理后台域名: admin.xxx.com │
|
|
|
│ ├─ 自助机域名:自助机.xxx.com │
|
|
|
│ └─ H5域名: h5.xxx.com │
|
|
|
└─────────────────────────────────────────┘
|
|
|
↓ 反向代理
|
|
|
┌─────────────────────────────────────────┐
|
|
|
│ Laravel后端服务 │
|
|
|
│ - PHP-FPM运行 │
|
|
|
│ - 端口: 9000 │
|
|
|
└─────────────────────────────────────────┘
|
|
|
↓
|
|
|
┌─────────────────────────────────────────┐
|
|
|
│ MySQL数据库 │
|
|
|
│ - 主从复制建议 │
|
|
|
│ - 定期备份 │
|
|
|
└─────────────────────────────────────────┘
|
|
|
|
|
|
┌─────────────────────────────────────────┐
|
|
|
│ Workerman WebSocket服务 │
|
|
|
│ - 端口: 2346 │
|
|
|
│ - 实时消息推送 │
|
|
|
└─────────────────────────────────────────┘
|
|
|
|
|
|
┌─────────────────────────────────────────┐
|
|
|
│ C# HIS监听服务 (Windows服务器) │
|
|
|
│ - 安装为Windows Service │
|
|
|
│ - 监听MQ消息队列 │
|
|
|
│ - 日志记录: log4net │
|
|
|
└─────────────────────────────────────────┘
|
|
|
```
|
|
|
|
|
|
### 6.2 配置管理
|
|
|
|
|
|
#### 6.2.1 Laravel配置 (.env)
|
|
|
```env
|
|
|
APP_NAME=秦皇岛中医院医技预约系统
|
|
|
APP_ENV=production
|
|
|
APP_URL=https://admin.xxx.com
|
|
|
|
|
|
DB_CONNECTION=mysql
|
|
|
DB_HOST=127.0.0.1
|
|
|
DB_PORT=3306
|
|
|
DB_DATABASE=yiji_qhdzhongyiyuan
|
|
|
DB_USERNAME=root
|
|
|
DB_PASSWORD=xxx
|
|
|
|
|
|
# HIS对接配置
|
|
|
HIS_MQ_HOST=192.168.1.100
|
|
|
HIS_MQ_PORT=1414
|
|
|
HIS_MQ_CHANNEL=CHAN1
|
|
|
HIS_MQ_QUEUE=QUEUE1
|
|
|
|
|
|
# PACS对接配置
|
|
|
PACS_API_URL=http://192.168.1.101/api
|
|
|
PACS_API_KEY=xxx
|
|
|
|
|
|
# 系统配置
|
|
|
PAY_TIMEOUT=30 # 门诊缴费超时(分钟)
|
|
|
APPOINTMENT_TIMEOUT=60 # 预约超时(分钟)
|
|
|
```
|
|
|
|
|
|
#### 6.2.2 前端配置
|
|
|
```javascript
|
|
|
// YiJi-admin/src/config.js
|
|
|
export default {
|
|
|
API_BASE_URL: 'https://admin.xxx.com/api/v1',
|
|
|
WS_URL: 'ws://192.168.1.10:2346',
|
|
|
TOKEN_KEY: 'access_token',
|
|
|
REFRESH_TOKEN_KEY: 'refresh_token'
|
|
|
}
|
|
|
```
|
|
|
|
|
|
#### 6.2.3 C#监听服务配置 (App.config)
|
|
|
```xml
|
|
|
<appSettings>
|
|
|
<add key="MQ_Host" value="192.168.1.100"/>
|
|
|
<add key="MQ_Port" value="1414"/>
|
|
|
<add key="MQ_Channel" value="CHAN1"/>
|
|
|
<add key="MQ_Queue" value="QUEUE1"/>
|
|
|
<add key="DB_ConnectionString" value="Server=localhost;Database=yiji_qhdzhongyiyuan;Uid=root;Pwd=xxx;"/>
|
|
|
</appSettings>
|
|
|
```
|
|
|
|
|
|
### 6.3 运维监控
|
|
|
|
|
|
#### 6.3.1 日志管理
|
|
|
- Laravel日志: `storage/logs/laravel.log`
|
|
|
- C#监听日志: log4net配置输出到文件
|
|
|
- API访问日志: 中间件`log`记录到数据库
|
|
|
|
|
|
#### 6.3.2 性能监控
|
|
|
- 数据库慢查询监控
|
|
|
- API响应时间监控
|
|
|
- 号源并发冲突监控(version失败率)
|
|
|
|
|
|
#### 6.3.3 异常告警
|
|
|
- HIS消息接收异常告警
|
|
|
- 号源生成失败告警
|
|
|
- 预约并发冲突告警
|
|
|
|
|
|
---
|
|
|
|
|
|
## 7. 附录
|
|
|
|
|
|
### 7.1 HIS消息类型对照表
|
|
|
|
|
|
| 消息类型 | 消息说明 | 主要字段 | 处理逻辑 |
|
|
|
|---------|---------|---------|---------|
|
|
|
| MI0150 | 医嘱信息 | 患者信息、医嘱信息、科室信息 | 新增s_list记录 |
|
|
|
| MI0164 | 医嘱状态变更 | 医嘱ID、状态 | 更新医嘱状态 |
|
|
|
| MU0165 | 医嘱更新 | 医嘱信息 | 更新s_list记录 |
|
|
|
| CI0047 | 检查信息 | 检查详情 | 更新检查信息 |
|
|
|
| CI0054 | 检查相关 | 检查状态 | 更新检查状态 |
|
|
|
| CI0055 | 检查相关 | 检查结果 | 更新检查结果 |
|
|
|
| CD0050 | 检查确认 | 确认信息 | 更新确认状态 |
|
|
|
| OI0083 | 医嘱订单 | 订单信息 | 处理订单 |
|
|
|
| OD0084 | 订单更新 | 订单状态 | 更新订单状态 |
|
|
|
| MU0151 | 其他更新 | 各类更新 | 按类型处理 |
|
|
|
|
|
|
### 7.2 预约渠道编码表
|
|
|
|
|
|
| 渠道ID | 渠道名称 | 简称 | 说明 |
|
|
|
|-------|---------|-----|------|
|
|
|
| 1 | 住院 | 住院 | 住院患者预约通道 |
|
|
|
| 2 | 门诊 | 门诊 | 门诊患者预约通道 |
|
|
|
| 3 | 急诊 | 急诊 | 急诊患者预约通道 |
|
|
|
| 4 | 体检 | 体检 | 体检患者预约通道 |
|
|
|
| 5 | 护士站 | 护士 | 护士站预约通道 |
|
|
|
| 6 | 医生 | 医生 | 医生端预约通道 |
|
|
|
|
|
|
### 7.3 系统菜单结构示例
|
|
|
|
|
|
```
|
|
|
系统管理
|
|
|
├─ 用户管理
|
|
|
├─ 分组管理
|
|
|
├─ 菜单管理
|
|
|
└─ 系统配置
|
|
|
|
|
|
基础数据
|
|
|
├─ 科室管理
|
|
|
├─ 科室资源管理
|
|
|
├─ 设备管理
|
|
|
├─ 检查项目管理
|
|
|
├─ 项目分类管理
|
|
|
├─ 项目互斥配置
|
|
|
├─ 时间段管理
|
|
|
├─ 病区管理
|
|
|
└─ HIS数据同步
|
|
|
|
|
|
预约管理
|
|
|
├─ 预约计划模板
|
|
|
├─ 渠道比例配置
|
|
|
├─ 预约计划明细
|
|
|
├─ 节假日配置
|
|
|
└─ 体检日历管理
|
|
|
|
|
|
业务处理
|
|
|
├─ 医嘱工作列表
|
|
|
├─ 医生预约入口
|
|
|
├─ 预约统计
|
|
|
├─ 渠道统计
|
|
|
└─ 开单统计
|
|
|
```
|
|
|
|
|
|
### 7.4 关键业务规则
|
|
|
|
|
|
#### 7.4.1 预约规则
|
|
|
1. 门诊患者必须缴费后才能预约(可配置开关)
|
|
|
2. 急诊患者优先预约,可使用加急通道
|
|
|
3. 检查项目互斥校验(如增强CT和普通CT不能同一天)
|
|
|
4. 医嘱开立后需等待check_begin_time才能预约
|
|
|
5. 预约必须在end_reservation_time之前完成
|
|
|
|
|
|
#### 7.4.2 号源分配规则
|
|
|
1. 各渠道号源按比例分配(s_appointment_type_ratio)
|
|
|
2. 可合并渠道号源(link字段配置)
|
|
|
3. 占位号源优先预留(locked_count)
|
|
|
4. 号源不足时可跨渠道借号源(需配置)
|
|
|
|
|
|
#### 7.4.3 取消预约规则
|
|
|
1. 门诊患者缴费超时自动取消(可配置超时时间)
|
|
|
2. 取消后释放号源(递减used_count)
|
|
|
3. 记录取消原因和时间
|
|
|
4. 向PACS推送取消通知
|
|
|
|
|
|
#### 7.4.4 报到规则
|
|
|
1. 必须在预约日期当天报到
|
|
|
2. 过期预约不可报到,需重新预约
|
|
|
3. 报到后状态变为"已登记"
|
|
|
4. PACS报到同步(接收PacsSignIn接口)
|
|
|
|
|
|
---
|
|
|
|
|
|
## 8. 总结
|
|
|
|
|
|
本需求文档详细描述了秦皇岛中医院医技预约系统的业务需求、技术架构和实现细节。系统核心功能包括:
|
|
|
|
|
|
1. **HIS集成**: 通过MQ消息队列接收医嘱信息,自动同步基础数据
|
|
|
2. **多渠道预约**: 支持管理后台、自助机、H5移动端等多种预约方式
|
|
|
3. **号源管理**: 灵活的号源模板和渠道比例配置,支持乐观锁防止并发冲突
|
|
|
4. **业务流程**: 完整的医嘱接收→预约→报到→检查完成流程
|
|
|
5. **统计分析**: 多维度预约统计和运营监控
|
|
|
|
|
|
系统采用前后端分离架构,后端基于Laravel 8提供RESTful API,前端使用Vue 3和uni-app构建多端应用,通过C#监听服务实现HIS集成,整体架构清晰、扩展性强。
|
|
|
|
|
|
---
|
|
|
|
|
|
**文档版本**: V1.0
|
|
|
**编写日期**: 2026-04-03
|
|
|
**编写人**: Claude AI
|
|
|
**审核人**: 待定
|
|
|
**批准人**: 待定 |