基于Spring Boot的医院预约挂号系统

目录

开发背景

如何设计

数据库设计表

系统功能

系统展示图

核心代码

文章目录

获取源码


开发背景

在互联网和信息技术的快速发展下,随着社会的进步和人们对健康的关注,医疗服务的需求不断增加。传统的医院挂号就诊方式存在排队时间长、挂号难等问题,而基于互联网的医院挂号就诊系统可以有效解决这些问题。

开发基于Spring Boot的医院预约挂号系统的背景是多方面的,主要包括以下几点:

  1. 医疗需求的增加:随着社会进步和人们对健康的关注,医疗服务需求不断增长,传统的线下挂号方式已无法满足人们日益增长的医疗服务需求。
  2. 传统挂号方式问题:传统的医院挂号方式存在诸多问题,如排队时间长、挂号难、信息不透明等,给患者和医生带来了不便,降低了就医效率和体验。
  3. 信息技术发展:互联网和信息技术的快速发展为解决传统挂号方式的问题提供了可能。通过在线预约挂号系统,患者可以方便快捷地选择就诊时间和医生,减少排队等候时间,提高就医效率和体验。
  4. 医疗资源配置优化:预约挂号系统可以实现医患之间的高效沟通和信息共享,优化医疗资源配置,提升医疗服务质量,改善患者就医体验。
  5. 系统性能与可靠性:Spring Boot框架的使用可以提高医院挂号系统的性能和可靠性,优化患者就诊体验,提高医疗资源的利用效率。
  6. 个性化服务需求:现代人越来越追求个性化需求,包括医疗服务。基于Spring Boot的医院预约挂号系统能够满足患者对便捷、高效、安全医疗服务的需求。
  7. 国内外研究现状:国外已有一些成熟的预约挂号系统应用案例,如Zocdoc、OpenTable等,国内也有挂号网、微医等平台,这些系统的研究和实践为本项目的开展提供了参考和借鉴。

综上所述,开发基于Spring Boot的医院预约挂号系统是为了解决传统挂号方式存在的问题,适应医疗需求增长的趋势,利用现代信息技术手段,提供便捷、高效、安全的医疗服务,优化医疗资源配置,提升医疗服务质量和患者就医体验。

如何设计

基于Spring Boot的医院预约挂号系统的设计可以分为以下几个步骤:

  1. 需求分析:明确系统的功能需求,包括用户注册登录、医生信息展示、预约挂号、取消预约、查看预约记录等。同时,确定系统的非功能需求,如性能、安全性、易用性等。
  2. 系统架构设计:选择合适的技术框架和开发工具,如Spring Boot、MyBatis、MySQL等。设计系统的整体架构,包括前端、后端、数据库等部分。
  3. 数据库设计:根据需求分析,设计数据库表结构,包括用户表、医生表、预约表等。确保数据库设计的合理性和完整性。
  4. 接口设计:定义前后端交互的接口,包括请求URL、请求方法、请求参数、响应结果等。确保接口设计的规范性和一致性。
  5. 前端设计:选择合适的前端框架和样式库,如Vue.js、Element UI等。设计前端页面的布局、样式、交互效果等。确保前端设计的美观性和易用性。
  6. 后端设计:编写后端代码,实现业务逻辑和数据处理。确保后端代码的稳定性和可扩展性。
  7. 测试与优化:对系统进行功能测试、性能测试、安全测试等,发现并修复问题。根据测试结果,对系统进行优化和改进。
  8. 部署与维护:将系统部署到服务器上,进行上线前的准备工作。在系统运行过程中,进行定期的维护和更新,确保系统的稳定运行。

在设计过程中,需要注意以下几点:

  1. 用户体验:关注用户需求和使用习惯,提供简洁明了的操作界面和流畅的交互体验。
  2. 安全性:保护用户隐私和数据安全,防止恶意攻击和数据泄露。
  3. 可扩展性:考虑未来可能的需求变化和系统升级,设计易于扩展和维护的系统架构。
  4. 性能优化:通过合理的设计和编码实践,提高系统的响应速度和处理能力。
  5. 团队协作:加强团队成员之间的沟通和协作,确保项目的顺利进行和按时交付。

数据库设计表

数据库表的设计,如下表:

表4-1留言板

字段名称

类型

长度

字段说明

主键

默认值

id

bigint

