Java实现医院门诊预约挂号系统 JAVA+Vue+SpringBoot+MySQL

在这里插入图片描述


目录

  • 一、摘要
    • 1.1 项目介绍
    • 1.2 项目录屏
  • 二、功能模块
    • 2.1 功能性需求
      • 2.1.1 数据中心模块
      • 2.1.2 科室医生档案模块
      • 2.1.3 预约挂号模块
      • 2.1.4 医院时政模块
    • 2.2 可行性分析
      • 2.2.1 可靠性
      • 2.2.2 易用性
      • 2.2.3 维护性
  • 三、数据库设计
    • 3.1 用户表
    • 3.2 科室档案表
    • 3.3 医生档案表
    • 3.4 医生放号表
    • 3.5 患者挂号预约表
    • 3.6 医院时政表
    • 3.7 医院留言表
  • 四、系统展示
  • 五、核心代码
    • 5.1 查询医生
    • 5.2 医生放号
    • 5.3 置顶医院新闻
    • 5.4 查询我的挂号数据
    • 5.5 预约挂号
  • 六、免责说明


一、摘要

1.1 项目介绍

基于JAVA+Vue+SpringBoot+MySQL 的医院门诊预约挂号系统,包含了科室管理模块、医生管理模块、预约挂号模块、医院新闻模块和留言板模块,还包含系统自带的用户管理、部门管理、角色管理、菜单管理、日志管理、数据字典管理、文件管理、图表展示等基础模块,医院门诊预约挂号系统基于角色的访问控制,给患者、医院管理员使用,可将权限精确到按钮级别,您可以自定义角色并分配权限,系统适合设计精确的权限约束需求。

1.2 项目录屏


二、功能模块

为了能让开发出来的预约挂号真正投入使用,所以需要对系统的需求加以分析设计,以下分别对功能性需求和可行性两方面分别对预约挂号进行需求分析。

在这里插入图片描述

2.1 功能性需求

本文设计的预约挂号系统的包括了系统数据中心模块,用来存放管理系统通用的模块,另外分别设计了科室/医生档案、预约挂号、医院时政这三大模块,用于存放系统的核心业务逻辑。

2.1.1 数据中心模块

数据中心模块包含了对医院门诊预约挂号系统的基础模块,比如管理谁可以登陆这套系统,记录这些人登陆系统做了什么,不同的人拥有不同权限的管理。

在这里插入图片描述

2.1.2 科室医生档案模块

科室医生档案模块是对医院科室、医生的信息进行管理,其中包括医院所有科室、及科室下医生的档案,包含了科室名称、科室代码,医生姓名、医生年龄、医生学历学位、开始工作时间、毕业院校、职称、专业、医生简介等,可以通过此模块对科室、医生进行添加、编辑更新、删除、查询操作。

在这里插入图片描述

2.1.3 预约挂号模块

医院门诊预约挂号管理系统录入了各大医院医生的放号信息,包括不同职称医生的挂号费用,管理员在这个模块进行挂号费用的设置和医生的排班。

在这里插入图片描述

2.1.4 医院时政模块

医院时政模块是医院的门面,模块上放置了医院发布的重要通知、医生坐诊停诊信息和就诊患者的留言信息。患者可以查询管理员发布的时政新闻,也可以对医院进行评价留言,做到和医院的数据交互。

在这里插入图片描述

2.2 可行性分析

2.2.1 可靠性

医院门诊预约挂号的数据真实性非常重要。所以为了保证预约挂号系统的数据准确,要定时清除系统的冗余数据,以便于对挂号数据进行数据分析。

2.2.2 易用性

易用性是任何管理系统必须要遵循的原则,对于预约挂号系统也是如此。系统必须要易于就诊患者使用,因为系统的开发就是为了简化患者的就医流程,不能因为系统的出现而让就医流程更复杂。

2.2.3 维护性

医院门诊要有自我保护机制,当收到黑客非法攻击是,需要拥有抛出异常的机制,不能陷入无限循环判断而让系统崩溃,造成患者挂号失败的情况。


三、数据库设计

3.1 用户表

在这里插入图片描述

3.2 科室档案表

在这里插入图片描述

3.3 医生档案表

在这里插入图片描述

3.4 医生放号表

在这里插入图片描述

3.5 患者挂号预约表

在这里插入图片描述

3.6 医院时政表

在这里插入图片描述

3.7 医院留言表

在这里插入图片描述


四、系统展示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


五、核心代码

5.1 查询医生

