【实战项目】Java医院管理系统设计与实现:集成AI智能导诊+语音识别

摘要:本文介绍了一款基于Java Swing开发的医院预约挂号系统,系统集成了Coze AI智能导诊、百度语音识别、二维码支付等创新功能,采用经典的三层架构设计,支持患者、医生、管理员三种角色,实现了完整的挂号预约业务流程。

关键词:Java Swing;Coze AI;智能导诊;预约挂号;语音识别


一、项目概述

1.1 项目背景

随着医疗信息化的快速发展,传统医院现场挂号模式已难以满足患者需求。患者常常面临"不知道挂什么科"、"排队时间长"、"号源紧张"等问题。本项目旨在开发一套智能化、一体化的医院管理系统,通过AI技术提升就医体验,优化医疗资源配置。

1.2 功能架构

复制代码
医院预约挂号系统
├── 患者端
│   ├── 医院简介浏览
│   ├── AI智能导诊(Coze AI)
│   ├── 语音输入症状
│   ├── 在线预约挂号
│   ├── 我的订单管理
│   ├── 查看诊断结果
│   ├── 就诊评价
│   ├── 系统通知
│   └── 院内导航
├── 医生端
│   ├── 查看排班
│   ├── 预约患者管理
│   └── 患者评价查看
└── 管理员端
    ├── 科室管理
    ├── 医生管理
    ├── 排班管理
    └── 数据统计

1.3 技术选型

技术 版本 用途
Java 17 开发语言(LTS版本)
Maven 3.x 项目构建工具
Swing JDK内置 GUI界面框架
MySQL 8.0 数据存储
JDBC 4.2 数据库访问
Coze API v2 AI智能导诊
百度语音API v2 语音识别
OkHttp 4.12.0 HTTP客户端
Gson 2.10.1 JSON处理

二、系统架构设计

2.1 整体架构

采用经典的三层架构模式:

复制代码
┌─────────────────────────────────────┐
│           表现层 (View)              │
│  LoginView / PatientMainView / ...  │
├─────────────────────────────────────┤
│           业务层 (Service)           │
│  UserService / OrderService / ...   │
├─────────────────────────────────────┤
│           数据层 (DAO)               │
│  UserDao / DoctorDao / OrderDao...  │
├─────────────────────────────────────┤
│           实体层 (Entity)            │
│  User / Doctor / Order / ...        │
└─────────────────────────────────────┘

2.2 项目结构

复制代码
hospital_pro/
├── src/main/java/
│   ├── entity/          # 实体类
│   ├── dao/             # 数据访问层
│   ├── service/         # 业务逻辑层
│   ├── view/            # 界面层
│   │   └── panel/       # 子面板组件
│   ├── dto/             # 数据传输对象
│   ├── util/            # 工具类
│   └── resources/       # 配置文件
└── pom.xml              # Maven配置

三、核心功能实现

3.1 AI智能导诊功能

系统集成Coze AI平台,实现多轮对话式症状分析:

Java

复制代码
/**
 * CozeService - AI智能导诊服务
 * 支持多轮对话,异步调用避免UI卡顿
 */
public class CozeService {
    private static final String COZE_API_URL = 
        "https://api.coze.cn/open_api/v2/chat";
    private static final String BOT_ID = "7645674954880778294";
    
    private final OkHttpClient httpClient;
    private final Gson gson;

    public CozeService() {
        this.httpClient = new OkHttpClient.Builder()
            .connectTimeout(30, TimeUnit.SECONDS)
            .readTimeout(60, TimeUnit.SECONDS)
            .build();
        this.gson = new Gson();
    }

    /**
     * 异步分析症状
     * @param conversationHistory 对话历史
     * @param currentInput 当前输入
     */
    public void analyzeSymptomsAsync(List<ChatMessage> conversationHistory,
                                     String currentInput,
                                     Consumer<CozeAnalysisResult> onSuccess,
                                     Consumer<String> onError) {
        SwingWorker<CozeAnalysisResult, Void> worker = new SwingWorker<>() {
            @Override
            protected CozeAnalysisResult doInBackground() throws Exception {
                return callCozeApi(conversationHistory, currentInput);
            }
            
            @Override
            protected void done() {
                try {
                    CozeAnalysisResult result = get();
                    onSuccess.accept(result);
                } catch (Exception e) {
                    onError.accept("AI分析失败:" + e.getMessage());
                }
            }
        };
        worker.execute();
    }
}

AI导诊交互流程:

