当前位置: 首页 > news >正文

计算机毕业设计 社区医疗服务系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌
🍅文末获取源码联系🍅
👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟
————————————————
计算机毕业设计《1000套》✌

目录

1、项目介绍及开发技术

1.1 项目介绍

1.2 开发技术

2、系统功能设计结构图

3、功能截图

3.1 前台功能

3.2 后台功能

4、数据库表结构设计

5、关键代码

5.1 挂号Controller模块 

5.2 挂号Service模块 

5.3 挂号ServiceImpl模块

5.4  挂号Dao模块

6、论文目录结构

7、源码获取


1、项目介绍及开发技术

1.1 项目介绍

在当前社会,随着人们健康意识的增强和医疗需求的多样化,社区医疗服务作为公共医疗体系的重要组成部分,其作用日益凸显。然而,传统的社区医疗服务模式存在诸多不便,如信息不对称、服务效率低下、资源分配不均等问题,这些问题限制了社区医疗服务的进一步发展。为了解决这些问题,提升社区医疗服务的质量和效率,我们设计并开发了一个社区医疗服务系统。

背景:
社区医疗服务系统旨在通过数字化手段,为社区居民提供更加便捷、高效的医疗服务。随着互联网技术的普及,越来越多的服务开始向线上转移,医疗健康服务也不例外。社区居民对于在线咨询、预约挂号、健康管理等方面的需求日益增长,这要求社区医疗服务必须与时俱进,利用现代信息技术提供更好的服务。

目的意义:

  • 1. 提升服务效率:系统通过提供在线预约挂号、咨询等功能,减少了居民前往医疗机构的时间和精力,提高了服务效率。
  • 2. 优化资源配置:系统能够根据居民的医疗需求和医生的专业特长,合理分配医疗资源,提高资源利用效率。
  • 3. 增强互动交流:通过论坛和留言板功能,居民可以与其他用户和医生进行交流,分享医疗经验,增强社区的凝聚力。
  • 4. 提高健康意识:防范指南模块为用户提供了丰富的健康知识,帮助居民提高健康意识和自我保健能力。
  • 5. 支持决策制定:系统收集的用户数据和反馈信息,为医疗机构提供了决策支持,有助于优化服务流程和提高服务质量。

综上所述,社区医疗服务系统的设计与实现,不仅能够为社区居民提供一个全面、便捷的医疗服务平台,还能够为医疗机构提供一个高效、智能的管理工具。通过技术手段优化社区医疗服务流程,该系统有望成为推动社区医疗服务创新的重要力量,为提升居民健康水平和生活质量做出贡献。

1.2 开发技术

类别技术名称用途/描述
开发语言Java一种广泛使用的面向对象编程语言。
框架Spring Boot简化Spring应用的初始搭建以及开发过程。
ORM工具MyBatis PlusMyBatis的增强工具,简化CRUD操作。
数据库MySQL流行的关系型数据库管理系统。
构建工具Maven项目管理和理解工具。
开发工具IDEA集成开发环境,用于代码编写和调试。
JDK版本JDK 1.8+Java开发工具包,提供运行Java程序所需的环境。
前端框架Vue用于构建用户界面的渐进式JavaScript框架。
UI框架Element UI基于Vue的桌面端组件库。
前端技术HTML网页内容的标准标记语言。
前端技术CSS描述HTML文档的样式。
前端技术JS网页脚本语言,用于实现网页的动态效果。

2、系统功能设计结构图

功能模块结构图

├── 前端
│   ├── 登录
│   ├── 注册
│   ├── 首页
│   ├── 论坛
│   ├── 留言板
│   ├── 社区公告
│   ├── 医生
│   │   ├── 立即挂号
│   │   └── 咨询
│   ├── 防范指南
│   └── 个人中心
│       ├── 个人信息
│       ├── 医生收藏
│       ├── 医生评价
│       ├── 挂号
│       ├── 防范指南收藏
│       └── 防范指南留言

└── 后端
    ├── 登录
    ├── 首页
    ├── 个人中心
    ├── 管理员管理
    ├── 用户管理
    ├── 医生管理
    ├── 挂号管理
    ├── 防范指南管理
    ├── 基础数据管理
    ├── 论坛管理
    ├── 留言板管理
    └── 社区公告管理
        └── 轮播图信息管理

系统MVC框架,请求流程展示:

3、功能截图

3.1 前台功能

3.2 后台功能

 

 

4、数据库表结构设计