主键

主键

addtime

timestamp

创建时间

CURRENT_TIMESTAMP

userid

bigint

留言人id

username

varchar

200

用户名

content

longtext

4294967295

留言内容

cpicture

varchar

200

留言图片

reply

longtext

4294967295

回复内容

rpicture

varchar

200

回复图片

表4-2门诊信息

字段名称

类型

长度

字段说明

主键

默认值

id

bigint

主键

主键

addtime

timestamp

创建时间

CURRENT_TIMESTAMP

keshimingcheng

varchar

200

科室名称

keshileixing

varchar

200

科室类型

yishenggonghao

varchar

200

医生工号

yishengxingming

varchar

200

医生姓名

zhicheng

varchar

200

职称

guahaofei

int

挂号费

keyuerenshu

int

可约人数

shangbanriqi

date

上班日期

paibanbiao

longtext

4294967295

排班表

yishengjieshao

longtext

4294967295

医生介绍

keshitupian

varchar

200

科室图片

clicktime

datetime

最近点击时间

clicknum

int

点击次数

0

表4-3改约通知

字段名称

类型

长度

字段说明

主键

默认值

id

bigint

主键

主键

addtime

timestamp

创建时间

CURRENT_TIMESTAMP

biaoti

varchar

200

标题

tongzhineirong

longtext

4294967295

通知内容

tongzhishijian

date

通知时间

zhanghao

varchar

200

账号

xingming

varchar

200

姓名

系统功能

为了更好的去理清本系统整体思路,对该系统以结构图的形式表达出来,设计实现该医院预约挂号系统的功能结构图如下所示:

 

系统展示图

核心代码

package com.controller;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;

import com.utils.ValidatorUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.annotation.IgnoreAuth;

import com.entity.JiaowuchuEntity;
import com.entity.view.JiaowuchuView;

import com.service.JiaowuchuService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.CommonUtil;
import java.io.IOException;
import java.io.InputStream;
import org.springframework.web.multipart.MultipartFile;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;

/**
 * 教务处
 * 后端接口
 * @author 
 * @email 
 * @date 2022-02-23 15:48:42
 */
@RestController
@RequestMapping("/jiaowuchu")
public class JiaowuchuController {
    @Autowired
    private JiaowuchuService jiaowuchuService;


    
	@Autowired
	private TokenService tokenService;
	
	/**
	 * 登录
	 */
	@IgnoreAuth
	@RequestMapping(value = "/login")
	public R login(String username, String password, String captcha, HttpServletRequest request) {
		JiaowuchuEntity user = jiaowuchuService.selectOne(new EntityWrapper<JiaowuchuEntity>().eq("zhigongzhanghao", username));
		if(user==null || !user.getMima().equals(password)) {
			return R.error("账号或密码不正确");
		}
		
		String token = tokenService.generateToken(user.getId(), username,"jiaowuchu",  "教务处" );
		return R.ok().put("token", token);
	}
	
	/**
     * 注册
     */
	@IgnoreAuth
    @RequestMapping("/register")
    public R register(@RequestBody JiaowuchuEntity jiaowuchu){
    	//ValidatorUtils.validateEntity(jiaowuchu);
    	JiaowuchuEntity user = jiaowuchuService.selectOne(new EntityWrapper<JiaowuchuEntity>().eq("zhigongzhanghao", jiaowuchu.getZhigongzhanghao()));
		if(user!=null) {
			return R.error("注册用户已存在");
		}
		Long uId = new Date().getTime();
		jiaowuchu.setId(uId);
        jiaowuchuService.insert(jiaowuchu);
        return R.ok();
    }

	
	/**
	 * 退出
	 */
	@RequestMapping("/logout")
	public R logout(HttpServletRequest request) {
		request.getSession().invalidate();
		return R.ok("退出成功");
	}
	
	/**
     * 获取用户的session用户信息
     */
    @RequestMapping("/session")
    public R getCurrUser(HttpServletRequest request){
    	Long id = (Long)request.getSession().getAttribute("userId");
        JiaowuchuEntity user = jiaowuchuService.selectById(id);
        return R.ok().put("data", user);
    }
    