复制代码
患者: 我最近总是头痛、恶心
AI: 请问这种症状持续多久了?有没有伴随发热?
患者: 大概一周了,没有发热,但有时候看东西模糊
AI: 根据您的描述,建议挂【神经内科】
系统: 自动显示神经内科可预约医生列表

3.2 语音识别功能

集成百度语音API,支持语音输入症状描述:

Java

复制代码
/**
 * SpeechRecognitionService - 百度语音识别
 */
public class SpeechRecognitionService {
    private static final String API_KEY = "your_api_key";
    private static final String SECRET_KEY = "your_secret_key";
    
    private TargetDataLine targetDataLine;
    private boolean isRecording = false;
    private ByteArrayOutputStream audioOutputStream;

    /**
     * 开始录音
     */
    public void startRecording() throws Exception {
        // 配置音频格式:16kHz, 16bit, 单声道
        AudioFormat format = new AudioFormat(16000, 16, 1, true, false);
        DataLine.Info info = new DataLine.Info(TargetDataLine.class, format);
        
        targetDataLine = (TargetDataLine) AudioSystem.getLine(info);
        targetDataLine.open(format);
        targetDataLine.start();
        
        isRecording = true;
        audioOutputStream = new ByteArrayOutputStream();
        
        // 后台线程录音
        new Thread(() -> {
            byte[] buffer = new byte[1024];
            while (isRecording) {
                int count = targetDataLine.read(buffer, 0, buffer.length);
                if (count > 0) {
                    audioOutputStream.write(buffer, 0, count);
                }
            }
        }).start();
    }

    /**
     * 停止录音并识别
     */
    public String stopRecordingAndRecognize() throws IOException {
        isRecording = false;
        targetDataLine.stop();
        targetDataLine.close();
        
        byte[] audioData = audioOutputStream.toByteArray();
        byte[] wavData = addWavHeader(audioData, 16000, 1, 16);
        
        return callBaiduASR(wavData);
    }
}

3.3 智能排班系统

根据医生级别自动安排排班:

Java

复制代码
/**
 * BatchScheduler - 批量排班器
 */
public class BatchScheduler {
    // 每天最少医生数
    private static final int MIN_DOCTORS_PER_SHIFT = 3;
    // 每天最多医生数
    private static final int MAX_DOCTORS_PER_DAY = 6;

    /**
     * 批量排班
     */
    public boolean executeBatchScheduling(Integer[] deptIds, 
                                          Date startDate, 
                                          int weeks) {
        Date endDate = Date.valueOf(
            startDate.toLocalDate().plusWeeks(weeks));
        
        // 清理旧排班
        clearScheduleRange(startDate, endDate);
        
        // 为每个科室排班
        for (int week = 0; week < weeks; week++) {
            LocalDate weekStart = startDate.toLocalDate()
                .plusWeeks(week);
            
            for (Integer deptId : deptIds) {
                scheduleDepartmentForWeek(deptId, 
                    Date.valueOf(weekStart));
            }
        }
        return true;
    }

    /**
     * 根据级别获取最大工作天数
     */
    private int getMaxWorkDays(int level) {
        return switch (level) {
            case 4 -> 5;  // 正高:5天/周
            case 3 -> 6;  // 副高:6天/周
            default -> 7; // 其他:7天/周
        };
    }
}

3.4 数据库连接池

自定义简易连接池实现:

Java

复制代码
/**
 * JDBCUtil - 数据库连接工具类
 * 内置简单连接池
 */
public class JDBCUtil {
    private static BlockingQueue<Connection> connectionPool;
    private static final int POOL_SIZE = 5;

