如何使用ssm实现中小型医院管理系统的设计与实现

252 篇文章 0 订阅
148 篇文章 0 订阅

@TOC

ssm576中小型医院管理系统的设计与实现+jsp

研究背景和来源

目前的网站平台类系统已各种各样,涉及到生活中的每一个部分。购物类、管理类、信息统计类、办公类、官网类等非常丰富。我国各类网站的发展已非常成熟,这些系统依靠网络和计算机技术不断完善发展为人们带来更好的生活体验。而医院类的网站更是多种多样,三甲以上的医院一般都有自己的官方网站,拥有的客户群体都非常大。

由于生活环境的恶劣多种疾病呈年轻化,医院每天接诊的人数都非常多。患者看病大部分的时间都浪费在排队、检查上。经常因为医生给出的建议太过专业造成患者不理解,影响患者的治疗。针对有些问题患者会多次询问,造成医生工作的重复性,不利于效率的提高。

1.2课题研究现状

目前用户挂号的主要途径还是通过传统方式。采用在医院挂号处先了解科室情况再进行现场挂号,这种方式对于时间充足、离医院不远的用户来说非常适合,但对时间有限特别是外地来就医的用户来说非常困难,还有一部分想要挂名医的来说更加困难。这部分用户想要提高挂号效率必须采用其它辅助手段,像很多用户找黄牛,雇佣跑腿代挂号,这些方式不仅需要资金的支持,还会增加被骗的风险,所以,现在大量的用户转换到线上挂号方式。

我国线上医院的发展已形成一定的规模,在众多医院网站里最终目的都是宣传自己的医院、介绍自己医院的优势。有些医院网站里也提供挂号功能,但不能实现更全面的功能,使用户无法满足自己的要求。用户想查询费用信息、处方信息、住院信息等都还需要找专业工作人员才可以完成。

1.3课题开发的目的和意义

本系统的实现目的在于帮助用户的信息查询和挂号。和网上的医院官方网站相比,本系统针对性更强,向使用用户展示最为详细的门诊信息,并可以以多种方式展示,以此来满足用户的需求。本系统的核心在于内容,以丰富的信息种类取胜,去繁留简,使本系统的用户更容易抓住重点,找到核心内容,减少用户烦躁心理。本系统的实现拥有更大的意义:

  1. 本系统功能全面、针对性强,使系统用户更为直观,操作也更为简单,只要有上网经验的用户都可以轻松掌握;
  2. 本系统采用多种信息种类,用户可以根据自己的需求选择需要的信息;
  3. 本系统中的门诊信息都是由管理员发布,可以做到正确、精准;
  4. 本系统中设有公告功能,用户可以及时了解医院情况,不至于到医院后才发现有特殊情况而影响看病。

1.4课题开发内容

本中小型医院管理系统采用前台+后台的方式进行设计。前台信息主要为内容展示,后台信息为用户可以操作的功能。本系统的前台信息可由非注册用户、注册用户、管理员、医生共同浏览,包括门诊信息、公告信息、个人中心、后台管理等。门诊详情里添加科室,使用户可以更快的挂号。注册用户在个人后台可以管理挂号信息,查询处方信息和门诊项目信息,可以在线支付费用以及进行住院登记、出院信息管理。管理员在后台的功能为医生管理、用户管理、药品管理、项目管理、科室信息、门诊管理、挂号管理、处方管理、住院管理、出院管理等。医生可以管理挂号信息和为用户开处方以及管理药品信息、住院信息、出院信息等。

1.5论文结构安排

本篇论文分为摘要、目录、绪论、系统开发关键技术介绍、系统分析、系统设计和系统实现、系统测试、总结、致谢、参考文献。本篇论文的核心集中在系统设计和系统实现部分。绪论部分为基础调研,在系统分析中阐述系统的需求分析、可行性分析和数据流程图、用例图等。

第2章 系统开发关键技术介绍

2.1系统开发使用的关键技术

本系统在开发中选择SSM框架进行设计,语言采用Java,数据库采用Mysql,并在设计中加入Jsp技术,本系统的运行环境为Idea。

2.2 Jsp技术介绍