CREATE TABLE `news` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',`news_name` varchar(200) DEFAULT NULL COMMENT '公告标题  Search111 ',`news_types` int(11) DEFAULT NULL COMMENT '公告类型  Search111 ',`news_photo` varchar(200) DEFAULT NULL COMMENT '公告图片',`insert_time` timestamp NULL DEFAULT NULL COMMENT '添加时间',`news_content` longtext COMMENT '公告详情',`create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间 show1 show2 nameShow',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8 COMMENT='社区公告';DROP TABLE IF EXISTS `users`;CREATE TABLE `users` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',`username` varchar(100) NOT NULL COMMENT '医院名',`password` varchar(100) NOT NULL COMMENT '密码',`role` varchar(100) DEFAULT '管理员' COMMENT '角色',`addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '新增时间',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='管理员';DROP TABLE IF EXISTS `yisheng_commentback`;CREATE TABLE `yisheng_commentback` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',`yisheng_id` int(11) DEFAULT NULL COMMENT '医生',`yonghu_id` int(11) DEFAULT NULL COMMENT '用户',`yisheng_commentback_text` longtext COMMENT '评价内容',`insert_time` timestamp NULL DEFAULT NULL COMMENT '评价时间',`reply_text` longtext COMMENT '回复内容',`update_time` timestamp NULL DEFAULT NULL COMMENT '回复时间',`create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间 show3 listShow',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8 COMMENT='医生评价';/*Table structure for table `yisheng_yuyue` */DROP TABLE IF EXISTS `yisheng_yuyue`;CREATE TABLE `yisheng_yuyue` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键 ',`yisheng_id` int(11) DEFAULT NULL COMMENT '医生',`yonghu_id` int(11) DEFAULT NULL COMMENT '用户',`yisheng_yuyue_uuid_number` varchar(200) DEFAULT NULL COMMENT '就诊识别码',`yisheng_yuyue_time` date DEFAULT NULL COMMENT '挂号时间 Search111',`time_types` int(11) DEFAULT NULL COMMENT '时间类型 Search111',`yisheng_yuyue_types` int(11) DEFAULT NULL COMMENT '挂号状态',`create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间 show3 listShow',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8 COMMENT='挂号';DROP TABLE IF EXISTS `yonghu`;CREATE TABLE `yonghu` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',`username` varchar(200) DEFAULT NULL COMMENT '账户',`password` varchar(200) DEFAULT NULL COMMENT '密码',`yonghu_name` varchar(200) DEFAULT NULL COMMENT '用户名称 Search111 ',`yonghu_phone` varchar(200) DEFAULT NULL COMMENT '用户手机号',`yonghu_id_number` varchar(200) DEFAULT NULL COMMENT '用户身份证号',`yonghu_photo` varchar(200) DEFAULT NULL COMMENT '用户头像',`sex_types` int(11) DEFAULT NULL COMMENT '性别 Search111',`yonghu_email` varchar(200) DEFAULT NULL COMMENT '用户邮箱',`new_money` decimal(10,2) DEFAULT NULL COMMENT '余额 ',`yonghu_delete` int(11) DEFAULT NULL COMMENT '逻辑删除',`insert_time` timestamp NULL DEFAULT NULL COMMENT '添加时间',`create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='用户';DROP TABLE IF EXISTS `zhinan`;CREATE TABLE `zhinan` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键 ',`zhinan_uuid_number` varchar(200) DEFAULT NULL COMMENT '指南编号',`zhinan_name` varchar(200) DEFAULT NULL COMMENT '指南标题  Search111 ',`zhinan_photo` varchar(200) DEFAULT NULL COMMENT '指南图片',`zhinan_video` varchar(200) DEFAULT NULL COMMENT '指南视频',`zhinan_types` int(11) DEFAULT NULL COMMENT '指南类型 Search111',`zhinan_clicknum` int(11) DEFAULT NULL COMMENT '指南热度',`zan_number` int(11) DEFAULT NULL COMMENT '赞',`cai_number` int(11) DEFAULT NULL COMMENT '踩',`zhinan_content` longtext COMMENT '指南介绍 ',`zhinan_delete` int(11) DEFAULT NULL COMMENT '逻辑删除',`insert_time` timestamp NULL DEFAULT NULL COMMENT '录入时间',`create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间  show1 show2 photoShow',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8 COMMENT='防范指南';/*Table structure for table `zhinan_collection` */DROP TABLE IF EXISTS `zhinan_collection`;CREATE TABLE `zhinan_collection` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',`zhinan_id` int(11) DEFAULT NULL COMMENT '指南',`yonghu_id` int(11) DEFAULT NULL COMMENT '用户',`zhinan_collection_types` int(11) DEFAULT NULL COMMENT '类型',`insert_time` timestamp NULL DEFAULT NULL COMMENT '收藏时间',`create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间 show3 photoShow',PRIMARY KEY (`id`)
) DROP TABLE IF EXISTS `zhinan_liuyan`;CREATE TABLE `zhinan_liuyan` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',`zhinan_id` int(11) DEFAULT NULL COMMENT '指南',`yonghu_id` int(11) DEFAULT NULL COMMENT '用户',`zhinan_liuyan_text` longtext COMMENT '留言内容',`insert_time` timestamp NULL DEFAULT NULL COMMENT '留言时间',`reply_text` longtext COMMENT '回复内容',`update_time` timestamp NULL DEFAULT NULL COMMENT '回复时间',`create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间 show3 listShow',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8 COMMENT='指南留言';

5、关键代码

5.1 挂号Controller模块 