    static {
        try {
            // 加载配置
            Properties prop = new Properties();
            InputStream is = JDBCUtil.class.getClassLoader()
                .getResourceAsStream("db.properties");
            prop.load(is);
            
            String driver = prop.getProperty("driver");
            String url = prop.getProperty("url");
            String user = prop.getProperty("user");
            String password = prop.getProperty("password");
            
            Class.forName(driver);
            
            // 初始化连接池
            connectionPool = new ArrayBlockingQueue<>(POOL_SIZE);
            for (int i = 0; i < POOL_SIZE; i++) {
                Connection conn = DriverManager
                    .getConnection(url, user, password);
                connectionPool.offer(conn);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static Connection getConnection() 
            throws InterruptedException {
        return connectionPool.take();
    }

    public static void releaseConnection(Connection conn) {
        if (conn != null) {
            connectionPool.offer(conn);
        }
    }
}

四、数据库设计

4.1 核心表结构

SQL

复制代码
-- 用户表
CREATE TABLE user (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) NOT NULL UNIQUE,
    password VARCHAR(32) NOT NULL, -- MD5加密
    phone VARCHAR(20),
    role INT DEFAULT 2 COMMENT '1-管理员 2-患者',
    create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- 科室表
CREATE TABLE department (
    id INT PRIMARY KEY AUTO_INCREMENT,
    dept_name VARCHAR(50) NOT NULL,
    location VARCHAR(100) COMMENT '科室位置'
);

-- 医生表
CREATE TABLE doctor (
    id INT PRIMARY KEY AUTO_INCREMENT,
    dept_id INT,
    doctor_name VARCHAR(50),
    doctor_level INT COMMENT '1住院 2主治 3副高 4正高',
    register_fee DECIMAL(10,2),
    title VARCHAR(50),
    skill TEXT,
    FOREIGN KEY (dept_id) REFERENCES department(id)
);

-- 排班表
CREATE TABLE schedule (
    id INT PRIMARY KEY AUTO_INCREMENT,
    doctor_id INT,
    work_date DATE,
    shift_type VARCHAR(20) COMMENT '上午/下午',
    max_patients INT DEFAULT 20,
    remaining INT DEFAULT 20,
    FOREIGN KEY (doctor_id) REFERENCES doctor(id)
);

-- 订单表
CREATE TABLE `order` (
    id INT PRIMARY KEY AUTO_INCREMENT,
    user_id INT,
    doctor_id INT,
    source_id INT COMMENT '排班ID',
    order_time TIMESTAMP,
    register_fee DECIMAL(10,2),
    status INT DEFAULT 0 COMMENT '0待付款 1已挂号 2已完成 3已取消',
    pay_time TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES user(id),
    FOREIGN KEY (doctor_id) REFERENCES doctor(id)
);

五、关键界面展示

5.1 登录界面

  • 支持患者/管理员两种角色登录
  • 密码采用MD5加密存储
  • 记住用户名功能

5.2 患者主界面

采用JTabbedPane组织功能模块:

  • 医院简介:展示医院基本信息
  • 在线挂号:科室-医生-时段三级选择
  • AI智能导诊:对话式症状分析
  • 我的订单:查看历史预约记录
  • 院内导航:楼层科室分布图

5.3 医生端界面

  • 查看排班:日历形式展示排班
  • 预约患者:管理预约患者列表
  • 患者评价:查看患者反馈

5.4 管理员端界面

  • 科室管理:增删改查科室信息
  • 医生管理:医生信息维护
  • 排班管理:手动/自动排班

六、项目亮点

6.1 技术创新

亮点 说明
AI智能导诊 集成Coze AI,支持多轮对话,智能推荐科室
语音识别 百度语音API,支持语音输入症状
连接池 自定义连接池,提升数据库性能
定时任务 ScheduledExecutorService处理超时订单

6.2 设计模式应用

Java

复制代码
// 单例模式 - JDBC连接池
public class JDBCUtil {
    private static JDBCUtil instance;
    private JDBCUtil() {}
    public static synchronized JDBCUtil getInstance() {
        if (instance == null) {
            instance = new JDBCUtil();
        }
        return instance;
    }
}

// 观察者模式 - 数据更新通知
public interface DataObserver {
    void onDataChanged();
}

// 工厂模式 - 创建不同角色视图
public class ViewFactory {
    public static JFrame createView(User user) {
        return switch (user.getRole()) {
            case 1 -> new AdminMainView(user);
            case 2 -> new PatientMainView(user);
            default -> throw new IllegalArgumentException();
        };
    }
}

七、总结与展望

7.1 项目总结

本项目成功实现了一套功能完善的医院预约挂号系统:

功能完整 :覆盖挂号预约全流程,三端功能齐全

AI赋能 :智能导诊提升患者就医体验

架构清晰 :三层架构,代码可维护性强

技术先进:Java 17 + 多线程 + AI集成

7.2 未来优化

方向 计划
Web化 Spring Boot + Vue前后端分离
移动端 微信小程序/APP开发
AI增强 接入更多AI能力(预问诊、用药提醒)
数据可视化 ECharts图表展示运营数据
微服务 拆分用户/订单/排班服务

八、源码获取

GitHub地址hac88406-gif/java-hospital-system: GitHub Desktop tutorial repository


📝 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

如果本文对你有帮助,欢迎点赞、收藏、评论支持!有问题可以在评论区留言交流。


以上就是完整的CSDN博客内容,包含了项目概述、架构设计、核心功能实现、数据库设计、界面展示、项目亮点和总结展望等完整章节。你可以根据实际项目情况调整代码示例和截图部分。