Jsp是一个用来开发前台界面的JavaScript框架,体积非常的小,所以运行效率非常的高,可以直接通过虚拟设定的 DOM进行各种JavaScript计算,因为操作过程中相当于是一个预处理,所以并没有真实的DOM,也可以称作为一个虚拟的DOM。Jsp还可以进行双向的数据绑定,这样操作起来更加的简单,使用户可以不用管DOM对象,直接去操作业务逻辑就可以了,可以应用的场景非常的多,而且开发成本也非常的低。目前的市场后已经有很多成熟稳定的框架组件,可以直接拿来使用,对于初学者来说非常的方便。

2.3 Idea介绍

Idea是公认的最好用Java开发工具之一,常见最多的都是用来跟Eclipse进行比较,Eclipse可以说是最简单的,但是在兼容方面,代码设计方面明显不足。而Idea就是在Eclipse基础上进行了整合升级,更加智能。Idea最大的创新就是有智能代码助手,可以实现代码提示,还能进行代码重构,代码审查,非常适合新手的使用。Idea的宗旨就是实现智能编码,使编码更加的简单,所以在Idea上有很多其他软件所没有的特色功能,比如进行智能选取,不需要开发者在手动操作,还有各种丰富的导航模式可供选择,可以直接导入就能使用,不需要开发者在重新建立,还有历史记录功能,在误删误操作的情况下,通过这个功能就可以直接恢复。而且Idea相比Eclipse调试也更简单,通过Eclipse调试的时候需要选定表达式,否则就没办法查看它的值,而通过Idea则不需要进行任何操作,Idea会自动理解你所需要的表达式,然后给你建议参考值。而且在编码方面更加智能,会自动跳出需要的变量和参数,然后建议你最优选择。所以说相比Eclipse来说,用Idea开发更加的简单方便,更适合新用户的开发使用。

2.4 Mysql数据库介绍

数据库主要就是用来存储和管理系统数据的,按照数据结构来进行组织和存储的,数据库都有自己独立的接口来进行创建,访问,管理等,也可以直接用文件的形式进行数据存储,但是读写速度比较慢,效率不高,所以一般都是采用专门的数据库软件来进行数据库存储和管理,这样可以更加科学有效的实现数据的存储,也更加的安全。而Mysql就是一个关系型数据库管理系统,可以把各种不同的数据库存储到不同的表结构中 ,这样可以提高查找效率。

第3章 系统分析

3.1系统需求分析

目前用户想要了解医院信息,都会去网上搜索该医院的相关信息,但网上的信息真假难辨,经常会对患者造成误导。用户在看病完成后,想要查询处方信息、费用信息等都没有有效的平台,必须找工作人员了解。医院经常都是人满为患,需要排队是常态。用户大量的时间都需要浪费在排队上,对于医院来说,人流量太大也不利于安全。而开发的本中小型医院管理系统则可以解决这类问题,用户可以在平台里了解详细的门诊信息,并进行挂号和费用支付,可以查看处方信息和进行入院、出院的线上登记查询,非常方便,由此发现,本中小型医院管理系统非常有前景。

3.2系统可行性分析

可行性分析主要是先进行初步调查,然后从各个方面进行系统可行性研究,比如系统需要做什么,采用什么技术,进行各种分析研究,然后得到一个可行性的方案。然后在对方案进行各个功能模块的设计,进行系统设计分析,研究系统设计可行性。所以要从多方面进行考虑,而本文主要从技术上,经济上,操作上,法律上进行研究分析。

3.2.1技术可行性

随着技术的快速发展,各种软件开发技术也在不停的更新,不断的发展,大家都在选择适合自己水平的,能达到开发需求的软件技术和开发环境。所以根据我的开发需求,然后决定开发本系统采用Java语言SSM框架来完成,开发出来的系统可以满足功能需求,而且操作界面美观,符合目前的审美,最重要的是开发相对简单,可以自动生成所需要的框架结构。前端框架采用Jsp,数据库Mysql,体积更小,存储速度快,可以满足本次开发的需求。

3.2.2经济可行性

经济可行性分析主要是对前期投资进行分析,对系统维护费用分析,对开发完成后取得的经济收益进行分析。因为本系统完全是自己开发的,作为毕业设计用途的,只需要基础的设施就行,需要电脑硬件,开发软件等,不需要额外的投入,完全满足开发需求。而系统开发完成后可以方便用户使用,还能带来一定的经济效益,所以开发本系统在经济上是可行的。