package com.controller;import java.io.File;
import java.math.BigDecimal;
import java.net.URL;
import java.text.SimpleDateFormat;import com.alibaba.fastjson.JSONObject;import java.util.*;import org.springframework.beans.BeanUtils;import javax.servlet.http.HttpServletRequest;import org.springframework.web.context.ContextLoader;import javax.servlet.ServletContext;import com.service.TokenService;
import com.utils.*;import java.lang.reflect.InvocationTargetException;import com.service.DictionaryService;
import org.apache.commons.lang3.StringUtils;
import com.annotation.IgnoreAuth;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.entity.*;
import com.entity.view.*;
import com.service.*;
import com.utils.PageUtils;
import com.utils.R;
import com.alibaba.fastjson.*;/*** 挂号* 后端接口** @author* @email*/
@RestController
@Controller
@RequestMapping("/yishengYuyue")
public class YishengYuyueController {private static final Logger logger = LoggerFactory.getLogger(YishengYuyueController.class);private static final String TABLE_NAME = "yishengYuyue";@Autowiredprivate YishengYuyueService yishengYuyueService;@Autowiredprivate TokenService tokenService;@Autowiredprivate DictionaryService dictionaryService;//字典@Autowiredprivate ForumService forumService;//论坛@Autowiredprivate LiuyanService liuyanService;//留言板@Autowiredprivate NewsService newsService;//社区公告@Autowiredprivate YishengService yishengService;//医生@Autowiredprivate YishengChatService yishengChatService;//用户咨询@Autowiredprivate YishengCollectionService yishengCollectionService;//医生收藏@Autowiredprivate YishengCommentbackService yishengCommentbackService;//医生评价@Autowiredprivate YonghuService yonghuService;//用户@Autowiredprivate ZhinanService zhinanService;//防范指南@Autowiredprivate ZhinanCollectionService zhinanCollectionService;//指南收藏@Autowiredprivate ZhinanLiuyanService zhinanLiuyanService;//指南留言@Autowiredprivate UsersService usersService;//管理员/*** 后端列表*/@RequestMapping("/page")public R page(@RequestParam Map<String, Object> params, HttpServletRequest request) {logger.debug("page方法:,,Controller:{},,params:{}", this.getClass().getName(), JSONObject.toJSONString(params));String role = String.valueOf(request.getSession().getAttribute("role"));if (false)return R.error(511, "永不会进入");else if ("用户".equals(role))params.put("yonghuId", request.getSession().getAttribute("userId"));else if ("医生".equals(role))params.put("yishengId", request.getSession().getAttribute("userId"));CommonUtil.checkMap(params);PageUtils page = yishengYuyueService.queryPage(params);//字典表数据转换List<YishengYuyueView> list = (List<YishengYuyueView>) page.getList();for (YishengYuyueView c : list) {//修改对应字典表字段dictionaryService.dictionaryConvert(c, request);}return R.ok().put("data", page);}/*** 后端详情*/@RequestMapping("/info/{id}")public R info(@PathVariable("id") Long id, HttpServletRequest request) {logger.debug("info方法:,,Controller:{},,id:{}", this.getClass().getName(), id);YishengYuyueEntity yishengYuyue = yishengYuyueService.selectById(id);if (yishengYuyue != null) {//entity转viewYishengYuyueView view = new YishengYuyueView();BeanUtils.copyProperties(yishengYuyue, view);//把实体数据重构到view中//级联表 医生//级联表YishengEntity yisheng = yishengService.selectById(yishengYuyue.getYishengId());if (yisheng != null) {BeanUtils.copyProperties(yisheng, view, new String[]{"id", "createTime", "insertTime", "updateTime", "yonghuId", "yishengId"});//把级联的数据添加到view中,并排除id和创建时间字段,当前表的级联注册表view.setYishengId(yisheng.getId());}//级联表 用户//级联表YonghuEntity yonghu = yonghuService.selectById(yishengYuyue.getYonghuId());if (yonghu != null) {BeanUtils.copyProperties(yonghu, view, new String[]{"id", "createTime", "insertTime", "updateTime", "yonghuId", "yishengId"});//把级联的数据添加到view中,并排除id和创建时间字段,当前表的级联注册表view.setYonghuId(yonghu.getId());}//修改对应字典表字段dictionaryService.dictionaryConvert(view, request);return R.ok().put("data", view);} else {return R.error(511, "查不到数据");}}/*** 后端保存*/@RequestMapping("/save")public R save(@RequestBody YishengYuyueEntity yishengYuyue, HttpServletRequest request) {logger.debug("save方法:,,Controller:{},,yishengYuyue:{}", this.getClass().getName(), yishengYuyue.toString());String role = String.valueOf(request.getSession().getAttribute("role"));if (false)return R.error(511, "永远不会进入");else if ("用户".equals(role))yishengYuyue.setYonghuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));else if ("医生".equals(role))yishengYuyue.setYishengId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));Wrapper<YishengYuyueEntity> queryWrapper = new EntityWrapper<YishengYuyueEntity>().eq("yisheng_id", yishengYuyue.getYishengId()).eq("yonghu_id", yishengYuyue.getYonghuId()).eq("yisheng_yuyue_time", new SimpleDateFormat("yyyy-MM-dd").format(yishengYuyue.getYishengYuyueTime())).eq("time_types", yishengYuyue.getTimeTypes()).eq("yisheng_yuyue_types", yishengYuyue.getYishengYuyueTypes());logger.info("sql语句:" + queryWrapper.getSqlSegment());YishengYuyueEntity yishengYuyueEntity = yishengYuyueService.selectOne(queryWrapper);if (yishengYuyueEntity == null) {yishengYuyue.setCreateTime(new Date());yishengYuyueService.insert(yishengYuyue);return R.ok();} else {return R.error(511, "表中有相同数据");}}/*** 后端修改*/@RequestMapping("/update")public R update(@RequestBody YishengYuyueEntity yishengYuyue, HttpServletRequest request) throws NoSuchFieldException, ClassNotFoundException, IllegalAccessException, InstantiationException {logger.debug("update方法:,,Controller:{},,yishengYuyue:{}", this.getClass().getName(), yishengYuyue.toString());YishengYuyueEntity oldYishengYuyueEntity = yishengYuyueService.selectById(yishengYuyue.getId());//查询原先数据String role = String.valueOf(request.getSession().getAttribute("role"));
//        if(false)
//            return R.error(511,"永远不会进入");
//        else if("用户".equals(role))
//            yishengYuyue.setYonghuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));
//        else if("医生".equals(role))
//            yishengYuyue.setYishengId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));yishengYuyueService.updateById(yishengYuyue);//根据id更新return R.ok();}/*** 删除*/@RequestMapping("/delete")public R delete(@RequestBody Integer[] ids, HttpServletRequest request) {logger.debug("delete:,,Controller:{},,ids:{}", this.getClass().getName(), ids.toString());List<YishengYuyueEntity> oldYishengYuyueList = yishengYuyueService.selectBatchIds(Arrays.asList(ids));//要删除的数据yishengYuyueService.deleteBatchIds(Arrays.asList(ids));return R.ok();}/*** 批量上传*/@RequestMapping("/batchInsert")public R save(String fileName, HttpServletRequest request) {logger.debug("batchInsert方法:,,Controller:{},,fileName:{}", this.getClass().getName(), fileName);Integer yonghuId = Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId")));SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//.eq("time", new SimpleDateFormat("yyyy-MM-dd").format(new Date()))try {List<YishengYuyueEntity> yishengYuyueList = new ArrayList<>();//上传的东西Map<String, List<String>> seachFields = new HashMap<>();//要查询的字段Date date = new Date();int lastIndexOf = fileName.lastIndexOf(".");if (lastIndexOf == -1) {return R.error(511, "该文件没有后缀");} else {String suffix = fileName.substring(lastIndexOf);if (!".xls".equals(suffix)) {return R.error(511, "只支持后缀为xls的excel文件");} else {URL resource = this.getClass().getClassLoader().getResource("static/upload/" + fileName);//获取文件路径File file = new File(resource.getFile());if (!file.exists()) {return R.error(511, "找不到上传文件,请联系管理员");} else {List<List<String>> dataList = PoiUtil.poiImport(file.getPath());//读取xls文件dataList.remove(0);//删除第一行,因为第一行是提示for (List<String> data : dataList) {//循环YishengYuyueEntity yishengYuyueEntity = new YishengYuyueEntity();
//                            yishengYuyueEntity.setYishengId(Integer.valueOf(data.get(0)));   //医生 要改的
//                            yishengYuyueEntity.setYonghuId(Integer.valueOf(data.get(0)));   //用户 要改的
//                            yishengYuyueEntity.setYishengYuyueUuidNumber(data.get(0));                    //就诊识别码 要改的
//                            yishengYuyueEntity.setYishengYuyueTime(sdf.parse(data.get(0)));          //挂号时间 要改的
//                            yishengYuyueEntity.setTimeTypes(Integer.valueOf(data.get(0)));   //时间类型 要改的
//                            yishengYuyueEntity.setYishengYuyueTypes(Integer.valueOf(data.get(0)));   //挂号状态 要改的
//                            yishengYuyueEntity.setCreateTime(date);//时间yishengYuyueList.add(yishengYuyueEntity);//把要查询是否重复的字段放入map中//就诊识别码if (seachFields.containsKey("yishengYuyueUuidNumber")) {List<String> yishengYuyueUuidNumber = seachFields.get("yishengYuyueUuidNumber");yishengYuyueUuidNumber.add(data.get(0));//要改的} else {List<String> yishengYuyueUuidNumber = new ArrayList<>();yishengYuyueUuidNumber.add(data.get(0));//要改的seachFields.put("yishengYuyueUuidNumber", yishengYuyueUuidNumber);}}//查询是否重复//就诊识别码List<YishengYuyueEntity> yishengYuyueEntities_yishengYuyueUuidNumber = yishengYuyueService.selectList(new EntityWrapper<YishengYuyueEntity>().in("yisheng_yuyue_uuid_number", seachFields.get("yishengYuyueUuidNumber")));if (yishengYuyueEntities_yishengYuyueUuidNumber.size() > 0) {ArrayList<String> repeatFields = new ArrayList<>();for (YishengYuyueEntity s : yishengYuyueEntities_yishengYuyueUuidNumber) {repeatFields.add(s.getYishengYuyueUuidNumber());}return R.error(511, "数据库的该表中的 [就诊识别码] 字段已经存在 存在数据为:" + repeatFields.toString());}yishengYuyueService.insertBatch(yishengYuyueList);return R.ok();}}}} catch (Exception e) {e.printStackTrace();return R.error(511, "批量插入数据异常,请联系管理员");}}/*** 前端列表*/@IgnoreAuth@RequestMapping("/list")public R list(@RequestParam Map<String, Object> params, HttpServletRequest request) {logger.debug("list方法:,,Controller:{},,params:{}", this.getClass().getName(), JSONObject.toJSONString(params));CommonUtil.checkMap(params);PageUtils page = yishengYuyueService.queryPage(params);//字典表数据转换List<YishengYuyueView> list = (List<YishengYuyueView>) page.getList();for (YishengYuyueView c : list)dictionaryService.dictionaryConvert(c, request); //修改对应字典表字段return R.ok().put("data", page);}/*** 前端详情*/@RequestMapping("/detail/{id}")public R detail(@PathVariable("id") Long id, HttpServletRequest request) {logger.debug("detail方法:,,Controller:{},,id:{}", this.getClass().getName(), id);YishengYuyueEntity yishengYuyue = yishengYuyueService.selectById(id);if (yishengYuyue != null) {//entity转viewYishengYuyueView view = new YishengYuyueView();BeanUtils.copyProperties(yishengYuyue, view);//把实体数据重构到view中//级联表YishengEntity yisheng = yishengService.selectById(yishengYuyue.getYishengId());if (yisheng != null) {BeanUtils.copyProperties(yisheng, view, new String[]{"id", "createDate"});//把级联的数据添加到view中,并排除id和创建时间字段view.setYishengId(yisheng.getId());}//级联表YonghuEntity yonghu = yonghuService.selectById(yishengYuyue.getYonghuId());if (yonghu != null) {BeanUtils.copyProperties(yonghu, view, new String[]{"id", "createDate"});//把级联的数据添加到view中,并排除id和创建时间字段view.setYonghuId(yonghu.getId());}//修改对应字典表字段dictionaryService.dictionaryConvert(view, request);return R.ok().put("data", view);} else {return R.error(511, "查不到数据");}}/*** 前端保存*/@RequestMapping("/add")public R add(@RequestBody YishengYuyueEntity yishengYuyue, HttpServletRequest request) {YonghuEntity userId = yonghuService.selectById((Integer) request.getSession().getAttribute("userId"));YishengEntity yishengEntity = yishengService.selectById(yishengYuyue.getYishengId());if(userId.getNewMoney() < yishengEntity.getYishengNewMoney()){return R.error("余额不足请充值");}userId.setNewMoney(userId.getNewMoney() - yishengEntity.getYishengNewMoney());yonghuService.updateById(userId);yishengYuyue.setCreateTime(new Date());yishengYuyueService.insert(yishengYuyue);return R.ok();}/*** 取消*/@RequestMapping("/refund")public R refund(Integer id, HttpServletRequest request) {logger.debug("refund方法:,,Controller:{},,id:{}", this.getClass().getName(), id);String role = String.valueOf(request.getSession().getAttribute("role"));YishengYuyueEntity yishengYuyue = yishengYuyueService.selectById(id);//当前表serviceInteger yishengId = yishengYuyue.getYishengId();if (yishengId == null)return R.error(511, "查不到该医生");YishengEntity yishengEntity = yishengService.selectById(yishengId);if (yishengEntity == null)return R.error(511, "查不到该医生");Double yishengNewMoney = yishengEntity.getYishengNewMoney();if (yishengNewMoney == null)return R.error(511, "医生价格不能为空");Integer userId = (Integer) request.getSession().getAttribute("userId");YonghuEntity yonghuEntity = yonghuService.selectById(userId);if (yonghuEntity == null)return R.error(511, "用户不能为空");if (yonghuEntity.getNewMoney() == null)return R.error(511, "用户金额不能为空");Double zhekou = 1.0;//计算金额Double money = yishengEntity.getYishengNewMoney() * 1 * zhekou;//计算所获得积分Double buyJifen = 0.0;yonghuEntity.setNewMoney(yonghuEntity.getNewMoney() + money); //设置金额yishengYuyue.setYishengYuyueTypes(102);//设置订单状态为已取消yishengYuyueService.updateAllColumnById(yishengYuyue);//根据id更新yonghuService.updateById(yonghuEntity);//更新用户信息yishengService.updateById(yishengEntity);//更新订单中医生的信息return R.ok();}/*** 评论*/@RequestMapping("/commentback")public R commentback(Integer id, String commentbackText, Integer yishengCommentbackPingfenNumber, HttpServletRequest request) {logger.debug("commentback方法:,,Controller:{},,id:{}", this.getClass().getName(), id);YishengYuyueEntity yishengYuyue = yishengYuyueService.selectById(id);if (yishengYuyue == null)return R.error(511, "查不到该订单");Integer yishengId = yishengYuyue.getYishengId();if (yishengId == null)return R.error(511, "查不到该医生");YishengCommentbackEntity yishengCommentbackEntity = new YishengCommentbackEntity();yishengCommentbackEntity.setId(id);yishengCommentbackEntity.setYishengId(yishengId);yishengCommentbackEntity.setYonghuId((Integer) request.getSession().getAttribute("userId"));yishengCommentbackEntity.setYishengCommentbackText(commentbackText);yishengCommentbackEntity.setInsertTime(new Date());yishengCommentbackEntity.setReplyText(null);yishengCommentbackEntity.setUpdateTime(null);yishengCommentbackEntity.setCreateTime(new Date());yishengCommentbackService.insert(yishengCommentbackEntity);yishengYuyue.setYishengYuyueTypes(105);//设置订单状态为已评论yishengYuyueService.updateById(yishengYuyue);//根据id更新return R.ok();}/*** 完成*/@RequestMapping("/deliver")public R deliver(Integer id, HttpServletRequest request) {logger.debug("refund:,,Controller:{},,ids:{}", this.getClass().getName(), id.toString());YishengYuyueEntity yishengYuyueEntity = yishengYuyueService.selectById(id);yishengYuyueEntity.setYishengYuyueTypes(103);//设置订单状态为已完成yishengYuyueService.updateById(yishengYuyueEntity);return R.ok();}}

5.2 挂号Service模块 

