基于SSM+Layui实现医院预约挂号系统

简介: 基于SSM+Layui实现医院预约挂号系统

项目编号:BS-YL-010

基于SSM的医院在线预约挂号平台。前端使用layui框架。分为管理员、医生、患者三个角色,功能完善。适合练习java web开发,也可以用作课程设计和毕业设计。

运行环境

jdk8+tomcat9+mysql+IntelliJ IDEA+maven

项目技术(必填)

spring+spring mvc+mybatis+layui+jquery

下面展示一下系统的部分功能:

管理员登陆

image.png

我的面板: 主要包含个人信息查看、修改密码、登陆日志

image.png

医生管理

image.png

患者管理

image.png

公告管理

image.png

科室管理

image.png

用户注册

image.png

患者登陆

image.png

查看我的预约

image.png

患者信息管理

image.png

预约医师

image.png

image.png

医生登陆

image.png

查看预约患者

image.png

接诊管理

image.png

添加诊断病历

image.png

病历管理

image.png

个人信息管理

image.png

查看医院公告

image.png

package com.zhang.hospital.service;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.zhang.hospital.dao.AdminDao;
import com.zhang.hospital.dao.MenuDao;
import com.zhang.hospital.dao.RoleDao;
import com.zhang.hospital.dao.RoleMenuDao;
import com.zhang.hospital.entity.*;
import com.zhang.hospital.util.EncryptUtil;
import com.zhang.hospital.util.ResultUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.text.ParseException;
import java.util.*;
@Service
@Transactional
public class AdminServiceImpl implements AdminService
{
    @Autowired
    private AdminDao adminDao;
    @Autowired
    private RoleMenuDao roleMenuDao;
    @Autowired
    private MenuDao menuDao;
    @Autowired
    private RoleDao roleDao;
    //登录
    @Override
    public Admin login(String username, String password) {
        return adminDao.login(username,password);
    }
    //记录登录记录
    @Override
    public void insAdminLog(String username, String loginIp, Date loginTime,Date logoutTime,Integer isSafeExit)
    {
        adminDao.insAdminLog(username,loginIp,loginTime,logoutTime,isSafeExit);
    }
    //根据id查询admin
    @Override
    public Admin getAdminById(Integer id) {
        return adminDao.getAdminById(id);
    }
    //*******Menu相关的一些***//
    @Override
    public List<Menu> getMenus(Admin admin) {
        List<Menu> menuList=new ArrayList<>();
        Long roleId=admin.getRoleId();
        List<RoleMenu> roleMenus=roleMenuDao.selMenusByRoleId(roleId);
        //rolemenu里面就是一个中间表 将两个字段 roleId、 menuId 关联起来
        if(roleMenus!=null&&roleMenus.size()>0)
        {
            List<Menu> noChildrenMenus=new ArrayList<>();
            for(int i=0;i<roleMenus.size();i++)
            {
                Menu menu=menuDao.getMenuById(roleMenus.get(i).getMenuId()); //获取rolemenu中的menuId
                noChildrenMenus.add(menu); //就是根据这个登陆者的roleid 所拥有的菜单取出来
            }
            for(int i=0;i<noChildrenMenus.size();i++)
            {
                if(noChildrenMenus.get(i).getParentId()==0)
                    //说明这个菜单是一级菜单 没有上一级菜单
                    //如果这里不为0 表示这个菜单是二级菜单 或者三级菜单 ParentId对应了属于哪个上级菜单
                {
                    Menu menu=new Menu();
                    menu=noChildrenMenus.get(i); //把这个一级菜单取出来
                    List<Menu> menus=new ArrayList<>();
                    for(int j=0;j<noChildrenMenus.size();j++) //把所有菜单过一遍
                    {
                        //如果有菜单属于这个一级菜单
                        if(noChildrenMenus.get(j).getParentId()==noChildrenMenus.get(i).getMenuId())
                        {
                            Menu menu2=new Menu();
                            menu2=noChildrenMenus.get(j);//取出这个二级菜单
                            menus.add(menu2);
                        }
                    }
                    menu.setChildren(menus); //存放了属于这个一级菜单的所有二级菜单
                    menuList.add(menu);//存放了所有的一级菜单和其对应的所有二级菜单
                }
            }
        }
        //下面是根据menu的sorting进行排序 升序排列 这样左侧菜单就会按照升序排列
        Collections.sort(menuList, new Comparator<Menu>() {
            @Override
            public int compare(Menu o1, Menu o2) {
                return o1.getSorting().compareTo(o2.getSorting());
            }
        });
        return menuList;
    }
    @Override
    public ResultUtil getAdminList(Integer page, Integer limit)
    {
        //mybatis分页插件
        PageHelper.startPage(page,limit); //默认传过来的是1 和10
        //在需要进行分页的Mybatis方法前调用PageHelper.startPage静态方法即可,
        // 紧跟在这个方法后的第一个Mybatis查询方法会被进行分页。
        List<Admin> admins=adminDao.getAdminsList();
        //底层的sql语句是select * from admin  order by id
        //这里因为是sqlserver2012的新特性 分页查询的时候 必须要加上 order by
        //  前面有startPage 自动加上了分页查询的语句
        // Tomcat Localhost Log 会输出错误信息
        for(Admin admin:admins)
        {
            List<Role> roles=roleDao.selRoles();//取出所有的角色
            for(Role role:roles)
            {
                if(role.getRoleId()==admin.getRoleId())
                {
                    admin.setRoleName(role.getRoleName());
                    //这里查出管理员中的roleID然后设置下roleName
                }
            }
        }
        PageInfo<Admin> pageInfo=new PageInfo<Admin>(admins);
        ResultUtil resultUtil=new ResultUtil();
        resultUtil.setCode(0);//前段接收为0 代表成功
        resultUtil.setCount(pageInfo.getTotal());//代表数据库中总条数
        resultUtil.setData(pageInfo.getList()); //根据上面startPage设置的第几页 每页多少条 查询出的数据
        return resultUtil;
    }
    @Override
    public List<Role> getRoles() {
        return roleDao.selRoles();
    }
    @Override
    public ResultUtil getRoles(Integer page, Integer limit) {
        PageHelper.startPage(page,limit);
        List<Role> roles=roleDao.selRoles();
        PageInfo<Role> pageInfo=new PageInfo<Role>(roles);
        ResultUtil resultUtil=new ResultUtil();
        resultUtil.setCode(0);
        resultUtil.setCount(pageInfo.getTotal());
        resultUtil.setData(pageInfo.getList());
        return resultUtil;
    }
    @Override
    public void updAdmin(Admin admin)
    {
        adminDao.updAdmin(admin);
    }
    @Override
    public void delAdminById(Long id) {
        adminDao.delAdminById(id);
    }
    @Override
    public Admin getAdminByUsername(String username) {
        return adminDao.getAdminByUsername(username);
    }
    @Override
    public void insAdmin(Admin admin) {
        admin.setPassword(EncryptUtil.encrypt(admin.getPassword()));//加密
        adminDao.insAdmin(admin);
    }
    @Override
    public void delRole(Long roleId) {
        roleDao.delRole(roleId);
    }
    @Override
    public Role getRoleById(Long roleId) {
        return roleDao.getRoleById(roleId);
    }
    //根据角色展示菜单
    @Override
    public List<Menu> getXtreeData(Long roleId) {
        List<Menu> allMenus=menuDao.getAllMenus(); //获得所有的菜单
        if(!roleId.equals(Long.valueOf("-1")))//不是-1
        {
            List<RoleMenu> roleMenus=roleMenuDao.selMenusByRoleId(roleId); //选出此角色对应的菜单
            for(Menu menu:allMenus) //遍历所有菜单
            {
                for(RoleMenu roleMenu:roleMenus)
                {
                    if(roleMenu.getMenuId()==menu.getMenuId())
                    {
                        menu.setChecked("true"); //将所有菜单中 此角色有的菜单
                        // 设置为true状态 前面权限树,会体现出选中状态
                        //ztree会检查返回的数据中有没有 checked 属性 如果为true就会把这个节点设为选中状态
                    }
                }
            }
        }
        return allMenus;
    }
    @Override
    public Role getRoleByRoleName(String roleName) {
        return roleDao.getRoleByRoleName(roleName);
    }
    @Override
    public void updRole(Role role, String m) {
     roleDao.updateByKey(role);
     roleMenuDao.deleteMenusByRoleId(role.getRoleId()); //把roleId对应的菜单都删除
        if(m!=null&&m.length()!=0)
        {
            String [] result=m.split(",");
            //重新赋予权限
            if(result!=null&&result.length>0)
            {
                for(int i=0;i<result.length;i++)
                {
                    RoleMenu roleMenu=new RoleMenu();
                    roleMenu.setMenuId(Long.parseLong(result[i]));
                    roleMenu.setRoleId(role.getRoleId());
                    //插入一条数据
                    roleMenuDao.insert(roleMenu);
                }
            }
        }
    }
    @Override
    public void insRole(Role role, String m) {
        roleDao.insertRole(role); //插入一条新数据
        Role role2=roleDao.selectRoleByRoleName(role.getRoleName()); //把新插入的读出来
        if(m!=null&&m.length()!=0)
        {
            String [] result=m.split(",");
            if(result!=null&&result.length>0)
            {
                for(int i=0;i<result.length;i++)
                {
                    RoleMenu roleMenu=new RoleMenu();
                    roleMenu.setMenuId(Long.parseLong(result[i]));
                    roleMenu.setRoleId(role2.getRoleId());
                    roleMenuDao.insert(roleMenu);
                }
            }
        }
    }
    @Override
    public List<Menu> getAllMenus() {
        return menuDao.getAllMenus();
    }
    @Override
    public void updMenuSortingById(Menu menu) {
        Menu menu1=menuDao.getMenuById(menu.getMenuId()); //更新对象之前 先读出来
        menu1.setSorting(menu.getSorting()); //设置新的排序
        menuDao.updateMenuByKey(menu1); //更新
    }
    @Override
    public Menu getMenuById(Long menuId) {
        return menuDao.getMenuById(menuId);
    }
    @Override
    public List<Menu> checkNameSameLevel(Menu menus) {
        return menuDao.checkNameSameLevel(menus);
    }
    @Override
    public void insMenu(Menu menus) {
        menuDao.insMenu(menus);
    }
    @Override
    public void updMenu(Menu menus) {
        menuDao.updateMenu(menus);
    }
    @Override
    public List<Menu> getMenusByParentId(Long menuId) {
        return menuDao.getMenuByParentId(menuId);
    }
    @Override
    public void delMenuById(Long menuId) {
        menuDao.delMenuById(menuId);
        roleMenuDao.deleteMenuByMenuId(menuId);
    }
    @Override
    public List<RoleMenu> getRoleMenuByMenuId(Long menuId) {
        return roleMenuDao.getRoleMenuByMenuId(menuId);
    }
    @Override
    public AdminLog getAdminLogByUsername(String username) {
        return adminDao.getAdminLogByUsername(username);
    }
    @Override
    public void updateAdminLog(AdminLog adminLog) {
        adminDao.updateAdminLog(adminLog);
    }
    @Override
    public AdminLog getAdminLogByLoginTime(Date loginTime) {
        return adminDao.getAdminLogByLoginTime(loginTime);
    }
    @Override
    public ResultUtil getAdminLogList(Integer page, Integer limit) throws ParseException {
        List<AdminLog> adminLogList=new ArrayList<>();
        //带分页的查询 sql server 中 select 语句必须有 order by
        PageHelper.startPage(page,limit);
        List<AdminLog> adminLogs=adminDao.getAdminLogsList();
        PageInfo<AdminLog> pageInfo=new PageInfo<>(adminLogs);
        ResultUtil resultUtil=new ResultUtil();
        resultUtil.setCode(0);
        resultUtil.setCount(pageInfo.getTotal()-1); //不显示最后一条数据
        //不显示最后一条登陆信息 因为是正在登陆
        adminLogList.addAll(pageInfo.getList().subList(0,pageInfo.getList().size()-1));
        resultUtil.setData(adminLogList);
        return resultUtil;
    }
}
package com.zhang.hospital.service;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.zhang.hospital.dao.MenuDao;
import com.zhang.hospital.dao.RoleMenuDao;
import com.zhang.hospital.dao.UserDao;
import com.zhang.hospital.entity.*;
import com.zhang.hospital.util.ResultUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
@Service
@Transactional
public class UserServiceImpl implements UserService
{
    @Autowired
    private UserDao userDao;
    @Autowired
    private RoleMenuDao roleMenuDao;
    @Autowired
    private MenuDao menuDao;
    @Override
    public void insUser(User user) {
        userDao.insUser(user);
    }
    @Override
    public User login(String username, String password) {
        return userDao.login(username,password);
    }
    @Override
    public List<Menu> getMenus(User user1)
    {
        List<Menu> menuList=new ArrayList<>();
        Long roleId=user1.getRoleId();
        List<RoleMenu> roleMenus=roleMenuDao.selMenusByRoleId(roleId);
        //rolemenu是一个中间表 两个字段 roleId menuId 关联起来
        if(roleMenus!=null&&roleMenus.size()>0)
        {
            List<Menu> noChildrenMenus=new ArrayList<>();
            for(int i=0;i<roleMenus.size();i++)
            {
                Menu menu=menuDao.getMenuById(roleMenus.get(i).getMenuId()); //获取rolemenu中的menuId
                noChildrenMenus.add(menu); //根据登陆者的roleid 所拥有的菜单取出来
            }
            for(int i=0;i<noChildrenMenus.size();i++)
            {
                if(noChildrenMenus.get(i).getParentId()==0)
                //说明这个菜单是一级菜单 没有上一级菜单
                //如果这里不为0 表示这个菜单是二级菜单 或者三级菜单 ParentId对应了属于哪个上级菜单
                {
                    Menu menu=new Menu();
                    menu=noChildrenMenus.get(i); //把这个一级菜单取出来
                    List<Menu> menus=new ArrayList<>();
                    for(int j=0;j<noChildrenMenus.size();j++) //把所有菜单过一遍
                    {
                        //如果有菜单属于这个一级菜单
                        if(noChildrenMenus.get(j).getParentId()==noChildrenMenus.get(i).getMenuId())
                        {
                            Menu menu2=new Menu();
                            menu2=noChildrenMenus.get(j);//取出这个二级菜单
                            menus.add(menu2);
                        }
                    }
                    menu.setChildren(menus); //存放了属于这个一级菜单的所有二级菜单
                    menuList.add(menu);//存放了所有的一级菜单和其对应的所有二级菜单
                }
            }
        }
        //下面是根据menu的sorting进行排序 升序排列 这样左侧菜单就会按照升序排列
        Collections.sort(menuList, new Comparator<Menu>() {
            @Override
            public int compare(Menu o1, Menu o2) {
                return o1.getSorting().compareTo(o2.getSorting());
            }
        });
        return menuList;
    }
    @Override
    public User getUserById(Integer user_id) {
        return userDao.getUserById(user_id);
    }
    @Override
    public ResultUtil updateUser(User user) {
        userDao.updateUser(user);
        return ResultUtil.ok();
    }
    @Override
    public User getUsertByUserName(String username) {
        return userDao.getUserByUserName(username);
    }
    @Override
    public ResultUtil getAllUserList(Integer page, Integer limit, UserSearch search) {
        PageHelper.startPage(page,limit);
        List<User> users=userDao.getAllUserList(search);
        PageInfo<User> pageInfo=new PageInfo<>(users);
        ResultUtil resultUtil=new ResultUtil();
        resultUtil.setCode(0);
        resultUtil.setCount(pageInfo.getTotal());
        resultUtil.setData(pageInfo.getList());
        return resultUtil;
    }
    @Override
    public ResultUtil updateUserStatusById(int user_id, int status) {
         userDao.updateUserStatusById(user_id,status);
         return ResultUtil.ok();
    }
    @Override
    public ResultUtil deleteUserById(int user_id) {
        userDao.deleteUserById(user_id);
        return ResultUtil.ok();
    }
}
相关文章
|
3月前
|
Java 数据库连接 Maven
手把手教你如何搭建SSM框架、图书商城系统案例
这篇文章是关于如何搭建SSM框架以及实现一个图书商城系统的详细教程,包括了项目的配置文件整合、依赖管理、项目结构和运行效果展示,并提供了GitHub源码链接。
手把手教你如何搭建SSM框架、图书商城系统案例
|
2月前
|
Java 应用服务中间件 数据库连接
ssm项目整合,简单的用户管理系统
文章介绍了一个使用SSM框架(Spring、SpringMVC、MyBatis)构建的简单用户管理系统的整合过程,包括项目搭建、数据库配置、各层代码实现以及视图展示。
ssm项目整合,简单的用户管理系统
|
2月前
|
XML Java 数据库连接
如何搭建SSM框架、图书商城系统
这是一份详尽的《Spring + SpringMVC + Mybatis 整合指南》,作者耗时良久整理出约五万字的内容,现已经全部笔记公开。此文档详细地介绍了如何搭建与整合SSM框架,具体步骤包括创建Maven项目、添加web骨架、配置pom文件以及整合Spring、SpringMVC和Mybatis等。无论是对初学者还是有一定基础的开发者来说,都是很好的学习资源。此外,作者还提供了项目源码的GitHub链接,方便读者实践。虽然当前主流推荐学习SpringBoot,但了解SSM框架仍然是不可或缺的基础。
36 0
|
3月前
|
SQL Java 应用服务中间件
使用SSM搭建图书商城管理系统(完整过程介绍、售后服务哈哈哈)
这篇文章是关于如何使用SSM框架搭建图书商城管理系统的教程,包括完整过程介绍、常见问题解答和售后服务,提供了项目地址、运行环境配置、效果图展示以及运行代码的步骤。
使用SSM搭建图书商城管理系统(完整过程介绍、售后服务哈哈哈)
|
4月前
|
存储 关系型数据库 测试技术
基于ssm+vue的校园驿站管理系统+(源码+部署说明+演示视频+源码介绍)(2)
基于ssm+vue的校园驿站管理系统+(源码+部署说明+演示视频+源码介绍)
68 1
|
4月前
|
安全 数据挖掘 测试技术
基于SSM+Vue的家居商城系统(源码+部署说明+演示视频)(2)
基于SSM+Vue的家居商城系统(源码+部署说明+演示视频)
72 0
|
4月前
|
Java 关系型数据库 MySQL
基于SSM+Vue的家居商城系统(源码+部署说明+演示视频)(1)
基于SSM+Vue的家居商城系统(源码+部署说明+演示视频)
65 0
|
5月前
|
搜索推荐 JavaScript Java
计算机Java项目|基于SSM的个性化商铺系统
计算机Java项目|基于SSM的个性化商铺系统
|
5月前
|
前端开发 JavaScript Java
计算机Java项目|SSM智能仓储系统
计算机Java项目|SSM智能仓储系统
|
5月前
|
Java 物联网 Maven
基于SSM+layui【爱车汽车租赁管理系统】附源码+论文
基于SSM+layui【爱车汽车租赁管理系统】附源码+论文
88 1
基于SSM+layui【爱车汽车租赁管理系统】附源码+论文