3.2.3运行可行性分析

开发本系统过程中已经充分考虑了使用者的感受,界面美观,而且有功能导航栏,方便用户很好的掌握,而且还有各种提示符,哪怕对计算机操作不熟练的也能使用本系统。所以综合考虑,本系统在运行方面是可行的。

3.2.4法律可行性

开发本系统过程中参阅的相关资料都是在学校图书馆参阅的,均为正规渠道,而且开发均是本人独立开发的,均是自己的知识储备,全是自己原创的,不存在知识产权,所以才法律上是可行的。

3.3系统功能分析

本系统采用功能针对性强、文字描述精确的方式进行设计。本中小型医院管理系统是关于医院办公信息的系统,在设计功能时只取用最基础的功能,目的是提供最精准的服务。本系统包括前台和后台两部分。

前台的功能为:

  1. 公告信息,展示公告详情,并且展示公告发布时间方便用户了解公告时效;
  2. 门诊信息,以图片、文字方式展示门诊列表,点击门诊图片展示详情门诊的描述,用户可以进行挂号;
  3. 用户注册功能,实现注册为用户会员的功能;
  4. 后台管理功能,本功能为管理员登录提供窗口;
  5. 个人中心功能,本功能为用户登录后进入个人后台使用的窗口。

后台管理员功能:

  1. 系统用户管理,实现密码和个人信息的修改以及注册用户的检查管理;
  2. 系统管理功能,可以更新和删除、修改公告;
  3. 医生管理功能,审核医生和管理医生;
  4. 药品管理功能,实现药品的更新和检查;
  5. 项目管理功能,可以设置门诊项目;
  6. 科室类型管理功能,设置医院里的科室信息;
  7. 门诊信息管理功能,可以安排医生的坐诊;
  8. 挂号信息功能,查询和审核用户的挂号;
  9. 处方信息管理功能,可以查看医生的处方;
  10. 住院登记功能,可以查询用户的住院详情;
  11. 出院信息管理功能,可以查询用户的出院详情。

医生功能:

  1. 门诊管理功能,查询门诊安排情况;
  2. 挂号信息管理功能,审核用户的挂号;
  3. 处方信息管理,为挂号的用户开处方;
  4. 住院登记管理功能,实现用户的住院登记;
  5. 出院信息管理功能,实现用户的出院;
  6. 药品信息管理功能,查询药品信息。

用户功能:

  1. 挂号信息管理功能,查询自己的挂号详情并进行费用的支付;
  2. 处方信息管理功能,可以查询医生开的处方;
  3. 住院登记功能,查询住院详情;
  4. 出院信息功能,查询出院详情。

管理员用例图如下图3.1所示:

图3.1管理员用例图

用户用例图如下图3.2所示:

图3.2用户用例图

医生用例图如下图3.3所示:

图3.3医生用例图

3.4系统性能分析

系统性能方面包括系统的框架、系统的开发理念、系统的开发界面原则、系统开发标准、系统开发流程、系统开发安全性、系统运行稳定性等。具体性能分析如下:

  1. 本系统是面向所有人群而开发的网站平台,所以采用的框架模式为B/s,B/s模式是借助浏览器进行系统访问的平台,所有信息可以共享;
  2. 系统在设计中采用结构化方式,首先将功能分为大的方面,再由大方面分为小方面,最后分为小细节再整合成完整的系统;
  3. 系统在界面设计时采用Jsp技术,可以使界面更丰富,元素更多;
  4. 系统的操作流程采用简单的思路,使使用用户可以快速掌握本系统;
  5. 系统的运行速度要快,所有操作可以快速反映;
  6. 在系统开发时要注意系统的资源占用,以最少占用为标准进行设计;
  7. 采用发展的眼光看待问题,把系统的生命周期延长到最大;
  8. 调查所有使用用户的需求尽可能的满足。

3.5业务流程分析

业务流程涉及到系统的每个部分,调查系统在运行中数据会流动的每个环节,以用户注册开始到用户挂号进行业务流程分析。确保所有信息的流入、流出以及数据的完整性和处理问题的方法。本系统的流程为用户首先通过注册,注册成功后进行登录,登录后可以浏览公告信息、门诊信息,在门诊详情里可以挂号,挂号后同医生管理挂号信息和开出处方,用户查询处方和查询住院信息、出院信息等。系统中的所有数据都需要管理员审核。本系统的用户挂号流程图如下图3.4所示:

图3.4系统用户挂号流程图

第4章 系统设计

4.1系统功能结构设计

本系统的功能界面设计为四个,前台界面、用户中心界面和管理员中心界面、医生中心界面。根据不同用户的不同需求分开设计功能。前台界面的功能为公告、门诊信息、个人中心和后台管理,用户中心界面的功能为个人资料、挂号信息管理、住院登记等,管理员中心界面的功能为系统用户、门诊信息等,医生中心界面的功能为挂号管理、处方信息管理等。本系统的功能结构图如下图4.1所示:

图4.1系统功能结构图

4.2系统数据库设计

数据库就是数据的存储仓库,按照计算机的格式进行数据存入。为了使数据库具有独立性,防止因为系统崩溃而数据有损的问题在数据库建立时都采用单独的数据库。数据库具有共享性和单独性,在系统运行时会自动和相对应的数据进行通讯连接。本中小型医院管理系统采用Mysql数据库设计,身份验证为Root,密码为Root。

4.2.1数据库ER图设计

根据分析所得本系统中主要的数据为管理员、用户、门诊信息、挂号信息、处方信息、住院信息等。所以本节针对这些数据画出数据ER图。

(1)管理员实体的属性为用户名和密码。管理员实体ER图如下图4.2所示:

图4.2管理员实体ER图

(2)用户实体的属性为编号、姓名、性别、病历等。用户实体ER图如下图4.3所示:

图4.3用户实体ER图

(3)挂号信息实体的属性包括编号、挂号医生、挂号时间等。挂号信息实体ER图如下图4.4所示:

图4.4挂号信息实体ER图

(4)门诊信息实体的属性包括编号、名称、科室、医生等。门诊信息实体的ER图如下图4.5所示:

      

图4.5门诊信息实体ER图

(5)类别信息实体的属性包括编号和名称。类别信息实体ER图如下图4.6所示:

 

图4.6分类信息实体的ER图

(6)本系统的关系ER图如下图4.7所示:

图4.7系统关系ER图

4.2.2数据库表设计

本系统针对医院管理而设计,所以本系统的数据库表围绕医院而建立。本系统的数据库表包括门诊信息表、挂号信息表、处方信息表等。本系统的数据库表结构如下图4.1-4.16 所示:

表4.1 chufangxinxi

表4.2 chuyuanxinxi

|| | :- | 表4.3 config

|| | :- | 表4.4 guahaoxinxi

|| | :- |

表4.5 keshileixing

|| | :- | 表4.6 menzhenxiangmu

|| | :- |

表4.7 menzhenxinxi

|| | :- | 表4.8 news

|| | :- |

表4.9 token

|| | :- | 表4.10 users

表4.11 xiangmuleixing

|| | :- |

表4.12 yaopinleibie

表4.13 yaopinxinxi

|| | :- |

表4.14 yisheng

|| | :- | 表4.15 yonghu

|| | :- |

表4.16 zhuyuandengji

第5章 系统实现

5.1前台界面的实现

在前台里所有的信息都是共享的,注册用户、非注册用户、游客都可以浏览。包括公告信息、门诊信息、个人中心和后台管理等。

5.1.1首页界面的实现

本功能设计的目的是帮助用户一键返回首页,在首页里的元素包括图片、列表框、文字、按钮等。在首页的上半部分是粉底白字的系统名称,系统名称下面是导航栏,接着就是图片,图片下面是门诊信息。首页界面的实现界面如下图5.1所示:

图5.1首页界面的实现效果

5.1.2门诊功能的实现界面

在门诊功能里可以看到坐诊的科室和医生等信息。门诊功能的实现界面如下图5.2所示:

图5.2门诊功能的实现界面

科室的实现界面如下图5.3所示:

图5.3科室的实现界面

5.1.3个人中心功能的实现界面

用户登录后在个人中心里可以管理自己的注册信息,实现界面如下图5.4所示:

图5.4用户中心的功能实现界面

5.1.4公告功能的实现界面

在本功能模块里展示公告标题,想要看具体的公告详情需要点击公告标题进入公告详情页。公告信息功能的实现界面如下图5.5所示:

