基于springboot+vue的儿科保健计划免疫系统

news2024/9/25 3:18:56

基于springboot+vue的儿科保健计划免疫系统

✌全网粉丝20W+,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌

🍅文末获取项目下载方式🍅


一、项目背景介绍:

随着科学技术的发展,尤其是计算机技术、网络技术、多媒体技术、传感技术、控制技术和智能技术的发展,人类进入了信息时代。信息时代的标志是Internet国际互联网的建立。Internet国际互联网将世界各地紧密地联系在一起。于是一个数字化得社区应运而生。
当前,西方发达国家的网络化、智能化、自动化达到很高的水平,已经或正在改变人们的生产方式和生活方式,许多国家的计划免疫部门早已实现无纸化办公,我们国家有些城市已经实现免疫信息管理的网上办公,但是并没有完全普遍,目前随着儿童计划免疫改革的不断深入,如何有效地增强儿童免疫接种信息管理水平,充分提高信息管理的效率已成为计划免疫管理工作的重点之一。

二、项目技术简介:

  1. JAVA:Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。
  2. Vue:Vue (发音为 /vjuː/,类似 view) 是一款用于构建用户界面的JavaScript框架。它基于标准HTML、CSS和JavaScript构建,并提供了一套声明式的、组件化的编程模型,帮助开发者高效地开发用户界面。
    Vue是一个独立的社区驱动的项目,它是由尤雨溪在2014年作为其个人项目创建, 是一个成熟的、经历了无数实战考验的框架,它是目前生产环境中使用最广泛的JavaScript框架之一,可以轻松处理大多数web应用的场景,并且几乎不需要手动优化,并且Vue完全有能力处理大规模的应用。
  3. Element-UI:Element,一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组件库。
  4. Spring:Spring框架是一个开放源代码的J2EE应用程序框架,由Rod Johnson发起,是针对bean的生命周期进行管理的轻量级容器(lightweight container)。 Spring解决了开发者在J2EE开发中遇到的许多常见的问题,提供了功能强大IOC、AOP及Web MVC等功能。Spring可以单独应用于构筑应用程序,也可以和Struts、Webwork、Tapestry等众多Web框架组合使用,并且可以与 Swing等桌面应用程序AP组合。因此, Spring不仅仅能应用于J2EE应用程序之中,也可以应用于桌面应用程序以及小应用程序之中。Spring框架主要由七部分组成,分别是 Spring Core、 Spring AOP、 Spring ORM、 Spring DAO、Spring Context、 Spring Web和 Spring Web MVC。
  5. SpringBoot:Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
  6. Mybatis-Plus:MyBatis-Plus(简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为 简化开发、提高效率而生。
  7. Spring-Mvc:Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的Spring MVC框架或集成其他MVC开发框。
  8. Redis:redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
    Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。
  9. Html:HTML的全称为超文本标记语言,是一种标记语言。它包括一系列标签.通过这些标签可以将网络上的文档格式统一,使分散的Internet资源连接为一个逻辑整体。HTML文本是由HTML命令组成的描述性文本,HTML命令可以说明文字,图形、动画、声音、表格、链接等。
    超文本是一种组织信息的方式,它通过超级链接方法将文本中的文字、图表与其他信息媒体相关联。这些相互关联的信息媒体可能在同一文本中,也可能是其他文件,或是地理位置相距遥远的某台计算机上的文件。这种组织信息方式将分布在不同位置的信息资源用随机方式进行连接,为人们查找,检索信息提供方便。
  10. shiro:Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。

三、系统功能模块介绍:

功能模块图

四、数据库设计:

1:QRTZ_BLOB_TRIGGERS(QRTZ_BLOB_TRIGGERS)

字段名类型默认值列注释
SCHED_NAMEvarchar(120)NULL
TRIGGER_NAMEvarchar(200)NULL
TRIGGER_GROUPvarchar(200)NULL
BLOB_DATAblobNULL

2:QRTZ_CALENDARS(QRTZ_CALENDARS)

字段名类型默认值列注释
SCHED_NAMEvarchar(120)NULL
CALENDAR_NAMEvarchar(200)NULL
CALENDARblobNULL

3:QRTZ_CRON_TRIGGERS(QRTZ_CRON_TRIGGERS)

字段名类型默认值列注释
SCHED_NAMEvarchar(120)NULL
TRIGGER_NAMEvarchar(200)NULL
TRIGGER_GROUPvarchar(200)NULL
CRON_EXPRESSIONvarchar(120)NULL
TIME_ZONE_IDvarchar(80)NULL

4:QRTZ_FIRED_TRIGGERS(QRTZ_FIRED_TRIGGERS)

字段名类型默认值列注释
SCHED_NAMEvarchar(120)NULL
ENTRY_IDvarchar(95)NULL
TRIGGER_NAMEvarchar(200)NULL
TRIGGER_GROUPvarchar(200)NULL
INSTANCE_NAMEvarchar(200)NULL
FIRED_TIMEbigint(13)NULL
SCHED_TIMEbigint(13)NULL
PRIORITYint(11)NULL
STATEvarchar(16)NULL
JOB_NAMEvarchar(200)NULL
JOB_GROUPvarchar(200)NULL
IS_NONCONCURRENTvarchar(1)NULL
REQUESTS_RECOVERYvarchar(1)NULL

5:QRTZ_JOB_DETAILS(QRTZ_JOB_DETAILS)

字段名类型默认值列注释
SCHED_NAMEvarchar(120)NULL
JOB_NAMEvarchar(200)NULL
JOB_GROUPvarchar(200)NULL
DESCRIPTIONvarchar(250)NULL
JOB_CLASS_NAMEvarchar(250)NULL
IS_DURABLEvarchar(1)NULL
IS_NONCONCURRENTvarchar(1)NULL
IS_UPDATE_DATAvarchar(1)NULL
REQUESTS_RECOVERYvarchar(1)NULL
JOB_DATAblobNULL

6:QRTZ_LOCKS(QRTZ_LOCKS)

字段名类型默认值列注释
SCHED_NAMEvarchar(120)NULL
LOCK_NAMEvarchar(40)NULL

7:QRTZ_PAUSED_TRIGGER_GRPS(QRTZ_PAUSED_TRIGGER_GRPS)

字段名类型默认值列注释
SCHED_NAMEvarchar(120)NULL
TRIGGER_GROUPvarchar(200)NULL

8:QRTZ_SCHEDULER_STATE(QRTZ_SCHEDULER_STATE)

字段名类型默认值列注释
SCHED_NAMEvarchar(120)NULL
INSTANCE_NAMEvarchar(200)NULL
LAST_CHECKIN_TIMEbigint(13)NULL
CHECKIN_INTERVALbigint(13)NULL

9:QRTZ_SIMPLE_TRIGGERS(QRTZ_SIMPLE_TRIGGERS)

字段名类型默认值列注释
SCHED_NAMEvarchar(120)NULL
TRIGGER_NAMEvarchar(200)NULL
TRIGGER_GROUPvarchar(200)NULL
REPEAT_COUNTbigint(7)NULL
REPEAT_INTERVALbigint(12)NULL
TIMES_TRIGGEREDbigint(10)NULL

10:QRTZ_SIMPROP_TRIGGERS(QRTZ_SIMPROP_TRIGGERS)

字段名类型默认值列注释
SCHED_NAMEvarchar(120)NULL
TRIGGER_NAMEvarchar(200)NULL
TRIGGER_GROUPvarchar(200)NULL
STR_PROP_1varchar(512)NULL
STR_PROP_2varchar(512)NULL
STR_PROP_3varchar(512)NULL
INT_PROP_1int(11)NULL
INT_PROP_2int(11)NULL
LONG_PROP_1bigint(20)NULL
LONG_PROP_2bigint(20)NULL
DEC_PROP_1VARCHAR(255)NULL

11:QRTZ_TRIGGERS(QRTZ_TRIGGERS)

字段名类型默认值列注释
SCHED_NAMEvarchar(120)NULL
TRIGGER_NAMEvarchar(200)NULL
TRIGGER_GROUPvarchar(200)NULL
JOB_NAMEvarchar(200)NULL
JOB_GROUPvarchar(200)NULL
DESCRIPTIONvarchar(250)NULL
NEXT_FIRE_TIMEbigint(13)NULL
PREV_FIRE_TIMEbigint(13)NULL
PRIORITYint(11)NULL
TRIGGER_STATEvarchar(16)NULL
TRIGGER_TYPEvarchar(8)NULL
START_TIMEbigint(13)NULL
END_TIMEbigint(13)NULL
CALENDAR_NAMEvarchar(200)NULL
MISFIRE_INSTRsmallint(2)NULL
JOB_DATAblobNULL

12:appointment(appointment)

字段名类型默认值列注释
idint(11)NULLID
user_namevarchar(50)NULL用户名
namevarchar(50)NULL真实姓名
gendervarchar(50)NULL性别
appoint_datedateNULL接种日期
timevarchar(50)NULL日期
appoint_sitevarchar(50)NULL服务点
which_pinvarchar(50)NULL针数
vaccinevarchar(50)NULL疫苗
statusvarchar(20)NULL

13:banners(banners)

字段名类型默认值列注释
banner_idint(11)NULL
contentvarchar(255)NULL知识内容
image_urlvarchar(500)NULL
sortint(10)NULL排序
is_showint(10)NULL是否展示
titlevarchar(50)NULL

14:history(history)

字段名类型默认值列注释
idint(11)NULL
namevarchar(255)NULL
phonevarchar(255)NULL
gendervarchar(255)NULL
ageint(11)NULL
first_pinint(255)NULL
second_pinint(255)NULL
first_datedatetime(0)NULL
second_datedatetime(0)NULL
user_namevarchar(255)NULL

15:inoculation_site(inoculation_site)

字段名类型默认值列注释
idint(11)NULL
namevarchar(255)NULL
provincevarchar(255)NULL
cityvarchar(255)NULL
addressvarchar(255)NULL

16:inspection(inspection)

字段名类型默认值列注释
registration_idint(11)NULLID
usernamevarchar(10)NULL姓名
cardvarchar(20)NULL身份证
addressvarchar(50)NULL住址
sexvarchar(10)NULL性别
phonevarchar(20)NULL手机号
check_catevarchar(20)NULL预检状态
create_timedatetime(0)NULL预检日期
handle_statusvarchar(10)NULL处理状态

17:options(options)

字段名类型默认值列注释
option_idint(11)NULL
contentvarchar(255)NULL
opt_typevarchar(10)NULLA

18:pi_sign(pi_sign)

字段名类型默认值列注释
sign_idint(11)NULLID
user_idvarchar(10)NULL用户id
usernamevarchar(10)NULL签到人
nicknamevarchar(10)NULL职业
create_timedatetime(0)NULL创建时间

19:questions(questions)

字段名类型默认值列注释
question_idint(10)NULL
que_typetinyint(1)NULL问题类型:0:单选;1:多选;
contentvarchar(255)NULL问题内容
answervarchar(255)NULL答案
scoreint(10)NULL分数
from_datavarchar(20)NULL题库

20:schedule_job(schedule_job)

字段名类型默认值列注释
job_idbigint(20)NULL任务id
bean_namevarchar(200)NULLspringbean名称
paramsvarchar(2000)NULL参数
cron_expressionvarchar(100)NULLcron表达式
statustinyint(4)NULL任务状态0:正常1:暂停
remarkvarchar(255)NULL备注
create_timedatetime(0)NULL创建时间

21:schedule_job_log(schedule_job_log)

字段名类型默认值列注释
log_idbigint(20)NULL任务日志id
job_idbigint(20)NULL任务id
bean_namevarchar(200)NULLspringbean名称
paramsvarchar(2000)NULL参数
statustinyint(4)NULL任务状态0:成功1:失败
errorvarchar(2000)NULL失败信息
timesint(11)NULL耗时(单位:毫秒)
create_timedatetime(0)NULL创建时间

22:stay(stay)

字段名类型默认值列注释
idint(11)NULLID
user_namevarchar(255)NULL姓名
phonevarchar(255)NULL电话
reasonvarchar(255)NULL留观原因
create_timedatetime(0)NULL留观时间

23:sys_captcha(sys_captcha)

字段名类型默认值列注释
uuidchar(36)NULLuuid
codevarchar(6)NULL验证码
expire_timedatetime(0)NULL过期时间

24:sys_config(sys_config)

字段名类型默认值列注释
idbigint(20)NULL
param_keyvarchar(50)NULLkey
param_valuevarchar(2000)NULLvalue
statustinyint(4)NULL状态0:隐藏1:显示
remarkvarchar(500)NULL备注

25:sys_log(sys_log)

字段名类型默认值列注释
idbigint(20)NULL
usernamevarchar(50)NULL用户名
operationvarchar(50)NULL用户操作
methodvarchar(200)NULL请求方法
paramsvarchar(5000)NULL请求参数
timebigint(20)NULL执行时长(毫秒)
ipvarchar(64)NULLIP地址
create_datedatetime(0)NULL创建时间

26:sys_menu(sys_menu)

字段名类型默认值列注释
menu_idbigint(20)NULL
parent_idbigint(20)NULL父菜单ID,一级菜单为0
namevarchar(50)NULL菜单名称
urlvarchar(200)NULL菜单URL
permsvarchar(500)NULL授权(多个用逗号分隔,如:user:list

27:sys_oss(sys_oss)

字段名类型默认值列注释
idbigint(20)NULL
urlvarchar(200)NULLURL地址
create_datedatetime(0)NULL创建时间

28:sys_role(sys_role)

字段名类型默认值列注释
role_idbigint(20)NULL
role_namevarchar(100)NULL角色名称
remarkvarchar(100)NULL备注
create_user_idbigint(20)NULL创建者ID
create_timedatetime(0)NULL创建时间

29:sys_role_menu(sys_role_menu)

字段名类型默认值列注释
idbigint(20)NULL
role_idbigint(20)NULL角色ID
menu_idbigint(20)NULL菜单ID

30:sys_user(sys_user)

字段名类型默认值列注释
user_idbigint(20)NULL
usernamevarchar(50)NULL用户名
passwordvarchar(100)NULL密码
saltvarchar(20)NULL
emailvarchar(100)NULL邮箱
mobilevarchar(100)NULL手机号
statustinyint(4)NULL状态0:禁用1:正常
create_user_idbigint(20)NULL创建者ID
create_timedatetime(0)NULL创建时间
gendervarchar(10)NULL
ageint(11)NULL
cardvarchar(255)NULL
addressvarchar(255)NULL

31:sys_user_role(sys_user_role)

字段名类型默认值列注释
idbigint(20)NULL
user_idbigint(20)NULL用户ID
role_idbigint(20)NULL角色ID

32:sys_user_token(sys_user_token)

字段名类型默认值列注释
user_idbigint(20)NULL
tokenvarchar(100)NULLtoken
expire_timedatetime(0)NULL过期时间
update_timedatetime(0)NULL更新时间

33:tb_user(tb_user)

字段名类型默认值列注释
user_idbigint(20)NULL
usernamevarchar(50)NULL用户名
mobilevarchar(20)NULL手机号
passwordvarchar(64)NULL密码
create_timedatetime(0)NULL创建时间

34:user_exam(user_exam)

字段名类型默认值列注释
exam_idint(11)NULL
nick_namevarchar(100)NULL
gendervarchar(10)NULL
avatar_urlvarchar(255)NULL
scoreint(10)NULL

35:user_info(user_info)

字段名类型默认值列注释
idint(11)NULL
user_namevarchar(255)NULL
real_namevarchar(255)NULL
gendervarchar(255)NULL
ageint(11)NULL
cardvarchar(255)NULL
phonevarchar(255)NULL
addressvarchar(255)NULL

36:user_score(user_score)

字段名类型默认值列注释
score_idint(10)NULL
dan_scoreint(10)NULL
duo_scoreint(10)NULL
write_scoreint(10)NULL
total_scoreint(10)NULL

37:vaccines_info(vaccines_info)

字段名类型默认值列注释
idint(11)NULL
inoculation_sitevarchar(255)NULL
namevarchar(255)NULL
typevarchar(255)NULL
productionvarchar(255)NULL
batch_numbervarchar(50)NULL
describvarchar(255)NULL

38:wx_user(wx_user)

字段名类型默认值列注释
user_idint(10)NULL
usernamevarchar(50)NULL用户名
passwordvarchar(50)NULL密码
phonevarchar(50)NULL电话
user_avatarvarchar(100)NULL头像
create_timedatetime(0)NULL创建时间
nicknamevarchar(50)NULL昵称
sexvarchar(10)NULL性别

五、功能模块:

  1. 系统登入模块:该模块主要是用户进行登录的模块,在该页面用户输入自己的账号和密码,验证码是用随机数来进行生成的,是完全随机的,输入验证码要与旁边验证码要一致。然后点击登录,登录成功后就进入主页面了。
    这小节主要是介绍登录功能的设计,然后是讲述登录功能是如何实现的。当你在地址栏输入该系统的网络地址,进入到本页面。然后输入自己的账号和密码,输入的时候要考虑几个注意事项。账号和密码都不能为空,为空会提示账号或密码不能为空。当输入完用户名密码后,选择自己的角色,每个角色的页面都是不一样的,功能也是有所不同。最后就是输入验证码,验证码是用ArithmeticCaptcha这个类来进行生成的,这个类是一个验证码生成的类,使用该类可以生成一个算术的验证码,调用里面的setLen方法可以定义几位数的算法来进行运算,最后调用toBase64方法把生成的验证码转化为一个。最后使用一个map集合进行封装,返回给前端验证。在前台我们要经过一个二位数的算数运算得出结果,并填写在输入框。如果我们不进行填写,直接提交的话,会提示验证码未输入。如果验证码输入错误,也会提示验证码错误。
    在访问该系统登录时,后台会进行拦截,这里讲一下后台是怎么配置的。在进行登录的时候,会发起一个doLogin请求,后台会进行一个拦截。首先请求必须是post请求,不然直接返回异常信息。然后就是验证码的校验,如果验证码为空,会提示验证码不存在。当你每次提交验证码都会通过session进行缓存,如果再次请求验证码,就会提示验证码过期。你输入的验证码必须和里面算出来的结果一致,不然就会提示验证码不匹配。如果中间出现任何异常,都会配catch抓获AuthenticationException类的一个异常。只有验证码通过以后才会与后台数据库进行交互,与数据库中的账户进行一一匹配,匹配成功,就会进入到主页面。但是在在此期间使用了Spring shiro来进行登录的鉴权。首先定义一个SecurityConfig配置类来继承WebSecurityConfigurerAdapter主类。我们需要往里面注入BCryptPasswordEncoder依赖。然后我们需要重写里面的configure方法,然后在里面配置放行的请求路径,比如"/login",还有我们所需要的静态资源。然后最主要的是protect修饰的configure类,我们需要传一个HttpSecurity作为参数。这里主要是各种执行器来进行操作,包括使用withObjectPostProcessor对后台传过来的参数和url做一个处理,使用successHandler或者failureHandler对登录成功和失败的一个回调,使用authenticationEntryPoint做一个鉴权等等。具体的数据交互在AuthenticationManagerBuilder里面,我们需要自定义一个service然后继承UserDetailsService,然后我们就可以进行一系列数据库操作,将我们自定义的service类注入到AuthenticationManagerBuilder中,然后SecurityConfig就可以为我们到数据库进行查询然后对角色进行登录鉴权。

    系统登入模块

  2. 用户首页模块:儿科保健系统首页界面实现了对数据得到统计的展示功能

    用户首页模块

  3. 用户签到模块:用户可以在用户签到模块对自己进行签到

    用户签到模块

  4. 疫苗预约模块:用户可以在疫苗预约模块对自己需要的疫苗进行预约

    疫苗预约模块

  5. 接种管理模块:接种管理模块在这个模块管理员可以对用户接种疫苗信息进行管理

    接种管理模块

六、代码示例:

系统登入模块
 protected void configure(HttpSecurity http) throws Exception {
        http.addFilterBefore(verifyCodeFilter, UsernamePasswordAuthenticationFilter.class)
                .authorizeRequests()
                //.anyRequest().authenticated()
                .withObjectPostProcessor(new ObjectPostProcessor<FilterSecurityInterceptor>() {
                    @Override
                    public <O extends FilterSecurityInterceptor> O postProcess(O object) {
                        object.setAccessDecisionManager(customUrlDecisionManager);
                        object.setSecurityMetadataSource(customFilterInvocationSecurityMetadataSource);
                        return object;
                    }
                })
                .and().formLogin().usernameParameter("username").passwordParameter("password").loginProcessingUrl("/doLogin")
                .loginPage("/login")
                //登录成功回调
                .successHandler(new AuthenticationSuccessHandler() {
                    @Override
                    public void onAuthenticationSuccess(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Authentication authentication) throws IOException, ServletException {
                        httpServletResponse.setContentType("application/json;charset=utf-8");
                        PrintWriter out = httpServletResponse.getWriter();
                        Hr hr = (Hr) authentication.getPrincipal();
                        //密码不回传
                        hr.setPassword(null);
                        RespBean ok = RespBean.ok("登录成功!", hr);
                        //将hr转化为Sting
                        String s = new ObjectMapper().writeValueAsString(ok);
                        out.write(s);
                        out.flush();
                        out.close();
                    }
                })
                //登失败回调
                .failureHandler(myAuthenticationFailureHandler)
                //相关的接口直接返回
                .permitAll()
                .and()
                .logout()
                //注销登录
                // .logoutSuccessUrl("")
                .logoutSuccessHandler(new LogoutSuccessHandler() {
                    @Override
                    public void onLogoutSuccess(HttpServletRequest httpServletRequest,
                                                HttpServletResponse httpServletResponse,
                                                Authentication authentication) throws IOException, ServletException {
                        httpServletResponse.setContentType("application/json;charset=utf-8");
                        PrintWriter out = httpServletResponse.getWriter();
                        out.write(new ObjectMapper().writeValueAsString(RespBean.ok("注销成功!")));
                        out.flush();
                        out.close();
                    }
                })
                .permitAll()
                .and()
                .csrf().disable().exceptionHandling()
                //没有认证时,在这里处理结果,不要重定向
                .authenticationEntryPoint(new AuthenticationEntryPoint() {
                    @Override
                    public void commence(HttpServletRequest req, HttpServletResponse resp, AuthenticationException authException) throws IOException, ServletException {
                        resp.setContentType("application/json;charset=utf-8");
                        resp.setStatus(401);
                        PrintWriter out = resp.getWriter();
                        RespBean respBean = RespBean.error("访问失败!");
                        if (authException instanceof InsufficientAuthenticationException) {
                            respBean.setMsg("请求失败,请联系管理员!");
                        }
                        out.write(new ObjectMapper().writeValueAsString(respBean));
                        out.flush();
                        out.close();
                    }
                });}

用户首页模块
    @Bean
    public SchedulerFactoryBean schedulerFactoryBean(DataSource dataSource) {
        SchedulerFactoryBean factory = new SchedulerFactoryBean();
        factory.setDataSource(dataSource);

        //quartz参数
        Properties prop = new Properties();
        prop.put("org.quartz.scheduler.instanceName", "RenrenScheduler");
        prop.put("org.quartz.scheduler.instanceId", "AUTO");
        //线程池配置
        prop.put("org.quartz.threadPool.class", "org.quartz.simpl.SimpleThreadPool");
        prop.put("org.quartz.threadPool.threadCount", "20");
        prop.put("org.quartz.threadPool.threadPriority", "5");
        //JobStore配置
        prop.put("org.quartz.jobStore.class", "org.quartz.impl.jdbcjobstore.JobStoreTX");
        //集群配置
        prop.put("org.quartz.jobStore.isClustered", "true");
        prop.put("org.quartz.jobStore.clusterCheckinInterval", "15000");
        prop.put("org.quartz.jobStore.maxMisfiresToHandleAtATime", "1");

        prop.put("org.quartz.jobStore.misfireThreshold", "12000");
        prop.put("org.quartz.jobStore.tablePrefix", "QRTZ_");
        prop.put("org.quartz.jobStore.selectWithLockSQL", "SELECT * FROM {0}LOCKS UPDLOCK WHERE LOCK_NAME = ?");

        //PostgreSQL数据库,需要打开此注释
        //prop.put("org.quartz.jobStore.driverDelegateClass", "org.quartz.impl.jdbcjobstore.PostgreSQLDelegate");

        factory.setQuartzProperties(prop);

        factory.setSchedulerName("RenrenScheduler");
        //延时启动
        factory.setStartupDelay(30);
        factory.setApplicationContextSchedulerContextKey("applicationContextKey");
        //可选,QuartzScheduler 启动时更新己存在的Job,这样就不用每次修改targetObject后删除qrtz_job_details表对应记录了
        factory.setOverwriteExistingJobs(true);
        //设置自动启动,默认为true
        factory.setAutoStartup(true);

        return factory;
    }
}
用户签到模块
 @PostMapping("/blurredQuery")
    public Result<List> blurredQuery(@RequestBody @NotNull Map<String,String> map) {
        Result<List> result = new Result<>();
        List<Employee> employeeList = employeeService.getAllEmployee();
        List<Employee> list = new ArrayList<>();
        if (map.get("name").equals("") && map.get("state").equals("")) {
            result.setCode(200);
            result.setMsg("查询成功,条件无");
            result.setSuccess(true);
            result.setData(employeeList);
        } else if ((!map.get("name").equals("")) && map.get("state").equals("")) {
//            employeeList.forEach((item) -> {
//                if (item.getName().equals(map.get("name"))) {
//                    result.setData(item);
//                }
//            });
            for (Employee e : employeeList) {
                if (map.get("name").equals(e.getName())) {
                    list.add(e);
                    result.setCode(200);
                    result.setMsg("查询成功");
                    result.setSuccess(true);
                }
            }
            result.setData(list);
        } else if (map.get("name").equals("") && !map.get("state").equals("")) {
            for (Employee e : employeeList) {
                if (map.get("state").equals(e.getState())) {
                    list.add(e);
                }
            }
            result.setCode(200);
            result.setMsg("查询成功");
            result.setSuccess(true);
            result.setData(list);
        } else {
            for (Employee e : employeeList) {
                if (map.get("state").equals(e.getState()) && map.get("name").equals(e.getName())) {
                    list.add(e);
                }
            }
            result.setCode(200);
            result.setMsg("查询成功");
            result.setSuccess(true);
            result.setData(list);
        }
        return result;
    }
疫苗预约模块
@ApiOperation("/新增预约")
    @PostMapping("/addOneAppointment")
    public R addOneAppointment(@RequestBody Appointment appointment) {
        String username = ((SysUserEntity) SecurityUtils.getSubject().getPrincipal()).getUsername();
        appointment.setUserName(username);
        appointment.setStatus("已预约");
        appointmentService.addOne(appointment);
        return R.ok().put("info", "预约成功");
    }

    @ApiOperation("/取消预约")
    @GetMapping("/cancelAppointment")
    public Result<Appointment> cancelAppointment(@RequestParam String userName) {
        Result<Appointment> result = new Result<>();
        result.setMsg("取消预约失败");
        result.setCode(400);
        if (userName.equals("")) {
            result.setMsg("参数为空");
            result.setCode(400);
            result.setSuccess(false);
            result.setData(null);
        } else {
            if (appointmentService.findByUserName(userName) == null) {
                result.setCode(200);
                result.setSuccess(true);
                result.setMsg("您还未预约");
            } else {
                appointmentService.cancelOne(userName);
                result.setCode(200);
                result.setMsg("取消预约成功");
                result.setSuccess(true);
            }
        }
        return result;
    }

    @ApiOperation("/根据日期查询预约")
    @GetMapping("/findByDate")
    public Result<List> findByDate(@RequestParam Date date) {
        Result<List> result = new Result<>();
        result.setMsg("查询预约失败");
        result.setCode(400);
        if (date == null) {
            result.setMsg("参数为空");
            result.setCode(400);
            result.setSuccess(false);
        } else {
            List<Appointment> appointmentList = appointmentService.findByDate(date);
            if (appointmentList == null) {
                result.setSuccess(false);
                result.setCode(400);
                result.setMsg("该日期没有预约");
            } else {
                result.setMsg("查询成功");
                result.setCode(200);
                result.setSuccess(true);
                result.setData(appointmentList);
            }
        }
        return result;
    }

接种管理模块
    @ApiOperation("/根据省或市查询具体接种点")
    @PostMapping("/findBySiteInfo")
    public Result<List> findBySiteInfo(@RequestBody InoculationSiteInfo siteInfo){
        Result<List> result = new Result<>();
        if (siteInfo == null){
            result.setMsg("参数为空");
            result.setCode(400);
            result.setSuccess(false);
        } else {
            if ( siteInfo.getCity().equals("") ) {
                List<InoculationSite> inoculationSiteList =
                        inoculationSiteService.findByProvince(siteInfo.getProvince());
                result.setData(inoculationSiteList);
                result.setCode(200);
                result.setSuccess(true);
                result.setMsg("成功");
            } else {
                List<InoculationSite> inoculationSiteList =
                        inoculationSiteService.findByProvinceAndCity(siteInfo);
                result.setCode(200);
                result.setSuccess(true);
                result.setMsg("成功");
                result.setData(inoculationSiteList);
            }
        }
        return result;
    }

七、论文参考:

八、项目总结:

网络时代的即将到来,给人类带来的冲击是前所未有的,同时它也为信息管理提供了实现飞跃的机遇。信息的管理要面向现代化、面向世界、面向未来,首先要面向网络。只有与网络有机结合,才能跟上时代的发展,有了网络通过不同的权限设置可以对不同的登陆者进行相应的操作,我的这个系统就本着这种方向去实现。
由于时间仓促的问题,系统存在着些许的不足之处,系统所用的框架比较老旧,以后的维护可能存在一些潜在的问题,没有用现在比较前沿的框架,程序员就是应该不断创新,不断学习。只有这样才能更好提升自我。再就是后台异常的处理,比如你登录该系统时路径不正确或错误,应该是要跳转到404页面或者是其他异常页面,我没有对其进行处理,主要是前面页面功能花了太多时间,后面没有太多的时间进行优化。
在将来,系统在以下几个方面进行优化。首先对于系统整个进行优化处理,像页面的美化,页面是用户进行交互的界面,好的页面对用户来说,更加的友好,操作也更舒服。还有异常页面的拦截,用户输入了一个错误的地址,应该被后台拦截,然后跳转到一个自己设计好的页面。这样用户才能知道自己究竟哪里出问题了。最后就是框架,我将采用SpringCloud+Vue进行开发。替换掉原来的框架。以后系统如果再进行二次开发,将更加的容易,配置起来也更便捷。在进行了以上的优化后,我觉得该系统的应用性将大大提升。

九、源码获取:

链接点击直达:下载链接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/354919.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HDMI协议介绍

HDMI全称&#xff08;High Definition Multimedia Interface&#xff09;高清多媒体接口&#xff0c;支持在单线缆上传输全数字高清视频和多声道音频。 HDMI基于TMDS协议传输&#xff0c;主要用于DVD, 机顶盒等音视频source到TV&#xff0c;显示器等sink设备的传输。HDMI向下兼…

SpringBoot学习笔记:SpringBoot集成JPA-01

文章目录概述JPA的优点在Springboot中集成步骤1.新建springboot项目步骤2.引入相关jar包&#xff0c;pom.xml文件如下:步骤3. 配置文件application.properties设置步骤4. 定义表的ORM对象类步骤5. 实现数据库操作接口(Dao)步骤6. 实现Controller测试概述 JPA是一种规范&#x…

PHP学习笔记(一谦四益)

前言 上一篇文章 PHP学习笔记&#xff08;观隅反三&#xff09;分享了数组的知识&#xff0c;这篇文章接着分享和数组相关的算法。 算法效率 算法效率分为两种&#xff1a;第一种是时间效率&#xff0c;第二种是空间效率。时间效率被称为时间复杂度&#xff0c;而空间效率被称…

SpringSecurity认证

文章目录登陆校验流程依赖yaml实现建表、工具类、实体类加密器、AuthenticationManager登录逻辑登录过滤器、配置过滤器登出登陆校验流程 认证 登录&#xff1a; ​ ①自定义登录接口 ​ 调用ProviderManager的方法进行认证 如果认证通过生成token&#xff0c;根据userId把用…

国密SM2算法(JS加密,C#、Java解密)

常见的渗透测试会将网站登录时密码使用明文传输视为风险。推荐使用国密算法或者RSA算法对密码进行加密传输。 RSA加密&#xff08;JS加密&#xff0c;C#、Java解密&#xff09;请参考《RSA对称加密&#xff08;JS加密&#xff0c;C#、Java解密&#xff09;》​​​​​​ 本文…

数据的进制转换以及算术逻辑运算

1.数据的进制转化 进制的表示&#xff1a;二进制、十六进制&#xff0c;二进制符号位0b&#xff0c;一般表示为0b0011&#xff0c;十六进制符号位0x或H&#xff0c;可以表示为0x18F或18FR进制整数转十进制&#xff1a;位权展开法&#xff0c;用R进制数的每一位乘以R的n次方&am…

C++——二叉树排序树

文章目录1 二叉搜索树概念2 二叉搜索树操作与模拟实现2.1 二叉搜索树的查找非递归版本递归版本2.2 二叉搜索树的插入非递归版本递归版本2.3 二叉搜索树的删除非递归版本递归版本3 二叉搜索树的应用&#xff08;K模型、KV模型&#xff09;4 二叉搜索树的性能分析1 二叉搜索树概念…

Go语言设计与实现 -- 反射

Go的反射有哪些应用&#xff1f; IDE中代码的自动补全对象序列化fmt函数的相关实现ORM框架 什么情况下需要使用反射&#xff1f; 不能明确函数调用哪个接口&#xff0c;需要根据传入的参数在运行时决定。不能明确传入函数的参数类型&#xff0c;需要在运行时处理任意对象。 …

1.TCP、UDP区别、TCP/IP七层、四层模型、应用层协议(计网)

文章目录1.OSI 七层模型是什么&#xff1f;每一层的作用是什么&#xff1f;2.TCP/IP 四层模型是什么&#xff1f;每一层的作用是什么&#xff1f;应用层&#xff08;Application layer&#xff09;传输层&#xff08;Transport layer&#xff09;网络层&#xff08;Network lay…

百度工程师带你探秘C++内存管理

一、概述 ptmalloc是开源GNU C Library(glibc)默认的内存管理器&#xff0c;当前大部分Linux服务端程序使用的是ptmalloc提供的malloc/free系列函数&#xff0c;而它在性能上远差于Meta的jemalloc和Google的tcmalloc。服务端程序调用ptmalloc提供的malloc/free函数申请和释放内…

Datawhale组队学习:大数据 D2——分布式文件系统(HDFS)

妙趣横生大数据 Day2三、Hadoop 分布式文件系统(HDFS)1. 分布式文件系统2. HDFS 简介3. HDFS 体系结构4. HDFS存储原理数据冗余存储数据存储策略数据错误与恢复5. HDFS数据读写过程读写过程HDFS故障类型和其检测方法HDFS编程实验1. 本地和集群文件间操作2. 基本文件操作3. Hado…

Java基本语法【未完待续】

目录 一、注释方式 1、单行注释 // 2、多行注释 /*...*/ 3、文档注释 /**....*/ 二、标识符和关键字 三、数据类型 拓展及面试题讲解 1、整数拓展 进制 二进制0b 八进制0 十六进制0x 2、字符拓展 编码Unicode表 2字节 0~65536 3、字符串拓展 4、布尔值拓展 四、类型…

CleanMyMac X软件下载及详细功能介绍

mac平台的知名系统清理应用CleanMyMac在经历了一段时间的测试后&#xff0c;全新设计的X正式上线。与CleanMyMac3相比&#xff0c;新版本的UI设计焕然一新&#xff0c;采用了完全不同的风格。使用Windows电脑时&#xff0c;很多人会下载各类优化软件&#xff0c;而在Mac平台中&…

jsp高校教职工管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 jsp 高校教职工管理系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助mvc模式 serlvetdaobean方式开发&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式 开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#…

tomcat安装和配置

目录 1.下载tomcat 2.解压tomcat压缩包 3.配置端口号 4.启动 命令行窗口日志乱码的解决 5.验证 tomcat 如果已经安装配置过jdk&#xff0c;则向下执行&#xff0c;若无&#xff0c;请先安装jdk。 1.下载tomcat 路径&#xff1a; Apache Tomcat - Apache Tomcat 9 Sof…

Windows 系统从零配置 Python 环境,安装CUDA、CUDNN、PyTorch 详细教程

文章目录1 配置 python 环境1.1 安装 Anaconda1.2 检查环境安装成功1.3 创建虚拟环境1.4 进入/退出 刚刚创建的环境1.5 其它操作1.5.1 查看电脑上所有已创建的环境1.5.2 删除已创建的环境2 安装 CUDA 和 CUDNN2.1 查看自己电脑支持的 CUDA 版本2.2 安装 CUDA2.3 安装 CUDNN2.4 …

LabVIEW中CPU和内存使用情况在NI分布式系统管理器中不可见

LabVIEW中CPU和内存使用情况在NI分布式系统管理器中不可见想使用NI分布式系统管理器监测网络连接实时控制器的CPU和内存使用情况。从左侧窗口的树中选择了感兴趣的实时目标&#xff0c;然后通过选择视图自动视图来确保启用自动查看。希望看到CPU/内存选项卡&#xff0c;但它有显…

算法导论【在线算法】—The Ski-Rental Problem、The Lost Cow Problem、The Secretary Problem

算法导论【在线算法】The Ski-Rental Problem问题描述在线算法证明The Lost Cow Problem问题描述在线算法类似问题—寻宝藏The Secretary Problem问题描述在线算法The Best Possible kThe Ski-Rental Problem 问题描述 假设你正在上滑雪课。每节课结束后&#xff0c;你决定&a…

【Element】el-table 表格

目录 ElementUI 表格分页&#xff08;每页20条&#xff09; 表格分页&#xff08;全部数据&#xff09; 表格排序&#xff08;全部数据&#xff09; 表格排序&#xff08;默认&#xff09; 两个el-table冲突 加载数据前显示“ 暂无数据 ” 表格项为路由 表头样式 树形…

Homebrew 安装遇到的问题

Homebrew 安装遇到的问题 例如&#xff1a;第一章 Python 机器学习入门之pandas的使用 文章目录Homebrew 安装遇到的问题前言一、安装二、遇到的问题1.提示 zsh: command not found: brew三、解决问题前言 使用 Homebrew 能够 安装 Apple&#xff08;或您的 Linux 系统&#…