@RequestMapping(value = "/getByPage", method = RequestMethod.GET)
@ApiOperation(value = "查询医生")
public Result<IPage<Doctor>> getByPage(@ModelAttribute Doctor doctor,@ModelAttribute PageVo page){
    QueryWrapper<Doctor> qw = new QueryWrapper<>();
    if(!ZwzNullUtils.isNull(doctor.getDoctorName())) {
        qw.like("doctor_name",doctor.getDoctorName());
    }
    if(!ZwzNullUtils.isNull(doctor.getPostLevel())) {
        qw.eq("post_level",doctor.getPostLevel());
    }
    if(!ZwzNullUtils.isNull(doctor.getSubjectId())) {
        qw.eq("subject_id",doctor.getSubjectId());
    }
    if(!ZwzNullUtils.isNull(doctor.getNoeDate()) && Objects.equals(doctor.getNoeDate(),"是")) {
        qw.inSql("id","SELECT id FROM t_doctor WHERE id IN(SELECT DISTINCT doctor_id FROM t_doctor_scheduling WHERE DATE = '" + DateUtil.today() + "')");
    }
    return new ResultUtil<IPage<Doctor>>().setData(iDoctorService.page(PageUtil.initMpPage(page),qw));
}

5.2 医生放号

@RequestMapping(value = "/addNumber", method = RequestMethod.POST)
@ApiOperation(value = "医生放号")
public Result<Object> addNumber(@RequestParam String doctorId,@RequestParam String date,@RequestParam int step,@RequestParam int number){
    Doctor doctor = iDoctorService.getById(doctorId);
    if(doctor == null) {
        return ResultUtil.error("医生不存在");
    }
    if(number < 1) {
        return ResultUtil.error("放号数必须大于0");
    }
    for(int i = 1 ; i <= number; i ++) {
        DoctorScheduling ds = new DoctorScheduling();
        ds.setDoctorId(doctor.getId());
        ds.setDoctorName(doctor.getDoctorName());
        ds.setNumber(i + "");
        ds.setStep(step + "");
        ds.setDate(date);
        ds.setOrderFlag(0);
        iDoctorSchedulingService.saveOrUpdate(ds);
    }
    return ResultUtil.success("放号成功");
}

5.3 置顶医院新闻

@RequestMapping(value = "/set_top_by_id", method = RequestMethod.POST)
@ApiOperation(value = "置顶医院新闻")
public Result<Boolean> setTopById(@RequestParam String id){
    HospitalNews appDynamicNew=iHospitalNewsService.getById(id);
    if(appDynamicNew==null) {
        return ResultUtil.error("该动态信息不存在");
    }
    if(appDynamicNew.getIsTop().equals("yes")) {
        appDynamicNew.setIsTop("no");
    }
    else {
        appDynamicNew.setIsTop("yes");
    }
    if(!iHospitalNewsService.saveOrUpdate(appDynamicNew)) {
        return ResultUtil.error("设置失败");
    }
    return ResultUtil.success("设置成功");
}

5.4 查询我的挂号数据

@RequestMapping(value = "/getMyOrderList", method = RequestMethod.POST)
@ApiOperation(value = "查询我的挂号")
public Result<IPage<HospitalOrder>> getMyOrderList(@ModelAttribute HospitalOrder order,@ModelAttribute PageVo page){
    User currUser = securityUtil.getCurrUser();
    QueryWrapper<HospitalOrder> qw = new QueryWrapper<>();
    qw.eq("user_id",currUser.getId());
    qw.orderByDesc("create_time");
    if(!ZwzNullUtils.isNull(order.getDateTime())) {
        qw.eq("date_time",order.getDateTime());
    }
    if(!ZwzNullUtils.isNull(order.getDoctorName())) {
        qw.like("doctor_name",order.getDoctorName());
    }
    return new ResultUtil<IPage<HospitalOrder>>().setData(iHospitalOrderService.page(PageUtil.initMpPage(page),qw));
}

5.5 预约挂号

@RequestMapping(value = "/addOrder", method = RequestMethod.POST)
@ApiOperation(value = "新增挂号")
public Result<Object> addOrder(@RequestParam String orderId){
    User currUser = securityUtil.getCurrUser();
    DoctorScheduling ds = iDoctorSchedulingService.getById(orderId);
    if(ds == null) {
        return ResultUtil.error("号源不存在");
    }
    if(ds.getOrderFlag() > 0) {
        return ResultUtil.error("您手慢拉,该号已被别人预约!");
    }
    Doctor doctor = iDoctorService.getById(ds.getDoctorId());
    if(doctor == null) {
        return ResultUtil.error("医生不存在");
    }
    ds.setOrderFlag(1);
    iDoctorSchedulingService.saveOrUpdate(ds);
    HospitalOrder ho = new HospitalOrder();
    ho.setUserId(currUser.getId());
    ho.setUserName(currUser.getNickname());
    ho.setOrderId(ds.getId());
    ho.setNumber(ds.getNumber());
    ho.setStep(ds.getStep());
    ho.setDateTime(ds.getDate());
    ho.setDoctorId(ds.getDoctorId());
    ho.setDoctorName(ds.getDoctorName());
    ho.setMoneyData(doctor.getOrderMoney());
    iHospitalOrderService.saveOrUpdate(ho);
    return ResultUtil.success("预约成功!");
}