图5.5系统公告信息功能的实现界面

5.2用户角色功能的界面实现

5.2.1挂号功能的实现界面

用户在门诊信息里可以挂号,挂号成功后可以管理挂号信息和在线支付费用。挂号功能的实现界面如下图5.6所示:

图5.6挂号功能的实现界面

5.2.2处方信息管理功能的实现界面

用户可以查询医生开出的处方,并进行费用的支付。处方信息功能的实现界面如下图5.7所示:

图5.7处方信息功能的实现界面

5.2.3门诊项目功能的实现界面

用户可以查询门诊项目。门诊项目功能的实现界面如下图5.8所示:

图5.8辨认项目功能的实现界面

5.2.4住院登记功能的实现界面

用户可以查询住院的详情。住院登记功能的实现界面如下图5.9所示:

图5.9住院登记功能的实现界面

5.2.5出院信息功能的实现界面

用户可以查询出院信息以及进行费用的结算。实现界面如下图5.10所示:

图5.10出院信息功能的实现界面

5.2管理员功能的实现界面

管理员的功能为管理前台信息和审核医生管理的功能以及管理用户信息。管理的前台信息包括公告信息、门诊信息、项目信息、类型信息等。管理员功能的实现界面如下图5.11所示:

图5.11管理员功能的实现界面

5.3医生功能的实现界面

医生的功能为管理个人资料和管理挂号信息、为用户开处方,登记用户的住院信息和处理用户的出院信息、查询药品等。医生功能的实现界面如下图5.12所示:

图5.12医生功能的实现界面

第6章 系统测试

系统测试

GuahaoxinxiServiceImpl.java
package com.service.impl;

import org.springframework.stereotype.Service;
import java.util.Map;
import java.util.List;

import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.utils.PageUtils;
import com.utils.Query;


import com.dao.GuahaoxinxiDao;
import com.entity.GuahaoxinxiEntity;
import com.service.GuahaoxinxiService;
import com.entity.vo.GuahaoxinxiVO;
import com.entity.view.GuahaoxinxiView;

@Service("guahaoxinxiService")
public class GuahaoxinxiServiceImpl extends ServiceImpl<GuahaoxinxiDao, GuahaoxinxiEntity> implements GuahaoxinxiService {


    @Override
    public PageUtils queryPage(Map<String, Object> params) {
        Page<GuahaoxinxiEntity> page = this.selectPage(
                new Query<GuahaoxinxiEntity>(params).getPage(),
                new EntityWrapper<GuahaoxinxiEntity>()
        );
        return new PageUtils(page);
    }
    
    @Override
	public PageUtils queryPage(Map<String, Object> params, Wrapper<GuahaoxinxiEntity> wrapper) {
		  Page<GuahaoxinxiView> page =new Query<GuahaoxinxiView>(params).getPage();
	        page.setRecords(baseMapper.selectListView(page,wrapper));
	    	PageUtils pageUtil = new PageUtils(page);
	    	return pageUtil;
 	}
    
    @Override
	public List<GuahaoxinxiVO> selectListVO(Wrapper<GuahaoxinxiEntity> wrapper) {
 		return baseMapper.selectListVO(wrapper);
	}
	
	@Override
	public GuahaoxinxiVO selectVO(Wrapper<GuahaoxinxiEntity> wrapper) {
 		return baseMapper.selectVO(wrapper);
	}
	
	@Override
	public List<GuahaoxinxiView> selectListView(Wrapper<GuahaoxinxiEntity> wrapper) {
		return baseMapper.selectListView(wrapper);
	}

	@Override
	public GuahaoxinxiView selectView(Wrapper<GuahaoxinxiEntity> wrapper) {
		return baseMapper.selectView(wrapper);
	}


}

UserController.java

package com.controller;


import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import com.annotation.IgnoreAuth;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.TokenEntity;
import com.entity.UserEntity;
import com.service.TokenService;
import com.service.UserService;
import com.utils.CommonUtil;
import com.utils.MPUtil;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.ValidatorUtils;

/**
 * 登录相关
 */
@RequestMapping("users")
@RestController
public class UserController{
	
	@Autowired
	private UserService userService;
	
	@Autowired
	private TokenService tokenService;

