基于SSM和MySQL实现的医院预约挂号系统

基于SSM和MySQL实现的医院预约挂号系统 1,项目简介 本系统使用SSM框架技术,实现病人在系统中进行医院的预约挂号功能,主要实现基于医院,科室,医生的前台挂号功能

本文包含相关资料包-----> 点击直达获取<-------

基于SSM和MySQL实现的医院预约挂号系统

1.项目简介

本系统使用SSM框架技术,实现病人在系统中进行医院的预约挂号功能。主要实现基于医院、科室、医生的前台挂号功能,相应的信息在数据库进行初始化数据,未提供信息的后台管理功能。用户关前台使用邮箱注册 后可以进行登陆,并向用户邮箱发送验证码后可以完善个人信息。个人登陆后可以在系统中进行预约挂号功能。

主要实现功能展示如下

用户注册功能

用户登陆

医院挂号

科室挂号

医生挂号

查看我的预约

最新公告

帮助中心

2.数据库设计

2.1 表结构

地区表

普通用户表

医生表

收藏表

反馈表

咨询表

范围表

医院表

通知表

预约订单表

2.2 E-R图

3.项目实现

3.1 工具类

MD5加密工具

java public static String getMD5(String message) { String md5str = ""; try { //1 创建一个提供信息摘要算法的对象,初始化为md5算法对象 MessageDigest md = MessageDigest.getInstance("MD5"); //2 将消息变成byte数组 byte[] input = message.getBytes(); //3 计算后获得字节数组,这就是那128位了 byte[] buff = md.digest(input); //4 把数组每一字节(一个字节占八位)换成16进制连成md5字符串 md5str = bytesToHex(buff); } catch (Exception e) { e.printStackTrace(); } return md5str; } /** * 二进制转十六进制 * @param bytes * @return */ public static String bytesToHex(byte[] bytes) { StringBuffer md5str = new StringBuffer(); //把数组每一字节换成16进制连成md5字符串 int digital; for (int i = 0; i < bytes.length; i++) { digital = bytes[i]; if(digital < 0) { digital += 256; } if(digital < 16){ md5str.append("0"); } md5str.append(Integer.toHexString(digital)); } return md5str.toString().toUpperCase(); } @Test public void testMD5(){ String message="123,123"; String result=getMD5(message); System.out.println(result); }

获取IP

java /** * 获取登录用户IP地址 */ public static String getIpAddr(HttpServletRequest request) { String ip = request.getHeader("x-forwarded-for"); if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("WL-Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); } if (ip.equals("0:0:0:0:0:0:0:1")) { ip = "127.0.0.1"; } return ip; }

时间工具类

java @Component public class DateUtil { private static final Logger log = LoggerFactory.getLogger(DateUtil.class); /** * 时间格式 */ public enum DateFormat{ YYYY_MM_DD_HH_mm_ss("yyyy-MM-dd HH:mm:ss"), YYYY_MM_DD("yyyy-MM-dd"), YYYYMMDDHHMMSS("yyyyMMddHHmmss"); private String value; DateFormat(String value){ this.value = value; } public String getValue(){ return this.value; } } /** * 当前时间 */ public String getCurrentTime(DateFormat format){ Date date = new Date();// 当前日期 SimpleDateFormat sdf = new SimpleDateFormat(format.getValue());// 格式化对象 return sdf.format(date); } /** * 格式化时间 */ public String getFormatTime(String time, DateFormat format){ SimpleDateFormat sdf = new SimpleDateFormat(format.getValue());// 格式化对象 Date date = null; try { date = sdf.parse(time); } catch (ParseException e) { e.printStackTrace(); } return date!=null?sdf.format(date):time; }

3.2 主要功能

```java /* * 医生主界面(推荐医生) / @RequestMapping(value = "/doctorIndex/{page}") public String officeIdex(Model model, @PathVariable("page") int page) { // 查询推荐的医院 List hospitalRe = hospitalService.findHosByRe(); // 设置页面 pageUtils.setCurrentPage(page); pageUtils.setTotalRecord(doctorService.findDoctorByReNum(hospitalRe)); int start; if (pageUtils.getCurrentPage() == 0) { start = 0; } else { start = pageUtils.getPageRecord() * (pageUtils.getCurrentPage() - 1); } Map doctorMap = new HashMap (); doctorMap.put("list", hospitalRe); doctorMap.put("start", start); doctorMap.put("size", pageUtils.getPageRecord()); List doctorRe = doctorService.findDoctorByRe(doctorMap); model.addAttribute("pages", pageUtils); model.addAttribute("doctorRe", doctorRe); return "doctor/doctorIndex"; }

/ * 医生详情 */ @RequestMapping(value = "/doctorInfoShow/{id}", method = RequestMethod.GET) public String hosInfoShow(Model model, @PathVariable(value = "id") int id) { Doctor doctor = doctorService.findDoctorById(id); Hospital hospital = hospitalService.findHosByName(doctor.getHospitalName()); model.addAttribute("hos", hospital); model.addAttribute("doctor", doctor); return "doctor/doctorInfoShow"; } / * 全部医生 */ @RequestMapping(value = "/allDoctor/{page}") public String orderOffcie(Model model, @PathVariable("page") int page, Doctor doctor) { // 将输入条件传回前台 CommonCondition commonCondition = new CommonCondition(); commonCondition.setHospitalName(doctor.getHospitalName()); commonCondition.setOfficesName(doctor.getOfficesName()); commonCondition.setDoctorName(doctor.getDoctorName()); commonCondition.setDoctorTitle(doctor.getDoctorTitle()); commonCondition.setDoctorDegree(doctor.getDoctorDegree()); commonCondition.setDoctorAdministrative(doctor.getDoctorAdministrative()); pageUtils.setCurrentPage(page); pageUtils.setTotalRecord(doctorService.findDoctorNum(doctor)); int start; if (pageUtils.getCurrentPage() == 0) { start = 0; } else { start = pageUtils.getPageRecord() * (pageUtils.getCurrentPage() - 1); } List doctorRe = doctorService.findDoctorByCondition(doctor, start, pageUtils.getPageRecord()); // 查询医生的职位 List doctorTitle = doctorService.findDoctorTitle(); List doctorAdministrative = doctorService.findDoctorAdministrative(); List doctorDegree = doctorService.findDoctorDegree(); model.addAttribute("pages", pageUtils); model.addAttribute("doctorRe", doctorRe); // 查询条件 model.addAttribute("commonCondition", commonCondition); // 将查询的医生职称传到前台 model.addAttribute("doctorTitle", doctorTitle); model.addAttribute("doctorAdministrative", doctorAdministrative); model.addAttribute("doctorDegree", doctorDegree); return "doctor/doctor"; } ```

3.3 订阅通知(预约提醒)

采用定时任务,通过邮件去提示用户准时到达医院。

Java @Scheduled(cron = "0 0/2 * * * ?") public void createWorkTime() { // 查找需要发送通知的订单 final List<OrderRecords> orderRecords = orderRecordsDao.findNeedNoticeOrder(); // 循环订单 for (int i = 0; i < orderRecords.size(); i++) { final CommonUser commonUser = commonUserDao.findCommonUserByUserId(orderRecords.get(i).getUserID()); final OrderRecords orderRecordInfo = orderRecords.get(i); // 单独开启线程发送邮件,防止用户等待时间过长,成功日志输出,失败也输出。 new Thread(new Runnable() { public void run() { boolean isSuccess = sendEmailCheck(commonUser, orderRecordInfo); if (isSuccess) { log.info(commonUser.getUserEmail() + "发送成功"); } else { log.info(commonUser.getUserEmail() + "发送失败"); } } }).start(); } } public boolean sendEmailCheck(CommonUser commonUser, OrderRecords orderRecords) { String contentInfo = commonUser.getUserName() + "您好:" + "\n<br>您预约的" + orderRecords.getHospitalName() + "-" + orderRecords.getOfficesName() + "-" + orderRecords.getDoctorName() + "医生的订单已成功通过审核" + "\n<br>请您持有效证件于" + orderRecords.getTransactDate() + "-" + orderRecords.getTransactTime() + "之前前往!"; String email = commonUser.getUserEmail(); log.info(email); String sender = "天津市医院预约系统"; String title = "天津市医院预约挂号【预约通知提醒】"; String content = contentInfo + "\n<br>天津市预约挂号系统。(项目测试)"; boolean isSuccess = mailUtil.sendMail(email, sender, title, content); if (isSuccess == true) { log.info("发送成功"); // commonUserDao.sendVerification(userEmail, verificationCode, // updateTime); orderRecordsDao.updateSendSuccess(orderRecords.getId()); return true; } else { log.info("发送失败"); orderRecordsDao.updateSendFailed(orderRecords.getId()); return false; } }

4.bug

因为时间预约信息是假数据,控制预约日历显示的代码在 data/index.js ,因为js写的有点bug出现不能显示的问题。

如果想要试试日历显示效果请修改代码:

var dp = new Datepicker($('.a'), year, month, day); 日期改为今天日期。例如: var dp = new Datepicker($('.a'),'1996', '03', '10');

  • 医院预约挂号系统,实现基本预约挂号,预留后台管理系统接口,时间数据为假数据

  • 提供医生科室医生查询

  • 使用ssm框架,maven管理依赖jar包

项目以做学习交流为目的。因为项目经验不足,项目可能会有很多潜在的问题,希望多多指教。目前邮箱暂停注册完善服务,可自行更换邮箱发送,项目目前暂停更新,感谢大家支持。

参考文献

  • 北京英才医疗集团预约诊疗系统(湖北工业大学·杨亚东)
  • 千佛山医院预约挂号系统的设计与实现(山东大学·郝庆美)
  • 基于B/S架构的预约挂号系统的设计与实现(天津工业大学·魏星)
  • 网上预约挂号系统的设计与实现(华中科技大学·游国强)
  • 基于PHP的智能预约挂号管理平台的设计与实现(北京邮电大学·陈世奇)
  • 高并发环境下智慧健康平台的设计与优化(河北大学·周政男)
  • 基于实名注册的预约挂号子系统的设计与实现(哈尔滨工业大学·崔志远)
  • 基于SQL Server的医院分诊预约的设计与开发(吉林大学·赵清晨)
  • 网上预约挂号系统的设计与实现(华中科技大学·游国强)
  • 基于J2ME/J2EE的移动预约挂号系统的设计与实现(苏州大学·任晓尘)
  • 医疗挂号系统服务端的设计与实现(北京邮电大学·郑朝杰)
  • 网上预约挂号系统的设计与实现(华中科技大学·游国强)
  • 基于J2ME/J2EE的移动预约挂号系统的设计与实现(苏州大学·任晓尘)
  • 基于PHP的智能预约挂号管理平台的设计与实现(北京邮电大学·陈世奇)
  • 基于SQL Server的医院分诊预约的设计与开发(吉林大学·赵清晨)

本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:毕设工厂 ,原文地址:https://m.bishedaima.com/yuanma/35482.html

相关推荐

发表回复

登录后才能评论