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

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌

🍅文末获取源码联系🍅

👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟


计算机毕业设计《1000套》

目录

1、项目介绍及开发技术

[1.1 项目介绍](#1.1 项目介绍)

[1.2 开发技术](#1.2 开发技术)

2、系统功能设计结构图

3、功能截图

[3.1 前台功能](#3.1 前台功能)

[3.2 后台功能](#3.2 后台功能)

4、数据库表结构设计

5、关键代码

[5.1 挂号Controller模块](#5.1 挂号Controller模块)

[5.2 挂号Service模块](#5.2 挂号Service模块)

[5.3 挂号ServiceImpl模块](#5.3 挂号ServiceImpl模块)

[5.4 挂号Dao模块](#5.4 挂号Dao模块)

6、论文目录结构

7、源码获取


1、项目介绍及开发技术

1.1 项目介绍

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

背景:

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

目的意义:

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

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

1.2 开发技术

类别 技术名称 用途/描述
开发语言 Java 一种广泛使用的面向对象编程语言。
框架 Spring Boot 简化Spring应用的初始搭建以及开发过程。
ORM工具 MyBatis Plus MyBatis的增强工具,简化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、数据库表结构设计

sql 复制代码
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模块

java 复制代码
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";

    @Autowired
    private YishengYuyueService yishengYuyueService;


    @Autowired
    private TokenService tokenService;

    @Autowired
    private DictionaryService dictionaryService;//字典
    @Autowired
    private ForumService forumService;//论坛
    @Autowired
    private LiuyanService liuyanService;//留言板
    @Autowired
    private NewsService newsService;//社区公告
    @Autowired
    private YishengService yishengService;//医生
    @Autowired
    private YishengChatService yishengChatService;//用户咨询
    @Autowired
    private YishengCollectionService yishengCollectionService;//医生收藏
    @Autowired
    private YishengCommentbackService yishengCommentbackService;//医生评价
    @Autowired
    private YonghuService yonghuService;//用户
    @Autowired
    private ZhinanService zhinanService;//防范指南
    @Autowired
    private ZhinanCollectionService zhinanCollectionService;//指南收藏
    @Autowired
    private ZhinanLiuyanService zhinanLiuyanService;//指南留言
    @Autowired
    private 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转view
            YishengYuyueView 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转view
            YishengYuyueView 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);//当前表service
        Integer 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模块

java 复制代码
 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模块

java 复制代码
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 {

    @Override
    public 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模块

java 复制代码
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、源码获取

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

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

下方联系方式获取源码

相关推荐
七星静香8 分钟前
laravel chunkById 分块查询 使用时的问题
java·前端·laravel
Jacob程序员9 分钟前
java导出word文件(手绘)
java·开发语言·word
ZHOUPUYU9 分钟前
IntelliJ IDEA超详细下载安装教程(附安装包)
java·ide·intellij-idea
stewie613 分钟前
在IDEA中使用Git
java·git
Elaine20239128 分钟前
06 网络编程基础
java·网络
G丶AEOM29 分钟前
分布式——BASE理论
java·分布式·八股
落落鱼201330 分钟前
tp接口 入口文件 500 错误原因
java·开发语言
想要打 Acm 的小周同学呀31 分钟前
LRU缓存算法
java·算法·缓存
镰刀出海34 分钟前
Recyclerview缓存原理
java·开发语言·缓存·recyclerview·android面试
阿伟*rui3 小时前
配置管理,雪崩问题分析,sentinel的使用
java·spring boot·sentinel