	/**
	 * 登录
	 */
	@IgnoreAuth
	@PostMapping(value = "/login")
	public R login(String username, String password, String captcha, HttpServletRequest request) {
		UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
		if(user==null || !user.getPassword().equals(password)) {
			return R.error("账号或密码不正确");
		}
		String token = tokenService.generateToken(user.getId(),username, "users", user.getRole());
		return R.ok().put("token", token);
	}
	
	/**
	 * 注册
	 */
	@IgnoreAuth
	@PostMapping(value = "/register")
	public R register(@RequestBody UserEntity user){
//    	ValidatorUtils.validateEntity(user);
    	if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
    		return R.error("用户已存在");
    	}
        userService.insert(user);
        return R.ok();
    }

	/**
	 * 退出
	 */
	@GetMapping(value = "logout")
	public R logout(HttpServletRequest request) {
		request.getSession().invalidate();
		return R.ok("退出成功");
	}
	
	/**
     * 密码重置
     */
    @IgnoreAuth
	@RequestMapping(value = "/resetPass")
    public R resetPass(String username, HttpServletRequest request){
    	UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
    	if(user==null) {
    		return R.error("账号不存在");
    	}
    	user.setPassword("123456");
        userService.update(user,null);
        return R.ok("密码已重置为:123456");
    }
	
	/**
     * 列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,UserEntity user){
        EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
    	PageUtils page = userService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.allLike(ew, user), params), params));
        return R.ok().put("data", page);
    }

	/**
     * 列表
     */
    @RequestMapping("/list")
    public R list( UserEntity user){
       	EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
      	ew.allEq(MPUtil.allEQMapPre( user, "user")); 
        return R.ok().put("data", userService.selectListView(ew));
    }

    /**
     * 信息
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") String id){
        UserEntity user = userService.selectById(id);
        return R.ok().put("data", user);
    }
    
    /**
     * 获取用户的session用户信息
     */
    @RequestMapping("/session")
    public R getCurrUser(HttpServletRequest request){
    	Long id = (Long)request.getSession().getAttribute("userId");
        UserEntity user = userService.selectById(id);
        return R.ok().put("data", user);
    }

    /**
     * 保存
     */
    @PostMapping("/save")
    public R save(@RequestBody UserEntity user){
//    	ValidatorUtils.validateEntity(user);
    	if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
    		return R.error("用户已存在");
    	}
        userService.insert(user);
        return R.ok();
    }

    /**
     * 修改
     */
    @RequestMapping("/update")
    public R update(@RequestBody UserEntity user){
//        ValidatorUtils.validateEntity(user);
    	UserEntity u = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername()));
    	if(u!=null && u.getId()!=user.getId() && u.getUsername().equals(user.getUsername())) {
    		return R.error("用户名已存在。");
    	}
        userService.updateById(user);//全部更新
        return R.ok();
    }

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        userService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
}

YaopinleibieController.java
package com.controller;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;

import com.utils.ValidatorUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.annotation.IgnoreAuth;

import com.entity.YaopinleibieEntity;
import com.entity.view.YaopinleibieView;

import com.service.YaopinleibieService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.CommonUtil;
import java.io.IOException;

/**
 * 药品类别
 * 后端接口
 * @author 
 * @email 
 * @date 2022-03-13 22:12:44
 */
@RestController
@RequestMapping("/yaopinleibie")
public class YaopinleibieController {
    @Autowired
    private YaopinleibieService yaopinleibieService;



    


