基于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
/
* 医生详情
*/
@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
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