六、免责说明

  • 本项目仅供个人学习使用,商用授权请联系博主,否则后果自负。
  • 博主拥有本软件构建后的应用系统全部内容所有权及独立的知识产权,拥有最终解释权。
  • 如有问题,欢迎在仓库 Issue 留言,看到后会第一时间回复,相关意见会酌情考虑,但没有一定被采纳的承诺或保证。

下载本系统代码或使用本系统的用户,必须同意以下内容,否则请勿下载!

  1. 出于自愿而使用/开发本软件,了解使用本软件的风险,且同意自己承担使用本软件的风险。
  2. 利用本软件构建的网站的任何信息内容以及导致的任何版权纠纷和法律争议及后果和博主无关,博主对此不承担任何责任。
  3. 在任何情况下,对于因使用或无法使用本软件而导致的任何难以合理预估的损失(包括但不仅限于商业利润损失、业务中断与业务信息丢失),博主概不承担任何责任。
  4. 必须了解使用本软件的风险,博主不承诺提供一对一的技术支持、使用担保,也不承担任何因本软件而产生的难以预料的问题的相关责任。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/348414.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RocketMQ源码阅读-八-定时消息和消息重试

RocketMQ源码阅读-八-定时消息和消息重试 定时消息概念逻辑流程图延迟级别Producer发送定时消息Broker存储定时消息Broker发送定时消息Broker 持久化定时发送进度 消息重试总结 定时消息 概念 官网给出的概念&#xff1a;https://rocketmq.apache.org/zh/docs/featureBehavior…

记录威纶通:HMI

目录 HMI 界面切换​编辑 间接窗口 HMI 界面切换 第一种&#xff1a;选择功能键-切换基本窗口-操作界面-每一个界面都创建切换按钮 第二种&#xff1a;创建一个模板界面-使用功能键按照上面的操作创建两个切换按钮 选择操作界面-点击空白出右击属性-窗口设置底层选择模板界面…

flutter 五点一点四:MaterialApp Theme 给你一堆颜色看看

ColorScheme colorScheme, // 拥有30种颜色(这个数可能过几个版本会变化吧)&#xff0c;可用于配置大多数组件的颜色。 A set of 30 colors based on the[Material spec] that can be used to configure the color properties of most components.Color canvasColor, // Mater…

LeetCode 热题 100 | 子串

目录 1 560. 和为 K 的子数组 2 239. 滑动窗口最大值 3 76. 最小覆盖子串 菜鸟做题第二周&#xff0c;语言是 C 1 560. 和为 K 的子数组 题眼&#xff1a;“子数组是数组中元素的连续非空序列。” 解决本问题的关键就在于如何翻译问题。子数组 s 的和可以看作数组 i 的…

精品基于Uniapp+ssm基于java的赈灾系统App救灾救助捐赠

《[含文档PPT源码等]精品基于Uniappssm基于java的赈灾系统App》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功&#xff01; 软件开发环境及开发工具&#xff1a; 开发语言&#xff1a;Java 后台框架&#xff1a;ssm 安卓框架&#xff…

防御第三次作业-防火墙组网实验(3)

目录 实验拓扑图 要求 1 2 针对10.0.2.10设备的安全策略&#xff1a; 针对10.0.2.20设备的安全策略&#xff1a; 3 4 实验拓扑图 各设备ip和接口已配好&#xff0c;均可可ping通防火墙。 要求 1.生产区在工作时间内可以访问dmz区域&#xff0c;仅可以访问http服…

通俗易懂理解FCN全卷积网络模型

温故而知新&#xff0c;可以为师矣&#xff01; 一、参考资料 深度学习笔记&#xff08;二十三&#xff09;Semantic Segmentation(FCN/U-Net/PSPNet/SegNet/U-Net/ICNet/DFANet/Fast-SCNN) 二、FCN相关介绍 1. FCN简介 FCN&#xff08;Fully Convolutional Networks&…

ELK之Grafana添加钉钉告警信息

Grafana版本如下&#xff1a; [roottest data]# grafana-server -v Version 8.4.6 (commit: c53173ff6, branch: HEAD)一、新建钉钉群&#xff0c;并自定义一个机器人 点击右上角设置 ------》 智能群助手 ------》 添加机器人 ------》右侧设置按钮 ------》点击自定义&…

如何快速搭建springboot+前后端分离(vue),多商户客户端实现微信小程序+ios+app使用uniapp(一处编写,处处编译)

