随着医疗服务逐渐向线上延伸,越来越多医院开始建设互联网医院平台。一个完整的互联网医院看诊系统,通常需要覆盖 预约挂号、医生排班、在线问诊、订单支付、电子处方、诊后管理 等核心环节。
从技术角度来看,互联网医院系统并不仅仅是一个简单的问诊平台,而是一个包含 用户系统、医疗服务系统、订单系统、视频通信系统以及医疗数据管理系统 的综合平台。本文将从系统架构和核心代码逻辑角度,解析互联网医院看诊系统的完整实现流程。
一、互联网医院看诊系统整体架构
一个成熟的互联网医院看诊系统通常采用 分层架构或微服务架构,常见技术结构如下:
前端层
- 患者端(小程序 / APP / H5)
- 医生端(APP / Web)
- 管理后台(Web)
业务服务层
主要包含几个核心服务:
- 用户服务(患者、医生账号)
- 挂号预约服务
- 问诊服务
- 订单支付服务
- 视频问诊服务
- 电子处方服务
- 药品配送服务
基础服务层
- Redis缓存
- 消息队列(RabbitMQ / Kafka)
- 对象存储(OSS)
- WebRTC音视频服务
数据库层
- MySQL(业务数据)
- MongoDB(问诊记录)
- Redis(缓存)
系统架构示意流程:
患者预约 → 医生排班匹配 → 创建问诊订单 → 在线问诊 → 开具处方 → 药品配送
二、预约挂号模块设计
预约挂号是互联网医院最基础的入口功能,主要涉及 医生排班管理 + 挂号名额控制。
数据库表结构示例:
CREATE TABLE doctor_schedule (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
doctor_id BIGINT,
work_date DATE,
start_time TIME,
end_time TIME,
max_number INT,
used_number INT DEFAULT 0
);
当患者预约挂号时,需要进行 号源库存控制。
示例代码(Java):
public boolean bookDoctor(Long scheduleId, Long patientId){
DoctorSchedule schedule = scheduleMapper.selectById(scheduleId);
if(schedule.getUsedNumber() >= schedule.getMaxNumber()){
throw new RuntimeException("号源已满");
}
schedule.setUsedNumber(schedule.getUsedNumber() + 1);
scheduleMapper.update(schedule);
Order order = new Order();
order.setPatientId(patientId);
order.setScheduleId(scheduleId);
order.setStatus("WAIT_PAY");
orderMapper.insert(order);
return true;
}
在高并发情况下,一般需要使用 Redis + 分布式锁 控制号源。
示例:
RLock lock = redissonClient.getLock("doctor:schedule:" + scheduleId);
try{
lock.lock();
// 执行挂号逻辑
}finally{
lock.unlock();
}
这样可以避免多个用户同时抢号导致 超卖问题。
三、在线问诊模块设计
互联网医院的核心功能就是 在线问诊。通常支持三种方式:
- 图文问诊
- 语音问诊
- 视频问诊
问诊记录通常需要完整保存。
数据库结构示例:
CREATE TABLE consultation (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
order_id BIGINT,
doctor_id BIGINT,
patient_id BIGINT,
type VARCHAR(20),
start_time DATETIME,
end_time DATETIME,
status VARCHAR(20)
);
当患者进入问诊页面时,系统会创建问诊会话。
示例代码:
public Consultation startConsult(Long orderId){
Consultation consultation = new Consultation();
consultation.setOrderId(orderId);
consultation.setStartTime(LocalDateTime.now());
consultation.setStatus("IN_PROGRESS");
consultationMapper.insert(consultation);
return consultation;
}

四、视频问诊实现逻辑
视频问诊一般基于 WebRTC 或第三方音视频SDK 实现。
核心流程:
1 用户进入问诊房间
2 创建RTC房间
3 医生和患者加入房间
4 建立音视频流
5 结束问诊
示例接口:
@PostMapping("/createRoom")
public String createRoom(Long consultationId){
String roomId = "room_" + consultationId;
rtcService.createRoom(roomId);
return roomId;
}
患者端进入房间:
rtcClient.joinRoom({
roomId: roomId,
userId: patientId
})
医生端同样加入房间,即可建立视频通话。
五、电子处方模块设计
问诊结束后,医生可以在线开具电子处方。
处方表结构:
CREATE TABLE prescription (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
consultation_id BIGINT,
doctor_id BIGINT,
patient_id BIGINT,
drug_list TEXT,
create_time DATETIME
);
医生开处方示例代码:
public void createPrescription(Long consultationId,String drugList){
Prescription p = new Prescription();
p.setConsultationId(consultationId);
p.setDrugList(drugList);
p.setCreateTime(LocalDateTime.now());
prescriptionMapper.insert(p);
}
处方生成后,系统可以自动流转到 药房系统或第三方药品平台。
六、订单与支付系统
互联网医院通常需要支持 问诊费用支付。
订单状态流转:
待支付 → 已支付 → 问诊中 → 已完成
订单状态更新示例:
public void paySuccess(String orderNo){
Order order = orderMapper.findByOrderNo(orderNo);
order.setStatus("PAID");
orderMapper.update(order);
}
支付成功后,系统会自动通知医生端开始问诊。
七、系统高并发与稳定性设计
互联网医院在高峰期可能会出现大量问诊请求,因此需要做好系统稳定性设计。
常见技术方案包括:
1 Redis缓存
缓存医生信息与排班数据,减少数据库压力。
2 消息队列
问诊通知、处方流转、订单消息通过MQ处理。
示例:
rabbitTemplate.convertAndSend(
"consultation.exchange",
"consultation.start",
consultationId
);
3 分布式架构
将系统拆分为多个服务:
- 用户服务
- 医疗服务
- 订单服务
- 视频服务
- 药品服务
这样可以提升系统的扩展能力。

八、总结
从技术架构来看,一个完整的互联网医院看诊系统通常包含以下核心模块:
- 预约挂号系统
- 在线问诊系统
- 音视频问诊系统
- 电子处方系统
- 订单支付系统
- 药品配送系统
通过合理的系统架构设计,以及 缓存、消息队列、分布式服务等技术手段,可以支撑互联网医院平台稳定运行。
随着医疗数字化的发展,互联网医院不仅仅是线上问诊工具,更逐渐成为连接 医院、医生、患者与药品服务的重要平台基础设施。