 package com.service;import com.baomidou.mybatisplus.service.IService;
import com.utils.PageUtils;
import com.entity.YishengYuyueEntity;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.springframework.lang.Nullable;
import java.util.List;/*** 挂号 服务类*/
public interface YishengYuyueService extends IService<YishengYuyueEntity> {/*** @param params 查询参数* @return 带分页的查询出来的数据*/PageUtils queryPage(Map<String, Object> params);}

5.3 挂号ServiceImpl模块


package com.service.impl;import com.utils.StringUtil;
import com.service.DictionaryService;
import com.utils.ClazzDiff;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.lang.reflect.Field;
import java.util.*;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.transaction.annotation.Transactional;
import com.utils.PageUtils;
import com.utils.Query;
import org.springframework.web.context.ContextLoader;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
import com.dao.YishengYuyueDao;
import com.entity.YishengYuyueEntity;
import com.service.YishengYuyueService;
import com.entity.view.YishengYuyueView;/*** 挂号 服务实现类*/
@Service("yishengYuyueService")
@Transactional
public class YishengYuyueServiceImpl extends ServiceImpl<YishengYuyueDao, YishengYuyueEntity> implements YishengYuyueService {@Overridepublic PageUtils queryPage(Map<String,Object> params) {Page<YishengYuyueView> page =new Query<YishengYuyueView>(params).getPage();page.setRecords(baseMapper.selectListView(page,params));return new PageUtils(page);}}

5.4  挂号Dao模块


package com.dao;import com.entity.YishengYuyueEntity;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import java.util.List;
import java.util.Map;
import com.baomidou.mybatisplus.plugins.pagination.Pagination;import org.apache.ibatis.annotations.Param;
import com.entity.view.YishengYuyueView;/*** 挂号 Dao 接口** @author */
public interface YishengYuyueDao extends BaseMapper<YishengYuyueEntity> {List<YishengYuyueView> selectListView(Pagination page,@Param("params")Map<String,Object> params);}

6、论文目录结构

摘要... I

Abstract... II

1 绪论... 1
   1.1 项目简介... 1
   1.2 调查研究... 1
       1.2.1 研究背景及意义... 1
       1.2.2 国内外研究现状... 2
       1.2.3 研究主要内容... 2
   1.3 论文的章节安排... 3

2 系统相关技术介绍... 4
   2.1 Java语言... 4
   2.2 SpringBoot框架... 4
   2.3 Vue框架... 4
   2.4 MySQL数据库... 4

3 系统需求分析... 6
   3.1 可行性分析... 6
       3.1.1 技术可行性... 6
       3.1.2 经济可行性... 6
       3.1.3 操作可行性... 6
   3.2 系统功能需求... 6
       3.2.1 用户端功能需求... 6
       3.2.2 XX端功能需求... 6
       3.2.3 管理员端功能需求... 6
   3.3 系统性能需求... 6

4 系统总体设计... 7
   4.1 系统总体架构设计... 7
   4.2 系统的功能设计... 7
   4.3 数据库设计... 7
       4.3.1 概念设计E-R图... 7
       4.3.2 逻辑设计关系模式... 7
       4.3.3 数据库物理设计... 7

5 系统详细实现... 14
   5.1 系统实现环境... 14
   5.2 用户端... 14
       5.2.1 登录页面... 14
       5.2.2 注册页面... 14
       5.2.3 XXXX页面... 14
       5.2.4 XXXX页面... 14
       5.2.5 XXXX页面... 14
   5.3 XXXX端... 15
       5.3.1 XXXX页面... 15
       5.3.2 XXXX页面... 15
       5.3.3 XXXX页面... 15
       5.3.4 XXXX页面... 15
   5.4 管理端... 15
       5.4.1 用户管理页面... 15
       5.4.2 XXXX页面... 15
       5.4.3 XXXX页面... 16
       5.4.4 XXXX页面... 16

6 系统测试... 16
   6.1 测试目的... 16
   6.2 测试方法... 16
   6.3 测试用例... 16
       6.3.1 XXXX测试... 16
       6.3.2 XXXX测试... 16
   6.4 测试结果... 16

结论... 17

参考文献... 18

致谢... 19

更多源码:

计算机毕业设计选题1000套等你来!!!

7、源码获取

感谢大家的阅读,如有不懂的问题可以评论区交流或私聊!

喜欢文章可以点赞、收藏、关注、评论

下方联系方式获取源码

相关文章:

计算机毕业设计 社区医疗服务系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…...

html+css学习

html 元素 html元素是HTML的根元素&#xff0c;一个文档只能有一个&#xff0c;其他所有元素都是其后代元素 html有一个属性为lang&#xff0c;其作用是&#xff1a; 帮助语言合成工具确定要使用的发音帮助翻译工具确定要使用的翻译规则 当属性lang“en”则表示告诉其浏览器…...

2.gitlab ce 细粒度的权限控制

需求&#xff1a; 在提交merge reqeust时&#xff0c;必须指定审核人&#xff0c;并且要选审核人清单里的 有个code owners应该可以做到&#xff08;gitlab ce应该也可以用&#xff09; 下面是参考的文档 细粒度的代码权限怎么做&#xff1f;极狐GitLab 代码所有者来帮忙 -…...

G - Merchant Takahashi / F - Useless for LIS

G - Merchant Takahashi 首先考虑暴力 DP。 设最后一步走到编号 ii 的城镇的方案的最大收益为 fifi​&#xff0c;则每次集市相当于是 fTi←fj−C∣Ti−j∣Pi&#xff08;1≤j≤n&#xff09;。 这样每次可以通过枚举 j 来转移&#xff0c;这样总时间复杂度是 O(nm) 的&…...

自然语言处理实例

引子:基于聊天机器人项目的自然语言处理(NLP)学习路线 自然语言处理(Natural Language Processing,简称 NLP)是人工智能的重要分支,旨在帮助计算机理解、生成和处理人类语言。NLP 技术广泛应用于搜索引擎、机器翻译、语音识别、文本摘要、情感分析、对话系统等领域。为…...

『功能项目』主角属性值显示【75】

本章项目成果展示 我们打开上一篇74穿戴装备的项目&#xff0c; 本章要做的事情是制作主角属性界面&#xff0c;实现在面板上显示主角的攻击力等数值 制作一个简易的主角界面&#xff08;创建Image与Text显示即可&#xff09; 创建一个空物体 重命名为PlayerInfo 在其子级下创…...

单片机嵌入式编程中常用技术点

Open CV&#xff0c;QT&#xff0c;Linux&#xff0c;多线程&#xff0c;网络编程&#xff0c;文件编程在单片机嵌入式编程中&#xff0c;这些技术在单片机嵌入式编程中的作用&#xff1a; 一、OpenCV 在单片机嵌入式编程中&#xff0c;虽然单片机的计算能力相对有限&#xf…...

【毕业论文+源码】基于ASP+NET的人事管理系统

引言 人事管理系统是针对企业内部人事管理设计&#xff0c;分角色实现对公司部门及各部门员工的增、删、改、查以及对员工考勤的管理。 编写目的&#xff1a; 在系统需求分析的基础上&#xff0c;对需求分析中产生的功能模块进行过程描述&#xff0c;设计功能模块的内部细节&…...

计算机毕业设计 校园志愿者管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…...

速通LLaMA2:《Llama 2: Open Foundation and Fine-Tuned Chat Models》全文解读

文章目录 概览LLaMA和LLaMA2的区别AbstractIntroductionPretrainingFine-tuning1. 概括2、Supervised Fine-Tuning&#xff08;SFT&#xff09;3、⭐Reinforcement Learning with Human Feedback&#xff08;RLHF&#xff09;&#x1f53a;总览Training Objectives&#xff1a;…...

如何使用VM中win10搭建Hfish蜜罐(危险感知平台)。从下载到部署详细教程

得而不惜就该死。 -----古月方源 引言&#xff1a;最近跟一个老师做东西&#xff0c;叫我搞清楚蜜罐的搭建和一些底层逻辑&#xff0c;所以记录一下。 一、实验准备 &#xff08;一&#xff09;win10虚拟机 &#xff08;若有需要可以后台私信&#xff09; &#xff08;二&…...

Rust: AES 加密算法库

在Rust中&#xff0c;进行AES加密通常会用到一些现有的库&#xff0c;因为Rust标准库中并不直接提供AES加密的API。一个非常流行的库是crypto-box或者更广泛使用的ring库&#xff0c;但ring库由于依赖问题有时可能难以编译&#xff0c;另一个常用的库是cryptography的Rust绑定&…...

计算机网络34——Windows内存管理

1、计算机体系结构 2、内存管理 分为连续分配管理和非连续分配管理 在块内存在的未使用空间叫内部碎片&#xff0c;在块外存在的未使用空间叫外部碎片 固定分区分配可能出现内部碎片&#xff0c;动态分区分配可能出现外部碎片 3、逻辑地址和实际地址的互相转换 4、缺页中断 …...

Redisson 总结

1. 基础使用 1.1 引入依赖 <dependencies><dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId></dependency> </dependencies>包含的依赖如下 1.2 配置文件 其实默认主机就…...

EfficientFormer实战:使用EfficientFormerV2实现图像分类任务(一)

摘要 EfficientFormerV2是一种通过重新思考ViT设计选择和引入细粒度联合搜索策略而开发出的新型移动视觉骨干网络。它结合了卷积和变换器的优势&#xff0c;通过一系列高效的设计改进和搜索方法&#xff0c;实现了在移动设备上既轻又快且保持高性能的目标。这一成果为在资源受…...

文心智能体搭建步骤

通过使用文心智能体平台来创建智能体的过程。这种方法可以让没有编程经验的人也能快速构建智能体&#xff0c;降低了技 术门槛。以下是一些建议和心得: 1.选择合适的平台:文心智能体平台是一个优秀的选择&#xff0c;它提供了零代码和低代码的开发环境&#xff0c;极大地降低了…...

PHP安全

PHP伪协议&#xff1a; 一.【file://协议】 PHP.ini&#xff1a; file:// 协议在双off的情况下也可以正常使用&#xff1b; allow_url_fopen &#xff1a;off/on allow_url_include&#xff1a;off/on file:// 用于访问本地文件系统&#xff0c;在CTF中通常用来读取本地文…...

c++278函数指针

#define _CRT_SECURE_NO_WARNINGS #include<stdlib.h> #include<string.h> #include<stdio.h>//数组类型基本语法知识梳理 //定义一个数组类型 //int a[10];//定义一个指针数组类型//定义一个指向数组类型的指针 数组类型的指针void main() {int a[10];//a代…...

sklearn特征选取之SelectFromModel

sklearn.feature_selection.SelectFromModel 是一种基于模型的重要性权重进行特征选择的工具&#xff0c;允许我们根据学习器的权重或特征重要性自动选择特征。它通过从模型中提取特征的重要性来选择特征&#xff0c;常用于与那些具有 coef_ 或 feature_importances_ 属性的模型…...

vue一级、二级路由设计

一、一级路由设计 一级路由是指直接映射到应用程序中顶级页面或组件的路由。这些路由通常定义在Vue Router的配置中&#xff0c;作为应用程序导航结构的基础。 直接映射&#xff1a;一级路由直接映射到URL路径和Vue组件&#xff0c;没有嵌套关系。顶级导航&#xff1a;它们通…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上&#xff0c;你可以使用apt包管理器来安装NFS服务器。打开终端并运行&#xff1a; sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享&#xff0c;例如/shared&#xff1a; sudo mkdir /shared sud…...

python/java环境配置

环境变量放一起 python&#xff1a; 1.首先下载Python Python下载地址&#xff1a;Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个&#xff0c;然后自定义&#xff0c;全选 可以把前4个选上 3.环境配置 1&#xff09;搜高级系统设置 2…...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要&#xff1a;设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP&#xff08;Work-in-Progress&#xff09;弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中&#xff0c;设立专门的紧急任务通道尤为重要&#xff0c;这能…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性&#xff1a; 隐藏字段的实现细节 提供对字段的受控访问 访问控制&#xff1a; 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性&#xff1a; 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑&#xff1a; 可以…...

mac 安装homebrew (nvm 及git)

mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用&#xff1a; 方法一&#xff1a;使用 Homebrew 安装 Git&#xff08;推荐&#xff09; 步骤如下&#xff1a;打开终端&#xff08;Terminal.app&#xff09; 1.安装 Homebrew…...

深入理解Optional:处理空指针异常

1. 使用Optional处理可能为空的集合 在Java开发中&#xff0c;集合判空是一个常见但容易出错的场景。传统方式虽然可行&#xff0c;但存在一些潜在问题&#xff1a; // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...

LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用

中达瑞和自2005年成立以来&#xff0c;一直在光谱成像领域深度钻研和发展&#xff0c;始终致力于研发高性能、高可靠性的光谱成像相机&#xff0c;为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...