[免费]微信小程序医院预约挂号管理系统(uni-app+SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序医院预约挂号管理系统(uni-app+SpringBoot后端+Vue管理端),分享下哈。
项目视频演示
【免费】微信小程序医院预约挂号管理系统(uni-app+SpringBoot后端+Vue管理端) Java毕业设计_哔哩哔哩_bilibili
项目介绍
本毕业设计的内容是设计并且实现一个基于java技术的医院预约挂号管理系统。它是在Windows下,以MYSQL为数据库开发平台,java技术和Tomcat网络信息服务作为应用服务器。医院预约挂号管理系统的功能已基本实现,主要实现首页、个人中心、用户管理、专家管理、科室类型管理、科室信息管理、预约信息管理、取消信息管理、系统管理等功能的操作系统。
论文主要从系统的分析与设计、数据库设计和系统的详细设计等几个方面来进行论述,系统分析与设计部分主要论述了系统的功能分析、系统的设计思路,数据库设计主要论述了数据库的设计,系统的详细设计部分主要论述了几个主要模块的详细设计过程。
系统展示
部分代码
package cn.test.hospital.service.impl;import cn.test.hospital.common.security.AccountDetails;
import cn.test.hospital.common.security.JwtTokenUtil;
import cn.test.hospital.dto.param.PowerAccountRegisterParam;
import cn.test.hospital.dto.param.PowerAccountStatusParam;
import cn.test.hospital.dto.param.UserRegisterParam;
import cn.test.hospital.entity.*;
//import cn.test.hospital.hospital.entity.*;
import cn.test.hospital.mapper.PowerAccountMapper;
import cn.test.hospital.mapper.PowerAccountRoleRelationMapper;
import cn.test.hospital.mapper.dao.PowerAccountRoleRelationDao;
import cn.test.hospital.service.ILogAccountLoginService;
import cn.test.hospital.service.IPowerAccountService;
import cn.test.hospital.service.IUserBasicInfoService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Optional;/*** @author admin*/@Service
public class PowerAccountServiceImpl implements IPowerAccountService {private static final Logger LOGGER = LoggerFactory.getLogger(PowerAccountServiceImpl.class);/*** 一个空格字符*/private static final String BLANK_SPACE = " ";@Resourceprivate JwtTokenUtil jwtTokenUtil;@Resourceprivate PasswordEncoder passwordEncoder;@Value("${jwt.tokenHead}")private String tokenHead;@Resourceprivate UserDetailsService userDetailsService;@Resourceprivate PowerAccountMapper accountMapper;@Resourceprivate PowerAccountRoleRelationDao accountRoleRelationDao;@Resourceprivate PowerAccountRoleRelationMapper accountRoleRelationMapper;@Resourceprivate ILogAccountLoginService logAccountLoginService;@Resourceprivate IUserBasicInfoService userBasicInfoService;/*** 获取帐号信息** @param name 帐号名* @return 帐号信息*/@Overridepublic Optional<PowerAccount> getByName(String name) {PowerAccountExample example = new PowerAccountExample();example.createCriteria().andNameEqualTo(name);return Optional.ofNullable(accountMapper.selectByExample(example).get(0));}/*** 刷新token** @param oldToken 原来的token* @return 新token*/@Overridepublic String refreshToken(String oldToken) {return jwtTokenUtil.refreshHeadToken(oldToken);}/*** 判断用户名是否已使用** @param name 用户名* @return 是否存在*/@Overridepublic boolean count(String name) {PowerAccountExample example = new PowerAccountExample();example.createCriteria().andNameEqualTo(name);return accountMapper.countByExample(example) > 0;}/*** 判断用户是否存在** @param id 用户编号* @return 是否存在*/@Overridepublic boolean count(Long id) {PowerAccountExample example = new PowerAccountExample();example.createCriteria().andIdEqualTo(id);return accountMapper.countByExample(example) > 0;}/*** 注册普通用户账号** @param param 用户账号注册参数(账号,密码)* @return 是否成功*/@Overridepublic boolean registerUser(UserRegisterParam param) {PowerAccount account = new PowerAccount();account.setName(param.getPhone());account.setPassword(passwordEncoder.encode(param.getPassword()));account.setStatus(1);account.setGmtCreate(new Date());account.setGmtModified(new Date());if (accountMapper.insertSelective(account) > 0) {if (userBasicInfoService.insert(param)) {return true;} else {// 注册失败删除账号信息delete(param.getPhone());return false;}}return false;}/*** 管理账号注册功能** @param param 账号注册参数(账号,密码)* @return 是否成功*/@Overridepublic boolean registerAdmin(PowerAccountRegisterParam param) {PowerAccount account = new PowerAccount();account.setName(param.getName());account.setPassword(passwordEncoder.encode(param.getPassword()));account.setStatus(1);account.setGmtCreate(new Date());account.setGmtModified(new Date());return accountMapper.insertSelective(account) > 0;}/*** 登录后返回 jwt 字符串** @param name 帐号名* @param password 密码* @return 生成的JWT的token*/@Overridepublic Optional<String> login(String name, String password) {String jwt = null;// 客户端加密后传递账号密码try {UserDetails userDetails = userDetailsService.loadUserByUsername(name);// 密码不正确if (!passwordEncoder.matches(password, userDetails.getPassword())) {LOGGER.info("user :{} login fail , wrong password .", name);throw new BadCredentialsException("密码不正确");}UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(userDetails,null, userDetails.getAuthorities());SecurityContextHolder.getContext().setAuthentication(authentication);String token = jwtTokenUtil.generateToken(userDetails);// 这里需要记录登录时间updateLoginTime(name);logAccountLoginService.insert(name);// 注意中间用空格隔开jwt = tokenHead + BLANK_SPACE + token;} catch (AuthenticationException e) {LOGGER.warn("user :{} , login fail :{}", name, e.getMessage());}return Optional.ofNullable(jwt);}/*** 检查密码是否正确** @param id 账号编号* @param password 账号密码* @return 是否正确*/@Overridepublic boolean checkPassword(Long id, String password) {PowerAccount account = accountMapper.selectByPrimaryKey(id);return passwordEncoder.matches(password, account.getPassword());}/*** 删除账号** @param name 账号名* @return 是否成功*/@Overridepublic boolean delete(String name) {PowerAccountExample example = new PowerAccountExample();example.createCriteria().andNameEqualTo(name);return accountMapper.deleteByExample(example) > 0;}/*** 更新账号状态** @param param 账号编号、账号状态(1:开启,0:关闭)* @return 是否成功*/@Overridepublic boolean updateStatus(PowerAccountStatusParam param) {PowerAccount account = new PowerAccount();account.setId(param.getAccountId());account.setStatus(param.getStatus());account.setPassword(null);account.setGmtModified(new Date());return accountMapper.updateByPrimaryKeySelective(account) > 0;}/*** 修改用户角色关系** @param accountId 帐号id* @param roleIdList 角色id列表* @return 成功记录*/@Overridepublic int updateRole(Long accountId, List<Long> roleIdList) {int count = roleIdList == null ? 0 : roleIdList.size();//先删除原来的关系PowerAccountRoleRelationExample accountRoleRelationExample = new PowerAccountRoleRelationExample();accountRoleRelationExample.createCriteria().andAccountIdEqualTo(accountId);accountRoleRelationMapper.deleteByExample(accountRoleRelationExample);//建立新关系if (!CollectionUtils.isEmpty(roleIdList)) {List<PowerAccountRoleRelation> list = new ArrayList<>();for (Long roleId : roleIdList) {PowerAccountRoleRelation roleRelation = new PowerAccountRoleRelation();roleRelation.setAccountId(accountId);roleRelation.setRoleId(roleId);list.add(roleRelation);}accountRoleRelationDao.insertList(list);}return count;}/*** 更新密码** @param accountId 帐号编号* @param password 密码* @return 更新结果*/@Overridepublic boolean updatePassword(Long accountId, String password) {PowerAccount account = new PowerAccount();account.setId(accountId);account.setPassword(passwordEncoder.encode(password));account.setGmtModified(new Date());return accountMapper.updateByPrimaryKeySelective(account) > 0;}/*** 通过用户账号名称,获取用户详情** @param userName 用户账号名称* @return 用户详情*/@Overridepublic UserDetails loadUserByUserName(String userName) {Optional<PowerAccount> accountOptional = getByName(userName);if (accountOptional.isPresent()) {PowerAccount account = accountOptional.get();List<PowerResource> resourceList = listResource(account.getId());return new AccountDetails(account, resourceList);}throw new UsernameNotFoundException("用户名或密码错误!");}/*** 通过账号编号,获取资源列表** @param accountId 账号编号* @return 资源列表*/@Overridepublic List<PowerResource> listResource(Long accountId) {return accountRoleRelationDao.getResourceList(accountId);}/*** 更新最后登录时间** @param name 用户名称*/@Overridepublic void updateLoginTime(String name) {Optional<PowerAccount> accountOptional = getByName(name);// 账号存在if (accountOptional.isPresent()) {PowerAccount account = accountOptional.get();account.setPassword(null);account.setLoginTime(new Date());accountMapper.updateByPrimaryKeySelective(account);}}}
<template><div class="background"><el-form :model="ruleForm2" :rules="rules2" ref="ruleForm2" label-position="left"label-width="0px" class="demo-ruleForm login-container login-background"><h3 class="title">挂号系统后台管理中心</h3><el-form-item prop="username"><el-input type="text" v-model="ruleForm2.username" auto-complete="off"placeholder="账号" suffix-icon="el-icon-user-solid"></el-input></el-form-item><el-form-item prop="password"><el-input type="password" v-model="ruleForm2.password" auto-complete="off"placeholder="密码" suffix-icon="el-icon-lock"></el-input></el-form-item><el-checkbox v-model="checked" checked class="remember">记住密码</el-checkbox><el-form-item style="width:100%;"><el-button type="primary" style="width:100%;" @click="handleSubmit2" :loading="loading">登录</el-button></el-form-item></el-form></div>
</template><script>import {getCookie, setCookie} from "@/utils/cookies";import {getPermission} from "@/permission";import {getToken} from "@/utils/auth";export default {name: "login",data(){return{loading: false,ruleForm2: {username: '',password: ''},rules2: {username: [{ required: true, message: '请输入账号',trigger: 'blur'}],password: [{required: true,message: '请输入密码',trigger: 'blur'}]},checked: false,redirect: undefined}},watch: {$route: {handler: function(route) {this.redirect = route.query && route.query.redirect},immediate: true}},methods: {handleSubmit2(ev) {var _this = this;_this.$refs.ruleForm2.validate((valid) => {if (valid) {_this.loading = true;// 实现登录this.$store.dispatch('Login', this.ruleForm2).then(() => {if (this.checked) {setCookie("username",this.ruleForm2.username,15);setCookie("password",this.ruleForm2.password,15);}_this.$router.push({path: this.redirect || '/home'});_this.loading = false}).catch(() => {_this.loading = false;_this.$alert('用户名或密码错误!', '提示信息', {confirmButtonText: '确定'});})} else {console.log('error submit!!');return false;}});}},created() {this.ruleForm2.username = getCookie('username');this.ruleForm2.password = getCookie('password');if(this.ruleForm2.username === undefined||this.ruleForm2.username==null||this.ruleForm2.username===''){this.ruleForm2.username = 'admin';}if(this.ruleForm2.password === undefined||this.ruleForm2.password==null){this.ruleForm2.password = '';}}}
</script><style scoped>.background{width: 100%;height: 100%;background: url("../.././assets/background.jpg") no-repeat;background-size: 100% 100%;position: fixed;top: 0px;left: 0px;}.login-container{-webkit-border-radius: 5px;border-radius: 5px;-moz-border-radius: 5px;background-clip: padding-box;margin: 180px auto;width: 350px;padding: 35px 35px 15px;background: #BED2F5;/*border: 1px solid #eaeaea;*/box-shadow: 0 0 25px #A7BBD4;}label.el-checkbox.remember {margin: 0px 0px 30px 0px;}.title{color: #ffffff;}
</style>
源码下载
链接:https://pan.baidu.com/s/1zn70zMBz6Mmf_Kvg0O7avA
提取码:1234
相关文章:

[免费]微信小程序医院预约挂号管理系统(uni-app+SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序医院预约挂号管理系统(uni-appSpringBoot后端Vue管理端),分享下哈。 项目视频演示 【免费】微信小程序医院预约挂号管理系统(uni-appSpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩…...

【网络入侵检测】基于源码分析Suricata的IP分片重组
【作者主页】只道当时是寻常 【专栏介绍】Suricata入侵检测。专注网络、主机安全,欢迎关注与评论。 目录 目录 1.概要 2. 配置信息 2.1 名词介绍 2.2 defrag 配置 3. 代码实现 3.1 配置解析 3.1.1 defrag配置 3.1.2 主机系统策略 3.2 分片重组模块 3.2.1…...
Spring框架请求注解
Spring框架请求注解 1.RequestParam 作用:从请求的 查询参数(Query Parameters) 或 表单数据(Form Data) 中提取参数。适用场景: GET 请求的 URL 参数(如 /users?nameTom&age20ÿ…...

LVGL简易计算器实战
文章目录 📁 文件结构建议🔹 eval.h 表达式求值头文件🔹 eval.c 表达式求值实现文件(带详细注释)🔹 ui.h 界面头文件🔹 ui.c 界面实现文件🔹 main.c 主函数入口✅ 总结 项目效果&…...
【FMMT】基于模糊多模态变压器模型的个性化情感分析
遇到很难的文献看不懂,不应该感到气馁,应该激动,因为外审估计也看不太懂,那么学明白了可以吓唬他 缺陷一:输入依赖性与上下文建模不足 缺陷描述: 传统自注意力机制缺乏因果关系,难以捕捉序列历史背景多模态数据间的复杂依赖关系未被充分建模CNN/RNN类模型在…...
聊一聊接口测试依赖第三方服务变更时如何处理?
目录 一、依赖隔离与模拟 二、契约测试 三、版本控制与兼容性 四、变更监控与告警 五、容错设计 六、自动化测试维护 七、协作机制与文档自动化 第三方API突然改了参数或者返回结构,导致我们的测试用例失败,这时候该怎么办呢?首先想到…...

代码随想录算法训练营第60期第三十四天打卡
大家好,我们今天的内容依旧是贪心算法,我们上次的题目主要是围绕多维问题,那种时候我们需要分开讨论,不要一起并发进行很容易顾此失彼,那么我们今天的问题主要是重叠区间问题,又是一种全新的贪心算法思想&a…...
Midscene.js Chrome 插件实战:基于 AI 驱动 WEB UI 自动化测试「喂饭教程」
Midscene.js Chrome 插件实战:基于 AI 驱动 WEB UI 自动化测试「喂饭教程」 前言一、Midscene.js 简介二、环境准备与插件安装1. 安装 Chrome 插件2. 配置模型与 API Key三、插件界面与功能总览四、实战演练:用自然语言驱动网页自动化1. 典型场景一(Action):账号登录步骤一…...
JVM——方法内联之去虚化
引入 在Java虚拟机的即时编译体系中,方法内联是提升性能的核心手段,但面对虚方法调用(invokevirtual/invokeinterface)时,即时编译器无法直接内联,必须先进行去虚化(Devirtualizationÿ…...
Objective-C Block 底层原理深度解析
Objective-C Block 底层原理深度解析 1. Block 是什么? 1.1 Block 的本质 Block 是 Objective-C 中的特殊对象,实现了匿名函数的功能 通过 isa 指针继承自 NSObject,可以响应(如 copy、retain、release)等内存管理方…...

关于IDE的相关知识之二【插件推荐】
成长路上不孤单😊😊😊😊😊😊 【14后😊///计算机爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于ide插件推荐的相关内容!…...
Python+Streamlit实现登录页
PythonStreamlit实现登录页 Streamlit 是一个开源的 Python 库,专为数据科学家和机器学习工程师设计,用于快速构建交互式 Web 应用。 其核心功能与特点包括: 1.快速原型开发 2.交互式数据展示 3.极简开发 4.实时更新 5.内置组件 6.无前端依赖…...
RDD案例数据清洗
在 Spark 中,RDD(Resilient Distributed Dataset)是分布式数据集的基本抽象。数据清洗是数据预处理中的一个重要步骤,通常包括去除重复数据、过滤无效数据、转换数据格式等操作。以下是一个使用 RDD 进行数据清洗的完整示例。 示…...
按键精灵ios脚本新增元素功能助力辅助工具开发(三)
元素节点功能(iOSElement) 在按键精灵 iOS 新版 APP v2.2.0 中,新增了元素节点功能 iOSElement,该功能包含共 15 个函数。这一功能的出现,为开发者在处理 iOS 应用界面元素时提供了更为精准和高效的方式。通过这些函…...

Axure RP9:列表新增
文章目录 列表新增思路新增按钮操作说明保存新增交互设置列表新增 思路 利用中继器新增行实现列表新增功能 新增按钮操作说明 工具栏中添加新增图标及标签,在图标标签基础上添加热区;对热区添加鼠标单击时交互事件,同步插入如下动作:显示/隐藏动作,设置目标元件为新增窗…...

06 mysql之DML
一、什么是DML DML 用于操作数据库中的数据。主要命令包括: INSERT:添加数据SELECT:查询数据UPDATE:修改数据DELETE:删除数据 二、插入数据(INSERT) 2.1 插入单条记录 -- 插入学生记录&…...
游戏引擎学习第277天:稀疏实体系统
回顾并为今天定下基调 上次我们结束的时候,基本上已经控制住了跳跃的部分,达到了我想要的效果,现在我们主要是在等待一些新的艺术资源。因此,等新艺术资源到位后,我们可能会重新处理跳跃的部分,因为现在的…...

【最新版】likeshop连锁点餐系统-PHP版+uniapp前端全开源
一.系统介绍 likeshop外卖点餐系统适用于茶饮类的外卖点餐场景,搭建自己的一点点、奈雪、喜茶点餐系统。 系统基于总部多门店的连锁模式,拥有门店独立管理后台,支持总部定价和门店定价LBS定位点餐,可堂食可外卖。无论运营还是二开…...
机器学习之决策树模型:从基础概念到条件类型详解
机器学习之决策树模型:从基础概念到条件类型详解 摘要:本文深入探讨决策树模型的概念、构成以及不同条件类型。首先介绍决策树的基本结构和工作原理,随后详细阐述轴心对齐条件与倾斜条件、二元条件与非二元条件的差异及应用场景,…...
网络编程(一)网络编程入门
本节课学习TCP客户端和服务器端编程架构,其分为分为C/S(客户端/服务器模式)和B/S(浏览器/服务器架构模式)两种模式。接下来我们分别了解这两种模式 C/S模式 C/S模式:服务器首先先启动,并根据客…...
黑名单中的随机数-leetcode710
题目描述 给定一个整数 n 和一个 无重复 黑名单整数数组 blacklist 。设计一种算法,从 [0, n - 1] 范围内的任意整数中选取一个 未加入 黑名单 blacklist 的整数。任何在上述范围内且不在黑名单 blacklist 中的整数都应该有 同等的可能性 被返回。 优化你的算法&am…...

纯Java实现反向传播算法:零依赖神经网络实战
在深度学习框架泛滥的今天,理解算法底层实现变得愈发重要。反向传播(Backpropagation)作为神经网络训练的基石算法,其实现往往被各种框架封装。本文将突破常规,仅用Java标准库实现完整BP算法,帮助开发者: 1) 深入理解BP数学原理。2) 掌握面向对象的神经网络实现。3) 构建可…...

海纳思(Hi3798MV300)机顶盒遇到海思摄像头
海纳思机顶盒遇到海思摄像头,正好家里有个海思Hi3516的摄像头模组开发板,结合机顶盒来做个录像。 准备工作 海纳斯机顶盒摄像机模组两根网线、两个电源、路由器一块64G固态硬盘 摄像机模组和机顶盒都接入路由器的LAN口,确保网络正常通信。 …...
MCP项目实例 - client sever交互
1. 项目概述 项目目标 构建一个本地智能舆论分析系统。 利用自然语言处理和多工具协作,实现用户查询意图的自动理解。 进行新闻检索、情绪分析、结构化输出和邮件推送。 系统流程 用户查询:用户输入查询请求。 提取关键词:从用户查询中…...

Axure应用交互设计:表格跟随菜单移动效果(超长表单)
亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢!本文如有帮助请订阅 Axure产品经理精品视频课已登录CSDN可点击学习https://edu.csdn.net/course/detail/40420 课程主题:表格跟随菜单移动 主要内容:表格交互设计、动态面板嵌套、拖动时事件、移动动作 应用场景…...

7系列 之 I/O标准和终端技术
背景 《ug471_7Series_SelectIO.pdf》介绍了Xilinx 7 系列 SelectIO 的输入/输出特性及逻辑资源的相关内容。 第 1 章《SelectIO Resources》介绍了输出驱动器和输入接收器的电气特性,并通过大量实例解析了各类标准接口的实现。 第 2 章《SelectIO Logic Resource…...

github 上的 CI/CD 的尝试
效果 步骤 新建仓库设置仓库的 page 新建一个 vite 的项目,改一下 vite.config.js 中的 base 工作流 在项目的根目录下新建一个 .github/workflows/ci.yml 文件,然后编辑一下内容 name: Build & Deploy Vue 3 Appon:push:branches: [main]permi…...
Scala和Go差异
Scala和Go(又称Golang)是两种现代编程语言,各自具有独特的特性和设计哲学。 尽管它们都可以用于构建高性能、可扩展的应用程序,但在许多方面存在显著差异。 Scala和Go的详细比较,涵盖它们的异同点: 1. 语…...

yup 使用 3 - 利用 meta 实现表单字段与表格列的统一结构配置(适配 React Table)
yup 使用 3 - 利用 meta 实现表单字段与表格列的统一结构配置(适配 React Table) Categories: Tools Last edited time: May 11, 2025 7:45 PM Status: Done Tags: form validation, schema design, yup 本文介绍如何通过 Yup 的 meta() 字段࿰…...
类初始化方法
一、类初始化方法 成员初始化列表 class Point {int x, y; public:Point(int a, int b) : x(a), y(b) {} };就地初始化(C11) 声明时初始化。 class Widget {int size 10; // 类内成员初始化vector<int> data{1,2,3}; };特殊情况:静…...