项目名称
基于java的预约挂号系统+文档
下载地址
视频演示
基于java的预约挂号系统_哔哩哔哩_bilibili
系统介绍
随着互联网技术的快速进步,我们的生活得到了极大的便利,同时也推动了许多行业的飞速发展。传统医院的挂号过程中,手动处理信息花费大量时间,这种方式效率极低。预约挂号系统的意义在于通过引入互联网技术,使预约挂号管理更加高效、便捷、透明,为医院和患者提供更好的服务。方便患者的就医体验,有利于医院信息化水平的提高,为推进国家医疗卫生信息化建设提供有力支持。
预约挂号系统采用成熟的SpringBoot框架,包括业务逻辑层、数据持久层、表示层和模块层四个层次。这些层次有助于开发人员搭建结构、维护系统、框架重用等,同时为开发人员提供清晰、易懂、简洁明了的设计思路。SpringBoot框架具有良好的可复用性和便于维护的特点,使系统更加实用,同时简化了系统实施和维护过程。数据库设计方面选择了MySQL数据库。
预约挂号系统的主要角色包括主治医生、门诊部医生、住院部医生和药品部护士。他们分别从医院总体数据管理、门诊挂号管理、住院部门管理和药房出药管理几个方面进行综合业务处理。
该系统完整实现了医院治疗流程中的管理、患者药品分配、患者手术项目、住院等业务。总体测试结果显示,该网站设计基本满足用户需求,能够达到用户满意度。
关键词:预约挂号;MySQL;患者住院;药房管理
3.1 需求分析
3.1.1 系统功能需求
各医疗机构中,绝大部分中小型医疗机构内部没有实现任何信息化管理,医院临床信息,业务流程的数据依然采取纸质记录,造成数据容易丢失,对医院造成重大损失。医院内部的挂号、收费、药房、药库、科室、病床的信息管理都存在缺漏,对患者的临床信息不能做到完整保存,高效查询,数据的容易出错、遗漏,造成换院治病难,医院不敢治,错过最佳治疗期等现状,对患者的治疗造成严重的影响,这些问题与医院信息化管理系统的建立实施目标基本一致。
作为一个集医学、信息、管理等多种学科的综合系统,实现更现代化、科学化、规范化的手段来加强医院的管理、提高医院的工作效率,改进医疗质量;它通过将人力资源、业务流程与专业技术进行有效的整合,使医院管理更有效、更高效,使患者能够得到及时的治疗和服务。
达到以上规定的系统软件主要包含下列模块
预约挂号管理模块:主治医生对系统的菜单、用户、角色等系统服务进行管理,对医院的统计信息进行查看,对系统的科室、医生、仓库、计量单位等基础信息进行管理,对医院排版进行管理,仓库进行管理。
门诊管理模块:门诊部医生对用户挂号、处分划价、项目划价、药品缴费、门诊患者进行管理。
住院管理模块:住院部医生对系统的入院登记、缴费管理、全身检查、药品记账、项目记账、出院结算等信息进行管理。
药房管理模块:药房部护士对医院的药房管理、门诊取药、住院取药进行管理。
系统功能需求图如下图 3-1 所示。
3.1.2 基础数据模块
系统管理:主治医生对菜单管理、角色管理、用户进行管理。
统计管理:主治医生查看门诊月度统计、住院月度统计、门诊年度统计、住院年度统计、医生统计对比、门诊当天收入。
数据中心:主治医生对医院基础信息进行管理科室中心、医生列表、药品产地、项目大类、挂号类型、仓库、经办人、计量单位、供货商、药品分类、药品字典。
基础数据模块图如图 3-2 所示。
图 3-2 预约挂号管理模块图
3.1.3 门诊管理模块
用户挂号:对患者进行挂号和列表查看。
处方划价:门诊部医生对患者进行药品选择和病因填写。
项目划价:门诊部医生对患者进行的手术项目进行选择。
项目缴费:门诊部医生对患者手术项目进行缴费。
项目检查:门诊部医生对患者进行检查。
药品缴费:门诊部医生对患者进行药品的缴费。
门诊患者库:门诊部医生管理门诊患者列表。
门诊管理模块图如图3-3 所示。
图3-3 门诊管理模块图
3.1.4 住院管理模块
入院登记:住院部医生对患者入院进行登记。
缴费管理:住院部医生对患者进行预交费管理。
全身检查:住院部医生对患者进行检查。
药品记账:住院部医生对患者药品进行记账。
项目记账:住院部医生对患者进行手术项目管理。
出院结算:住院部医生对患者出院结算进行管理。
住院管理模块功能图如图 3-4 所示。
图 3-4 住院管理模块功能图
3.1.5 药房管理模块
药房详情:药房部护士对医院药品详情进行查看。
门诊取药:药房部护士针对门诊患者取药。
住院取药:药房部护士针对住院患者取药。
药房管理模块功能图如图 3-5 所示。
环境需要
1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。
2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;
3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可
4.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS;
5.数据库:MySql 5.7版本;
6.是否Maven项目:否;
技术栈
- 后端:Spring+SpringMVC+Mybatis
- 前端:JSP+CSS+JavaScript+jQuery
使用说明
- 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件;
- 使用IDEA/Eclipse/MyEclipse导入项目,Eclipse/MyEclipse导入时,若为maven项目请选择maven;
若为maven项目,导入成功后请执行maven clean;maven install命令,然后运行; - 将项目中springmvc-servlet.xml配置文件中的数据库配置改为自己的配置;
- 运行项目,在浏览器中输入http://localhost:8080/ 登录
运行截图
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
用户管理控制层:
package com.houserss.controller;
import javax.servlet.http.HttpSession;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.houserss.common.Const;
import com.houserss.common.Const.Role;
import com.houserss.common.ServerResponse;
import com.houserss.pojo.User;
import com.houserss.service.IUserService;
import com.houserss.service.impl.UserServiceImpl;
import com.houserss.util.MD5Util;
import com.houserss.util.TimeUtils;
import com.houserss.vo.DeleteHouseVo;
import com.houserss.vo.PageInfoVo;
/**
- Created by admin
*/
@Controller
@RequestMapping("/user/")
public class UserController {
@Autowired
private IUserService iUserService;
/**
* 用户登录
* @param username
* @param password
* @param session
* @return
*/
@RequestMapping(value = "login.do",method = RequestMethod.POST)
@ResponseBody
public ServerResponse login(User user,String uvcode, HttpSession session){
String code = (String)session.getAttribute("validationCode");
if(StringUtils.isNotBlank(code)) {
if(!code.equalsIgnoreCase(uvcode)) {
return ServerResponse.createByErrorMessage("验证码不正确");
}
}
ServerResponse response = iUserService.login(user.getUsername(),user.getPassword());
if(response.isSuccess()){
session.setAttribute(Const.CURRENT_USER,response.getData());
}
return response;
}
}
管理员管理控制层:
package com.sxl.controller.admin;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import com.sxl.controller.MyController;
@Controller("adminController")
@RequestMapping(value = "/admin")
public class AdminController extends MyController {
@RequestMapping(value = "/index")
public String frame(Model model, HttpServletRequest request)throws Exception {
return "/admin/index";
}
@RequestMapping(value = "/main")
public String main(Model model, HttpServletRequest request)throws Exception {
return "/admin/main";
}
@RequestMapping(value = "/tj1")
public String tj1(Model model, HttpServletRequest request)throws Exception {
String sql="select DATE_FORMAT(insertDate,'%Y-%m-%d') dates,sum(allPrice) price from t_order order by DATE_FORMAT(insertDate,'%Y-%m-%d') desc";
List
}
修改密码业务逻辑:
package com.sxl.controller.admin;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import com.sxl.controller.MyController;
@Controller("userController")
@RequestMapping(value = "/user")
public class UserController extends MyController {
@RequestMapping(value = "/index")
public String frame(Model model, HttpServletRequest request)throws Exception {
return "/user/index";
}
@RequestMapping(value = "/main")
public String main(Model model, HttpServletRequest request)throws Exception {
return "/user/main";
}
@RequestMapping(value = "/password")
public String password(Model model, HttpServletRequest request)throws Exception {
return "/user/password";
}
@RequestMapping(value = "/changePassword")
public ResponseEntity loginSave(Model model,HttpServletRequest request,String oldPassword,String newPassword) throws Exception {
Map user = getUser(request);
if(oldPassword.equals(user.get("password").toString())){
String sql="update t_user set password=? where id=?";
db.update(sql, new Object[]{newPassword,user.get("id")});
return renderData(true,"1",null);
}else{
return renderData(false,"1",null);
}
}
@RequestMapping(value = "/mine")
public String mine(Model model, HttpServletRequest request)throws Exception {
Map user =getUser(request);Map map = db.queryForMap("select * from t_user where id=?",new Object[]{user.get("id")});model.addAttribute("map", map); return "/user/mine";
}
@RequestMapping(value = "/mineSave")
public ResponseEntity mineSave(Model model,HttpServletRequest request,Long id
,String username,String password,String name,String gh,String mobile) throws Exception{
int result = 0;
String sql="update t_user set name=?,gh=?,mobile=? where id=?";
result = db.update(sql, new Object[]{name,gh,mobile,id});
if(result==1){
return renderData(true,"操作成功",null);
}else{
return renderData(false,"操作失败",null);
}
}
}
通用管理模块:
package com.sxl.controller;
import java.nio.charset.Charset;
import java.util.Locale;
import java.util.ResourceBundle;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import com.sxl.util.JacksonJsonUtil;
import com.sxl.util.StringUtil;
import com.sxl.util.SystemProperties;
public class BaseController {
public static final Long EXPIRES_IN = 1000 * 3600 * 24 * 1L;// 1天
@Autowired
private SystemProperties systemProperties;
/**
* 获得配置文件内容
*/
public String getConfig(String key) {
return systemProperties.getProperties(key);
}
/**
* 返回服务器地址 like http://192.168.1.1:8441/UUBean/
*/
public String getHostUrl(HttpServletRequest request) {
String hostName = request.getServerName();
Integer hostPort = request.getServerPort();
String path = request.getContextPath();
if (hostPort == 80) {
return "http://" + hostName + path + "/";
} else {
return "http://" + hostName + ":" + hostPort + path + "/";
}
}
/***
* 获取当前的website路径 String
*/
public static String getWebSite(HttpServletRequest request) {
String returnUrl = request.getScheme() + "://"
+ request.getServerName();
if (request.getServerPort() != 80) {
returnUrl += ":" + request.getServerPort();
}
returnUrl += request.getContextPath();
return returnUrl;
}
/**
* 初始化HTTP头.
*
* @return HttpHeaders
*/
public HttpHeaders initHttpHeaders() {
HttpHeaders headers = new HttpHeaders();
MediaType mediaType = new MediaType("text", "html",
Charset.forName("utf-8"));
headers.setContentType(mediaType);
return headers;
}
/**
* 返回 信息数据
*
* @param status
* @param msg
* @return
*/
public ResponseEntity renderMsg(Boolean status, String msg) {
if (StringUtils.isEmpty(msg)) {
msg = "";
}
String str = "{\"status\":\"" + status + "\",\"msg\":\"" + msg + "\"}";
ResponseEntity responseEntity = new ResponseEntity(str,
initHttpHeaders(), HttpStatus.OK);
return responseEntity;
}
/**
* 返回obj数据
*
* @param status
* @param msg
* @param obj
* @return
*/
public ResponseEntity renderData(Boolean status, String msg,
Object obj) {
if (StringUtils.isEmpty(msg)) {
msg = "";
}
StringBuffer sb = new StringBuffer();
sb.append("{");
sb.append("\"status\":\"" + status + "\",\"msg\":\"" + msg + "\",");
sb.append("\"data\":" + JacksonJsonUtil.toJson(obj) + "");
sb.append("}");
ResponseEntity responseEntity = new ResponseEntity(
sb.toString(), initHttpHeaders(), HttpStatus.OK);
return responseEntity;
}
/***
* 获取IP(如果是多级代理,则得到的是一串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 != null && ip.length() > 0) {
String[] ips = ip.split(",");
for (int i = 0; i < ips.length; i++) {
if (!"unknown".equalsIgnoreCase(ips[i])) {
ip = ips[i];
break;
}
}
}
return ip;
}
/**
* 国际化获得语言内容
*
* @param key
* 语言key
* @param args
* @param argsSplit
* @param defaultMessage
* @param locale
* @return
*/
public static String getLanguage(String key, String args, String argsSplit,
String defaultMessage, String locale) {
String language = "zh";
String contry = "cn";
String returnValue = defaultMessage;
if (!StringUtil.isEmpty(locale)) {
try {
String[] localeArray = locale.split("_");
language = localeArray[0];
contry = localeArray[1];
} catch (Exception e) {
}
}
try {
ResourceBundle resource = ResourceBundle.getBundle("lang.resource",
new Locale(language, contry));
returnValue = resource.getString(key);
if (!StringUtil.isEmpty(args)) {
String[] argsArray = args.split(argsSplit);
for (int i = 0; i < argsArray.length; i++) {
returnValue = returnValue.replace("{" + i + "}",
argsArray[i]);
}
}
} catch (Exception e) {
}
return returnValue;
}
}