    /**
     * 后端列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,YaopinleibieEntity yaopinleibie, 
		HttpServletRequest request){

        EntityWrapper<YaopinleibieEntity> ew = new EntityWrapper<YaopinleibieEntity>();
    	PageUtils page = yaopinleibieService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, yaopinleibie), params), params));
		request.setAttribute("data", page);
        return R.ok().put("data", page);
    }
    
    /**
     * 前端列表
     */
	@IgnoreAuth
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params,YaopinleibieEntity yaopinleibie, 
		HttpServletRequest request){
        EntityWrapper<YaopinleibieEntity> ew = new EntityWrapper<YaopinleibieEntity>();
    	PageUtils page = yaopinleibieService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, yaopinleibie), params), params));
		request.setAttribute("data", page);
        return R.ok().put("data", page);
    }

	/**
     * 列表
     */
    @RequestMapping("/lists")
    public R list( YaopinleibieEntity yaopinleibie){
       	EntityWrapper<YaopinleibieEntity> ew = new EntityWrapper<YaopinleibieEntity>();
      	ew.allEq(MPUtil.allEQMapPre( yaopinleibie, "yaopinleibie")); 
        return R.ok().put("data", yaopinleibieService.selectListView(ew));
    }

	 /**
     * 查询
     */
    @RequestMapping("/query")
    public R query(YaopinleibieEntity yaopinleibie){
        EntityWrapper< YaopinleibieEntity> ew = new EntityWrapper< YaopinleibieEntity>();
 		ew.allEq(MPUtil.allEQMapPre( yaopinleibie, "yaopinleibie")); 
		YaopinleibieView yaopinleibieView =  yaopinleibieService.selectView(ew);
		return R.ok("查询药品类别成功").put("data", yaopinleibieView);
    }
	
    /**
     * 后端详情
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        YaopinleibieEntity yaopinleibie = yaopinleibieService.selectById(id);
        return R.ok().put("data", yaopinleibie);
    }

    /**
     * 前端详情
     */
	@IgnoreAuth
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") Long id){
        YaopinleibieEntity yaopinleibie = yaopinleibieService.selectById(id);
        return R.ok().put("data", yaopinleibie);
    }
    



    /**
     * 后端保存
     */
    @RequestMapping("/save")
    public R save(@RequestBody YaopinleibieEntity yaopinleibie, HttpServletRequest request){
    	yaopinleibie.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(yaopinleibie);

        yaopinleibieService.insert(yaopinleibie);
        return R.ok();
    }
    
    /**
     * 前端保存
     */
    @RequestMapping("/add")
    public R add(@RequestBody YaopinleibieEntity yaopinleibie, HttpServletRequest request){
    	yaopinleibie.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(yaopinleibie);

        yaopinleibieService.insert(yaopinleibie);
        return R.ok();
    }

    /**
     * 修改
     */
    @RequestMapping("/update")
    public R update(@RequestBody YaopinleibieEntity yaopinleibie, HttpServletRequest request){
        //ValidatorUtils.validateEntity(yaopinleibie);
        yaopinleibieService.updateById(yaopinleibie);//全部更新
        return R.ok();
    }
    

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        yaopinleibieService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
    
    /**
     * 提醒接口
     */
	@RequestMapping("/remind/{columnName}/{type}")
	public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request, 
						 @PathVariable("type") String type,@RequestParam Map<String, Object> map) {
		map.put("column", columnName);
		map.put("type", type);
		
		if(type.equals("2")) {
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
			Calendar c = Calendar.getInstance();
			Date remindStartDate = null;
			Date remindEndDate = null;
			if(map.get("remindstart")!=null) {
				Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
				c.setTime(new Date()); 
				c.add(Calendar.DAY_OF_MONTH,remindStart);
				remindStartDate = c.getTime();
				map.put("remindstart", sdf.format(remindStartDate));
			}
			if(map.get("remindend")!=null) {
				Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
				c.setTime(new Date());
				c.add(Calendar.DAY_OF_MONTH,remindEnd);
				remindEndDate = c.getTime();
				map.put("remindend", sdf.format(remindEndDate));
			}
		}
		
		Wrapper<YaopinleibieEntity> wrapper = new EntityWrapper<YaopinleibieEntity>();
		if(map.get("remindstart")!=null) {
			wrapper.ge(columnName, map.get("remindstart"));
		}
		if(map.get("remindend")!=null) {
			wrapper.le(columnName, map.get("remindend"));
		}


		int count = yaopinleibieService.selectCount(wrapper);
		return R.ok().put("count", count);
	}
	
	





}