kxmalls外卖生鲜多商户&#xff0c;针对中小商户、企业和个人学习者开发。使用Java编码&#xff0c;采用SpringBoot、Mybatis-Plus等易用框架&#xff0c;适合个人学习研究。同时支持单机部署、集群部署&#xff0c;用户与店铺范围动态定位&#xff0c;中小商户企业可根据业务动…

【数据结构与算法】之字符串系列-20240126

这里写目录标题 一、12. 整数转罗马数字二、43. 字符串相乘三、49. 字母异位词分组四、151. 反转字符串中的单词五、179. 最大数 一、12. 整数转罗马数字 中等 罗马数字包含以下七种字符&#xff1a; I&#xff0c; V&#xff0c; X&#xff0c; L&#xff0c;C&#xff0c;D …

06.Elasticsearch应用(六)

Elasticsearch应用&#xff08;六&#xff09; 1.什么是分词器 ES文档的数据拆分成一个个有完整含义的关键词&#xff0c;并将关键词与文档对应&#xff0c;这样就可以通过关键词查询文档。要想正确的分词&#xff0c;需要选择合适的分词器 2.ES中的默认分词器 fingerprint…

OpenCV笔记之图像处理中遮罩和掩模的关系

OpenCV笔记之图像处理中遮罩和掩模的关系 code review 文章目录 OpenCV笔记之图像处理中遮罩和掩模的关系1.遮罩详解遮罩的创建遮罩的应用遮罩的主要应用遮罩的类型如何创建遮罩遮罩在图像处理中的应用方式 2.遮罩和掩模的关系 1.遮罩详解 在图像处理中&#xff0c;遮罩&#…

Linux笔记之bash脚本中的-e、和

Linux笔记之bash脚本中的-e、&和&& code review! 文章目录 Linux笔记之bash脚本中的-e、&和&&1.&和&&2.-e 1.&和&& 在Linux bash脚本中&#xff0c;&符号有几个不同的用途&#xff0c;这里列举了一些常见的情况&#xf…

文件IO讲解

&#x1f495;"跑起来就有意义"&#x1f495; 作者&#xff1a;Mylvzi 文章主要内容&#xff1a;文件IO讲解 一.与文件相关的基本概念 1.什么是文件 文件从广义上来说就是操作系统对其所持有的硬件设备和软件资源的抽象化表示,但是在日常生活中我们所提到的文件就…

三、Kotlin 类型初步

1. 类 & 接口 1.1 类的定义 1.1.1 空类的定义 Java 的定义&#xff1a; public class Foo {}Kotlin 的定义&#xff1a; class Foo注意&#xff1a; 类的访问权限修饰符默认为 public。 若类的 {} 为空&#xff0c;可以省略不写。 1.1.2 带成员的类的定义 Java 中定…

普通人如何打造自己人生的护城河?

哈喽&#xff0c;大家好啊&#xff0c;我是雷工。 今天在看《张一鸣管理日志》时看到这么一句话&#xff1a; 今日头条不断吸引更优秀的工程师&#xff0c;不断更新算法&#xff0c;才有了当前今日头条的算法护城河。 头条的算法有多牛&#xff0c;看你周边就知道了。 越来越多…

《剑指 Offer》专项突破版 - 面试题 28 : 展平多级双向链表(C++ 实现)

题目连接&#xff1a;LCR 028. 扁平化多级双向链表 - 力扣&#xff08;LeetCode&#xff09; 题目&#xff1a; 在一个多级双向链表中&#xff0c;节点除了有两个指针分别指向前后两个节点&#xff0c;还有一个指针指向它的子链表&#xff0c;并且子链表也是一个双向链表&…

CentOS7自动备份数据库到git

虽然数据库没什么数据&#xff0c;但是有就是珍贵的啦&#xff0c;为了服务器什么的无了&#xff0c;所以还是要自动备份一下比较好。 Open备忘第一页 步骤 在Gitee&#xff08;github&#xff09;上创建一个私有仓库Gitee&#xff08;github&#xff09;配置好服务器的ssh在服…

获取双异步返回值时,如何保证主线程不阻塞?

目录 一、前情提要二、JDK8的CompletableFuture1、ForkJoinPool2、从ForkJoinPool和ThreadPoolExecutor探索CompletableFuture和Future的区别 三、通过CompletableFuture优化 “通过Future获取异步返回值”1、通过Future获取异步返回值关键代码&#xff08;1&#xff09;将异步…

k8s的图形化工具--rancher

什么是rancher&#xff1f; rancher是一个开源的企业级多集群的k8s管理平台 rancher和k8s的区别 都是为了容器的调度和编排系统&#xff0c;但是rancher不仅能够调度&#xff0c;还能管理k8s集群&#xff0c;自带监控&#xff08;普罗米修斯&#xff09; 实验部署 实验架构…