You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 KiB
64 KiB
秦皇岛中医院医技预约系统需求文档
1. 原始需求
1.1 业务背景
秦皇岛中医院作为综合性医疗机构,拥有多个医技检查科室(如CT、MRI、超声、内镜等)。随着医疗业务量增长,传统的手工预约管理模式已无法满足需求,存在以下问题:
- 患者排队时间长,检查安排效率低
- 各科室号源管理混乱,无法合理分配
- 住院、门诊、急诊、体检等不同渠道的患者预约需求难以统筹
- HIS系统医嘱信息无法及时同步到检查科室
- 缺乏统一的报到和登记流程
1.2 核心需求(大白话描述)
- 医生开医嘱后,患者能通过各种方式(自助机、手机、窗口)预约检查时间
- 各科室能设置每天的号源,按住院、门诊、急诊等不同渠道分配号源比例
- 患者预约后能按时段报到,科室能管理检查进度
- HIS系统开医嘱后自动推送到预约系统,不用人工录入
- 管理后台能统计预约情况,监控科室运营状况
1.3 业务场景
- 住院患者预约场景:住院医生在HIS系统开医嘱 → HIS推送医嘱信息 → 护士站工作人员查看待预约列表 → 根据病情和科室号源情况预约合适时段 → 通知患者检查时间 → 患者按时报到检查
- 门诊患者预约场景:门诊医生开医嘱 → 患者缴费后 → 通过自助机或手机H5预约 → 选择合适时段 → 按预约时间报到检查
- 急诊患者预约场景:急诊医生开医嘱 → 急诊优先通道快速预约 → 优先检查
- 体检患者预约场景:体检中心开检查单 → 患者预约体检时段 → 按时段完成检查
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
{ "status": true/false, "msg": "提示信息", "data": {} }
3.2.2 接口分类
- 系统管理接口 (
/api/v1/admin/*)- 用户、分组、菜单、配置管理
- 业务管理接口 (
/api/v1/admin/*)- 科室、设备、检查项目、预约计划管理
- H5端接口 (
/api/v1/H5/*)- 患者登录、医嘱查询、预约操作
- 第三方接口 (
/api/v1/T/*)- HIS推送医嘱、PACS报到通知
3.2.3 中间件
checktoken: 验证用户Tokencheck.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 - 权限: 无需认证
- 入参:
{ "username": "用户名", "pwd": "密码" } - 出参:
{ "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 - 权限: 无需认证
- 入参:
{ "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
- 入参:
{ "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
- 入参:
{ "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
- 入参:
{ "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
- 入参:
{ "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
- 入参:
{ "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
- 入参:
{ "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
- 入参:
{ "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
- 入参:
{ "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
- 入参:
{ "page": 1, "pageSize": 20, "searchInfo": {} } - 出参: 返回检查项目列表
17. 保存检查项目
- URL:
POST /api/v1/admin/SaveItemInfo - 权限: 需要Token
- 入参: 检查项目完整信息
- 出参: 返回保存结果
18. 检查项目绑定设备
- URL:
POST /api/v1/admin/ItemBindDevice - 权限: 需要Token
- 入参:
{ "item_id": 1, "device_ids": [1, 2, 3] } - 出参: 返回绑定结果
19. 设置项目互斥
- URL:
POST /api/v1/admin/SetHuChi - 权限: 需要Token
- 入参:
{ "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
- 入参:
{ "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 - 入参:
{ "searchInfo": { "date_type": 1, // 1工作日/2节假日 "type": 0, // 0默认/1夏令时/2冬令时 "resources_id": 1 // 资源ID } } - 出参: 返回模板列表,含各渠道号源配置
- 逻辑:
- 查询s_source_roster表
- 关联s_source_roster_count表获取渠道数量
- 按科室、资源、时间段分组展示
5.1.3 生成预约计划明细
- URL:
POST /api/v1/admin/CreatePlanList - 入参:
{ "dateRange": ["2024-01-01", "2024-12-31"], "ids": [1, 2, 3], // 模板ID数组 "date_type": 1, // 1工作日/2节假日 "HolidayEnable": true // 是否生成节假日 } - 出参:
{ "status": true, "msg": "执行完成,共计生成计划 X 条", "data": { "count": 365 } } - 逻辑:
- 调用RosterService.generatePlans服务
- 根据模板和日期范围生成明细
- 写入s_source_roster_detail表
- 写入s_source_roster_detail_count表
- 初始化version=0
5.1.4 获取医嘱列表
- URL:
POST /api/v1/admin/GetMainList - 入参:
{ "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 } - 出参: 返回医嘱列表,含患者信息、预约信息、状态等
- 逻辑:
- 根据用户分组过滤数据(科室管理员/护士/医生)
- 查询s_list表
- 关联s_period、s_department_resources表
- 计算患者年龄、匹配设备信息
- 分页返回
5.1.5 获取可预约时段
- URL:
POST /api/v1/admin/GetEnablePlan - 入参:
{ "regnum": "登记号", "entrustid": "医嘱ID", "episodeid": "就诊ID", "appointment_type": 4 // 预约渠道类型 } - 出参: 返回可用时段列表,含号源剩余数量
- 逻辑:
- 查询医嘱对应的检查项目
- 查找项目关联的科室、资源、设备
- 查询可用号源 (s_source_roster_detail)
- 检查号源数量 (used_count < count)
- 检查项目互斥关系
- 检查门诊缴费状态
- 检查医嘱等待时间 (check_begin_time)
- 返回可用时段
5.1.6 执行预约
- URL:
POST /api/v1/admin/PlanYuYue - 入参:
{ "regnum": "登记号", "entrustid": ["医嘱ID1", "医嘱ID2"], "roster_detail_id": 123, // 号源明细ID "appointment_type": 4, // 预约渠道 "do_user": 1, // 操作人ID "do_type": 1 // 1预约/2改约 } - 出参: 预约成功/失败信息
- 逻辑:
- 检查医嘱状态(必须是状态0或可改约状态1)
- 使用乐观锁更新号源数量:
- 查询当前version
- UPDATE时WHERE version=当前值
- 递增used_count和version
- 如果UPDATE失败(version已变),重试或返回失败
- 更新s_list表:
- list_status = 1
- 预约时间、资源、服务组等
- 记录s_list_log日志
- 向PACS推送申请单
- 返回预约结果
5.1.7 取消预约
- URL:
POST /api/v1/admin/CancelYuYue - 入参:
{ "ids": [1, 2, 3], // 医嘱记录ID数组 "cancel_type": "系统取消" // 取消类型 } - 出参: 取消成功/失败信息
- 逻辑:
- 检查医嘱状态(必须是已预约状态1)
- 释放号源:
- 递减used_count
- 不递增version(释放不需要锁)
- 更新s_list表:
- list_status恢复原状态或保持0
- 记录canel_time
- 记录cancel_type
- 记录s_list_log日志
- 向PACS推送取消申请单
- 返回取消结果
5.1.8 报到接口
- URL:
POST /api/v1/admin/SignIn - 入参:
{ "id": 1 // 医嘱记录ID } - 出参: 报到成功/失败信息
- 逻辑:
- 检查医嘱状态(必须是已预约状态1)
- 检查预约日期是否为当天或已过期
- 更新s_list表:
- list_status = 2
- 记录reg_date, reg_time
- 记录s_list_log日志
- 返回报到结果
5.1.9 HIS医嘱推送接口
- URL:
POST /api/v1/T/CreateRecordXml - 入参: XML格式的医嘱信息(HL7标准)
- 出参: 接收确认消息
- 逻辑:
- 解析XML消息
- 提取医嘱信息
- 检查entrust_id是否已存在(防止重复)
- 写入s_list表(list_status=0)
- 返回确认消息
5.1.10 PACS报到通知接口
- URL:
POST /api/PacsSignIn - 入参:
{ "reg_num": "登记号", "entrust_id": "医嘱ID" } - 出参: 报到确认
- 逻辑:
- 查询医嘱记录
- 更新list_status=2
- 记录报到时间
- 记录日志
5.2 数据库表详细设计
5.2.1 预约主表 (s_list)
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)
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)
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)
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)
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 前端配置
// 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)
<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 预约规则
- 门诊患者必须缴费后才能预约(可配置开关)
- 急诊患者优先预约,可使用加急通道
- 检查项目互斥校验(如增强CT和普通CT不能同一天)
- 医嘱开立后需等待check_begin_time才能预约
- 预约必须在end_reservation_time之前完成
7.4.2 号源分配规则
- 各渠道号源按比例分配(s_appointment_type_ratio)
- 可合并渠道号源(link字段配置)
- 占位号源优先预留(locked_count)
- 号源不足时可跨渠道借号源(需配置)
7.4.3 取消预约规则
- 门诊患者缴费超时自动取消(可配置超时时间)
- 取消后释放号源(递减used_count)
- 记录取消原因和时间
- 向PACS推送取消通知
7.4.4 报到规则
- 必须在预约日期当天报到
- 过期预约不可报到,需重新预约
- 报到后状态变为"已登记"
- PACS报到同步(接收PacsSignIn接口)
8. 总结
本需求文档详细描述了秦皇岛中医院医技预约系统的业务需求、技术架构和实现细节。系统核心功能包括:
- HIS集成: 通过MQ消息队列接收医嘱信息,自动同步基础数据
- 多渠道预约: 支持管理后台、自助机、H5移动端等多种预约方式
- 号源管理: 灵活的号源模板和渠道比例配置,支持乐观锁防止并发冲突
- 业务流程: 完整的医嘱接收→预约→报到→检查完成流程
- 统计分析: 多维度预约统计和运营监控
系统采用前后端分离架构,后端基于Laravel 8提供RESTful API,前端使用Vue 3和uni-app构建多端应用,通过C#监听服务实现HIS集成,整体架构清晰、扩展性强。
文档版本: V1.0 编写日期: 2026-04-03 编写人: Claude AI 审核人: 待定 批准人: 待定