footable.filter.js
(function ($, w, undefined) {
    if (w.footable === undefined || w.footable === null)
        throw new Error('Please check and make sure footable.js is included in the page and is loaded prior to this script.');

    var defaults = {
        filter: {
            enabled: true,
            input: '.footable-filter',
            timeout: 300,
            minimum: 2,
            disableEnter: false,
            filterFunction: function(index) {
                var $t = $(this),
                    $table = $t.parents('table:first'),
                    filter = $table.data('current-filter').toUpperCase(),
                    text = $t.find('td').text();
                if (!$table.data('filter-text-only')) {
                    $t.find('td[data-value]').each(function () {
                        text += $(this).data('value');
                    });
                }
                return text.toUpperCase().indexOf(filter) >= 0;
            }
        }
    };

    function Filter() {
        var p = this;
        p.name = 'Footable Filter';
        p.init = function (ft) {
            p.footable = ft;
            if (ft.options.filter.enabled === true) {
                if ($(ft.table).data('filter') === false) return;
                ft.timers.register('filter');
                $(ft.table)
                    .unbind('.filtering')
                    .bind({
                        'footable_initialized.filtering': function (e) {
                            var $table = $(ft.table);
                            var data = {
                                'input': $table.data('filter') || ft.options.filter.input,
                                'timeout': $table.data('filter-timeout') || ft.options.filter.timeout,
                                'minimum': $table.data('filter-minimum') || ft.options.filter.minimum,
                                'disableEnter': $table.data('filter-disable-enter') || ft.options.filter.disableEnter
                            };
                            if (data.disableEnter) {
                                $(data.input).keypress(function (event) {
                                    if (window.event)
                                        return (window.event.keyCode !== 13);
                                    else
                                        return (event.which !== 13);
                                });
                            }
                            $table.bind('footable_clear_filter', function () {
                                $(data.input).val('');
                                p.clearFilter();
                            });
                            $table.bind('footable_filter', function (event, args) {
                                p.filter(args.filter);
                            });
                            $(data.input).keyup(function (eve) {
                                ft.timers.filter.stop();
                                if (eve.which === 27) {
                                    $(data.input).val('');
                                }
                                ft.timers.filter.start(function () {
                                    var val = $(data.input).val() || '';
                                    p.filter(val);
                                }, data.timeout);
                            });
                        },
                        'footable_redrawn.filtering': function (e) {
                            var $table = $(ft.table),
                                filter = $table.data('filter-string');
                            if (filter) {
                                p.filter(filter);
                            }
                        }
                })
                //save the filter object onto the table so we can access it later
                .data('footable-filter', p);
            }
        };

        p.filter = function (filterString) {
            var ft = p.footable,
                $table = $(ft.table),
                minimum = $table.data('filter-minimum') || ft.options.filter.minimum,
                clear = !filterString;

            //raise a pre-filter event so that we can cancel the filtering if needed
            var event = ft.raise('footable_filtering', { filter: filterString, clear: clear });
            if (event && event.result === false) return;
            if (event.filter && event.filter.length < minimum) {
              return; //if we do not have the minimum chars then do nothing
            }

          if (event.clear) {
                p.clearFilter();
            } else {
                var filters = event.filter.split(' ');

                $table.find('> tbody > tr').hide().addClass('footable-filtered');
                var rows = $table.find('> tbody > tr:not(.footable-row-detail)');
                $.each(filters, function (i, f) {
                    if (f && f.length > 0) {
                        $table.data('current-filter', f);
                        rows = rows.filter(ft.options.filter.filterFunction);
                    }
                });
                rows.each(function () {
                    p.showRow(this, ft);
                    $(this).removeClass('footable-filtered');
                });
                $table.data('filter-string', event.filter);
                ft.raise('footable_filtered', { filter: event.filter, clear: false });
            }
        };

        p.clearFilter = function () {
            var ft = p.footable,
                $table = $(ft.table);

            $table.find('> tbody > tr:not(.footable-row-detail)').removeClass('footable-filtered').each(function () {
                p.showRow(this, ft);
            });
            $table.removeData('filter-string');
            ft.raise('footable_filtered', { clear: true });
        };

        p.showRow = function (row, ft) {
            var $row = $(row), $next = $row.next(), $table = $(ft.table);
            if ($row.is(':visible')) return; //already visible - do nothing
            if ($table.hasClass('breakpoint') && $row.hasClass('footable-detail-show') && $next.hasClass('footable-row-detail')) {
                $row.add($next).show();
                ft.createOrUpdateDetailRow(row);
            }
            else $row.show();
        };
    }

    w.footable.plugins.register(Filter, defaults);

})(jQuery, window);

声明

本博客适用于广泛的学术和教育用途,包括但不限于个人学习、开发设计,产品设计。仅供学习参考,旨在为读者提供深入理解和学术研究的材料。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值