    /**
     * 密码重置
     */
    @IgnoreAuth
	@RequestMapping(value = "/resetPass")
    public R resetPass(String username, HttpServletRequest request){
    	JiaowuchuEntity user = jiaowuchuService.selectOne(new EntityWrapper<JiaowuchuEntity>().eq("zhigongzhanghao", username));
    	if(user==null) {
    		return R.error("账号不存在");
    	}
        user.setMima("123456");
        jiaowuchuService.updateById(user);
        return R.ok("密码已重置为:123456");
    }


    /**
     * 后端列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,JiaowuchuEntity jiaowuchu,
		HttpServletRequest request){
        EntityWrapper<JiaowuchuEntity> ew = new EntityWrapper<JiaowuchuEntity>();
		PageUtils page = jiaowuchuService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, jiaowuchu), params), params));

        return R.ok().put("data", page);
    }
    
    /**
     * 前端列表
     */
	@IgnoreAuth
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params,JiaowuchuEntity jiaowuchu, 
		HttpServletRequest request){
        EntityWrapper<JiaowuchuEntity> ew = new EntityWrapper<JiaowuchuEntity>();
		PageUtils page = jiaowuchuService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, jiaowuchu), params), params));
        return R.ok().put("data", page);
    }

	/**
     * 列表
     */
    @RequestMapping("/lists")
    public R list( JiaowuchuEntity jiaowuchu){
       	EntityWrapper<JiaowuchuEntity> ew = new EntityWrapper<JiaowuchuEntity>();
      	ew.allEq(MPUtil.allEQMapPre( jiaowuchu, "jiaowuchu")); 
        return R.ok().put("data", jiaowuchuService.selectListView(ew));
    }

	 /**
     * 查询
     */
    @RequestMapping("/query")
    public R query(JiaowuchuEntity jiaowuchu){
        EntityWrapper< JiaowuchuEntity> ew = new EntityWrapper< JiaowuchuEntity>();
 		ew.allEq(MPUtil.allEQMapPre( jiaowuchu, "jiaowuchu")); 
		JiaowuchuView jiaowuchuView =  jiaowuchuService.selectView(ew);
		return R.ok("查询教务处成功").put("data", jiaowuchuView);
    }
	
    /**
     * 后端详情
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        JiaowuchuEntity jiaowuchu = jiaowuchuService.selectById(id);
        return R.ok().put("data", jiaowuchu);
    }

    /**
     * 前端详情
     */
	@IgnoreAuth
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") Long id){
        JiaowuchuEntity jiaowuchu = jiaowuchuService.selectById(id);
        return R.ok().put("data", jiaowuchu);
    }
    



    /**
     * 后端保存
     */
    @RequestMapping("/save")
    public R save(@RequestBody JiaowuchuEntity jiaowuchu, HttpServletRequest request){
    	jiaowuchu.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(jiaowuchu);
    	JiaowuchuEntity user = jiaowuchuService.selectOne(new EntityWrapper<JiaowuchuEntity>().eq("zhigongzhanghao", jiaowuchu.getZhigongzhanghao()));
		if(user!=null) {
			return R.error("用户已存在");
		}
		jiaowuchu.setId(new Date().getTime());
        jiaowuchuService.insert(jiaowuchu);
        return R.ok();
    }
    
    /**
     * 前端保存
     */
    @RequestMapping("/add")
    public R add(@RequestBody JiaowuchuEntity jiaowuchu, HttpServletRequest request){
    	jiaowuchu.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(jiaowuchu);
    	JiaowuchuEntity user = jiaowuchuService.selectOne(new EntityWrapper<JiaowuchuEntity>().eq("zhigongzhanghao", jiaowuchu.getZhigongzhanghao()));
		if(user!=null) {
			return R.error("用户已存在");
		}
		jiaowuchu.setId(new Date().getTime());
        jiaowuchuService.insert(jiaowuchu);
        return R.ok();
    }

    /**
     * 修改
     */
    @RequestMapping("/update")
    public R update(@RequestBody JiaowuchuEntity jiaowuchu, HttpServletRequest request){
        //ValidatorUtils.validateEntity(jiaowuchu);
        jiaowuchuService.updateById(jiaowuchu);//全部更新
        return R.ok();
    }
    

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        jiaowuchuService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
    
    /**
     * 提醒接口
     */
	@RequestMapping("/remind/{columnName}/{type}")
	public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request, 
						 @PathVariable("type") String type,@RequestParam Map<String, Object> map) {
		map.put("column", columnName);
		map.put("type", type);
		
		if(type.equals("2")) {
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
			Calendar c = Calendar.getInstance();
			Date remindStartDate = null;
			Date remindEndDate = null;
			if(map.get("remindstart")!=null) {
				Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
				c.setTime(new Date()); 
				c.add(Calendar.DAY_OF_MONTH,remindStart);
				remindStartDate = c.getTime();
				map.put("remindstart", sdf.format(remindStartDate));
			}
			if(map.get("remindend")!=null) {
				Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
				c.setTime(new Date());
				c.add(Calendar.DAY_OF_MONTH,remindEnd);
				remindEndDate = c.getTime();
				map.put("remindend", sdf.format(remindEndDate));
			}
		}
		
		Wrapper<JiaowuchuEntity> wrapper = new EntityWrapper<JiaowuchuEntity>();
		if(map.get("remindstart")!=null) {
			wrapper.ge(columnName, map.get("remindstart"));
		}
		if(map.get("remindend")!=null) {
			wrapper.le(columnName, map.get("remindend"));
		}


		int count = jiaowuchuService.selectCount(wrapper);
		return R.ok().put("count", count);
	}
	





    @RequestMapping("/importExcel")
    public R importExcel(@RequestParam("file") MultipartFile file){
        try {
            //获取输入流
            InputStream inputStream = file.getInputStream();
            //创建读取工作簿
            Workbook workbook = WorkbookFactory.create(inputStream);
            //获取工作表
            Sheet sheet = workbook.getSheetAt(0);
            //获取总行
            int rows=sheet.getPhysicalNumberOfRows();
            if(rows>1){
                //获取单元格
                for (int i = 1; i < rows; i++) {
                    Row row = sheet.getRow(i);
                    JiaowuchuEntity jiaowuchuEntity =new JiaowuchuEntity();
                    jiaowuchuEntity.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
                    String zhigongzhanghao = CommonUtil.getCellValue(row.getCell(0));
                    jiaowuchuEntity.setZhigongzhanghao(zhigongzhanghao);
                    String mima = CommonUtil.getCellValue(row.getCell(1));
                    jiaowuchuEntity.setMima(mima);
                    String zhigongxingming = CommonUtil.getCellValue(row.getCell(2));
                    jiaowuchuEntity.setZhigongxingming(zhigongxingming);
                    String xingbie = CommonUtil.getCellValue(row.getCell(3));
                    jiaowuchuEntity.setXingbie(xingbie);
                    String zhiwu = CommonUtil.getCellValue(row.getCell(4));
                    jiaowuchuEntity.setZhiwu(zhiwu);
                    String shouji = CommonUtil.getCellValue(row.getCell(5));
                    jiaowuchuEntity.setShouji(shouji);
                    String youxiang = CommonUtil.getCellValue(row.getCell(6));
                    jiaowuchuEntity.setYouxiang(youxiang);
                     
                    //想数据库中添加新对象
                    jiaowuchuService.insert(jiaowuchuEntity);//方法
                }
            }
            inputStream.close();
        } catch (InvalidFormatException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return R.ok("导入成功");
    }


}

文章目录

  

第一章 概述

1.1 研究背景

1.2 开发意义

1.3 研究现状

1.4 研究内容

1.5 论文结构

第二章 开发技术介绍

2.1 系统开发平台

2.2 平台开发相关技术

2.2.1  Java技术

2.2.2  mysql数据库介绍

2.2.3  MySQL环境配置

2.2.4  B/S架构

2.2.5  JSP技术介绍

第三章 系统分析

3.1 可行性分析

3.1.1 技术可行性

3.1.2 操作可行性

3.1.3 经济可行性

3.2性能需求分析

3.3功能分析

第四章 系统设计

4.1功能结构

4.2 数据库设计

4.2.1 数据库E/R

4.2.2 数据库表

第五章 系统功能实现

5.1系统功能模块

5.2后台功能模块

5.2.1管理员功能模块

5.2.2医生功能模块

5.2.3用户功能模块

第六章 系统测试

第七章 总结与心得体会

7.1 总结

7.2 心得体会

  

参考文献

获取源码

大家点赞、收藏、关注、评论啦 、查看👇🏻获取联系方式👇🏻

 精彩专栏推荐订阅:在下方专栏👇🏻

《Spring Boot框架技术大合集》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值