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

基于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进行开发。替换掉原来的框架。以后系统如果再进行二次开发,将更加的容易,配置起来也更便捷。在进行了以上的优化后,我觉得该系统的应用性将大大提升。

九、源码获取:

链接点击直达:下载链接

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值