【课程设计】基于SpringBoot的乡村政务服务系统的设计与实现-计算机毕设77011

基于SpringBoot的乡村政务服务系统

第一章 相关技术介绍

1.1 Spring Boot框架

  Spring Boot框架是基于Spring生态系统创建的,用自动配置的方式简化了传统Spring应用的初始化和配置。该框架使用约定优于配置的设计思想,开发者不需要手动编写大量的XML配置文件就可以快速地搭建出独立运行的应用程序13。Spring Boot自带嵌入式Tomcat服务器,将项目打包成JAR文件之后可以直接运行,降低部署环境的依赖复杂程度。框架给出的starter依赖管理功能可以自动引入相关的技术栈依赖包,从而避免出现版本冲突的问题。Spring Boot属于乡村政务服务系统后端的主要框架,它负责前端发出HTTP请求的任务,并且还要执行业务逻辑以及调用数据持久层接口等工作。框架的自动配置特性可以使得系统很快地整合MyBatis等持久层组件,简化数据库操作代码的编写工作。Spring Boot的拦截器可以对所有的请求日志进行统一的处理,也可以对所有的权限进行统一的检查,还可以对所有的异常进行统一的捕获,从而保证服务层代码的整洁性。

1.2 Vue.js框架

  Vue.js是基于JavaScript的渐进式前端框架,主要用来创建用户界面以及单页面应用。此框架采用声明式的渲染方式和组件化开发的方式,把页面划分成可以重复使用的独立的组件单元,从而降低代码间的耦合度14。Vue.js的核心库只负责视图层,用虚拟DOM技术来完成快速的页面更新。框架所具有的响应式数据绑定功能可以使得模型数据和视图状态实现自动同步,从而降低手动修改DOM元素的工作量。在乡村政务服务系统当中,Vue.js被用来创建前端界面,从而达成政务信息列表的展现,服务申请表单的提交以及办理进度的查询这些交互操作。框架的路由管理模块可以实现页面级别的导航控制,在不同的功能模块之间切换的时候不需要重新加载整个页面。组件化开发方式使系统中经常出现的表格、表单、弹窗等界面组件可以被多次使用,从而提高开发效率和代码的可维护性。Vue.js与后端RESTful API配合,通过axios库发送异步请求获取业务数据。

1.3 MySQL数据库

  MySQL属于关系型数据库管理系统,使用结构化查询语言来执行数据的操作以及定义15。数据库有多种存储引擎可以选择,InnoDB引擎支持事务处理和外键约束,可以保证数据的一致性、完整性。MySQL执行查询的时候利用索引来加快数据检索的速度,适合于存储结构化的业务数据。在乡村政务服务系统当中,MySQL担任数据持久化保存的重任,负责保管村民信息,干部信息,政务信息,服务申请记录这些业务数据。数据库表结构设计采用第三范式,去除非必要数据,消除数据重复以及更新时出现的问题。服务申请表和办理进度表用外键关联起来,保证业务流转过程中数据关系的正确性。MySQL事务机制对服务申请提交、审核状态变更等操作起到防止数据一致性出错的作用,遇到异常中断也不会影响到业务。数据库视图可以把复杂的查询隐藏起来,只给不同的用户显示自己所需要的个性化数据。

1.4 前后端分离架构

  前后端分离架构把前端界面和后端服务分成了两个独立的开发和运行单元。前端做页面渲染和用户交互,后端做业务逻辑处理和数据接口16。双方使用HTTP协议来交换JSON格式的数据,前端不需要知道后端具体采用什么技术,后端也不需要去关注页面的展示细节。该种架构模式可以使得开发人员在前后端上同时进行开发工作,前端主要做组件化界面的设计以及用户体验的改善,而后端则负责业务逻辑以及数据的安全问题。在乡村政务服务系统中,前端Vue.js应用发出异步请求到后端API接口,后端Spring Boot收到请求参数之后执行业务处理并返回JSON响应。前后端之间用统一接口规范来合作,减少各个功能模块间的耦合程度。前端静态资源、后端应用服务可以分别部署到不同的服务器上,从而提高系统的灵活性以及可维护性。分层架构使得系统在以后的功能扩充过程中,可以自由地对前后端代码进行修改,不会互相干扰。

第二章 系统需求分析

2.1 可行性分析

2.1.1 技术可行性

  系统采用Spring Boot、Vue.js与MySQL作为核心开发技术。Spring Boot框架生态成熟、社区活跃,有丰富的文档和示例项目17。Vue.js的学习曲线比较平缓,采用组件化开发方式适合于中小型的Web应用。MySQL数据库在数据存储方面应用广泛,稳定性、性能可以满足政务系统数据管理的要求。开发工具方面,IntelliJ IDEA与Visual Studio Code均可提供完善的代码编辑与调试支持。三类技术栈有成熟的集成方案,前后端分离架构的实践案例很多。系统开发所必需的开发环境和依赖库都可以在官方渠道中获得,不存在无法逾越的技术障碍。

2.1.2 操作可行性

  系统界面设计以用户操作习惯为依据,各个功能模块的入口明显,信息层次不能太深。村民用户不需要专业的培训就可以完成政务信息浏览、服务申请提交等基本操作。干部用户在后台管理界面中进行申请和进度的更新,操作路径经过优化之后减少了重复点击。管理员具有全局设置权限,使用表格表单对政策类型进行管理,并对数据进行审核。系统给不同的角色提供不同的功能视图,防止因为信息过多而造成误操作。操作流程中必填项校验和确认提示可以减少数据录入错误。从系统操作逻辑和日常使用习惯来说比较接近,用户的上手难度小。

2.1.3 经济可行性

  系统开发所用的软件环境全部是免费或者开源的,Spring Boot、Vue.js、MySQL以及相关的开发工具不需要支付授权费用。硬件上可以运行在普通的个人计算机或者服务器上,对设备的性能要求不高。系统投入使用以后可以减少纸质材料打印、人工传递等行政成本。服务申请线上办理缩减了业务办理时间,减少了村民往返办事所造成的隐性成本。长期运行中系统维护工作量小,只需要一个技术人员就可以完成日常的运维工作。整体投入产出比合理,经济效益和工作效率提高的效果都比较好。

2.2 功能需求分析

2.2.1 村民用户功能需求

  村民用户可以进行注册、登录,在验证身份信息之后就可以进入个人工作区。政务信息查看功能可以实现对政策的分类检索和标题搜索,村民可以查看政策的内容以及服务对象的说明。新闻资讯模块是乡村治理动态和政策解读文章的展示页面。留言反馈功能可以让村民将咨询的内容提交到后台,管理员在后台查看咨询内容并进行回复。服务申请管理有在线提交申请材料的功能,村民填写信息标题、上传证明文件后提交给对应的干部用户进行审核。办理进度查看功能可以显示申请的当前状态以及进度概览。补充材料功能是在干部用户发出补充请求之后,村民可以上传缺失的材料。结果反馈功能展示已经完成服务办理结果和完结文档的展示。服务评价功能可以让村民对已经完成的服务打分、写评语。村民用户用例图如图3-1所示。

图3-1村民用户用例图

2.2.2 干部用户功能需求

  干部用户在系统中对管辖区域内政务信息和服务进行管理。政务信息管理功能可以对干部进行政务信息的添加、编辑、删除,设置政策类型、服务对象和需要的材料,提交的信息需要经过管理员审核之后才能发布。服务申请管理功能是对村民所提服务申请列表的展现,干部可以查看申请信息并做审核工作。办理进度管理功能可以对申请的处理状态进行更新,填写进度简介,记录业务流转节点。补充材料管理功能是对材料不全的申请进行补充请求,干部填写补充备注后通知村民上传。结果反馈管理功能服务结束时填写结果简介和完结文档,系统自动计算办理天数。服务评价管理功能显示村民提交的服务评价内容,干部可以查看评价详情来改善服务质量。干部用户用例图如图3-2所示。

图3-2干部用户用例图

2.2.3 管理员功能需求

  管理员有系统的最高管理权限,可以进行基础数据的设置以及对所有业务的监控。政策类型管理功能可以管理员对政策类型进行增删改查,给政务信息提供统一的分类标准。政务信息管理功能有信息审核、删除、推荐设置等,管理员可以批量审核干部提交的政务信息。服务申请管理功能可以查看所有的服务申请记录,管理员可以对所有的服务申请进行审核以及批量操作。办理进度管理功能对各个申请的处理进度进行监控,对超期或者异常的申请进行干预。补充材料管理功能可以查看所有的补充材料请求以及村民上传的文件。结果反馈管理功能是对已经完成的服务结果反馈内容进行审核、归档。服务评价管理功能收集和查看所有的评价数据,为服务质量改进提供依据。留言管理功能显示村民留言内容并作出回复。管理员用户用例图如图3-3所示。

图3-3管理员用例图

第三章 系统设计

3.1 系统架构设计

  系统使用前后端分离的分层架构模式,把用户交互、业务处理、数据存储分层。前端Vue.js应用运行在浏览器上,对页面进行渲染以及用户的操作进行收集,用HTTP协议向后端发出API请求。后端Spring Boot框架收到请求之后,会经过控制器层的分发,然后交给服务层来执行业务逻辑处理,服务层再调用数据访问层接口去完成数据库的操作。MySQL数据库存放所有的业务数据,用JDBC驱动同后端建立连接。分层架构使得各个层次的职责更加清楚,服务层主要负责业务流程的编排,数据访问层则把底层数据库的变化隔离给业务逻辑。系统具有用户权限分层管理的功能,不同的用户等级可以访问到不同的功能菜单以及数据。系统架构图如图4-1所示。

图4-1系统架构图

3.2 功能结构设计

  系统功能按三类角色来分,组织起来。村民用户功能有注册登录、政务信息查看、新闻资讯查看、留言反馈、服务申请管理、办理进度查看、补充材料、结果反馈、服务评价。干部用户功能有政务信息管理、服务申请管理、办理进度管理、补充材料管理、结果反馈管理、服务评价管理。管理员功能有政策类型管理、政务信息管理、服务申请管理、办理进度管理、补充材料管理、结果反馈管理、服务评价管理、留言管理。各个角色的功能模块之间存在着业务上的联系,服务申请的数据在村民提交之后就流转到干部的审核环节,办理进度的变化会实时更新到村民端。管理员对于政策类型、政务信息的配置内容会改变前端显示范围。该系统功能结构如图4-2所示。

图4-2系统功能结构图

3.3 业务流程设计

3.3.1 服务申请流程设计

  村民在系统中选择所需服务事项后填写申请信息并上传证明材料。系统校验必填项与文件格式,校验通过后生成服务申请记录并推送至对应管辖区域的干部用户。干部查看申请详情后判断材料是否齐全,若材料不全则发起补充材料请求;若材料齐全则更新办理进度为审核中状态。服务完成后干部填写结果反馈内容,系统通知村民进行服务评价。服务申请流程图如图4-3所示。

图4-3服务申请流程图

3.3.2 政务信息发布流程设计

  干部用户进入政务信息管理功能,填写信息标题、政策类型、服务对象、政策简介与封面图片等字段。系统执行格式校验后生成待审核状态的政务信息记录。管理员登录后台查看待审核信息列表,阅读信息内容后做出审核决定。审核通过的信息在前端政务信息模块展示,审核被驳回的信息退回至干部端重新修改。政务信息发布流程图如图4-4所示。

图4-4政务信息发布流程图

3.3.3 办理进度更新流程设计

  干部用户进入办理进度管理模块,查看管辖范围内的服务申请列表。干部选择某一申请后进入进度编辑界面,填写当前办理进度状态与进度简介。系统记录更新时间与操作人信息。村民用户登录系统后可实时查看该申请的办理进度,系统在进度变更时自动生成状态更新记录供双方追溯。办理进度更新流程图如图4-5所示。

图4-5办理进度更新流程图

3.3.4 补充材料处理流程设计

  干部用户在审核服务申请材料时发现缺失文件或信息不完整,进入补充材料管理功能发起补充请求。干部填写补充备注,明确需要补充的内容与提交截止时间。系统生成补充材料记录并向村民端推送通知。村民登录后查看补充要求,上传相应文件。干部收到补充材料后进行复核,若满足要求则继续推进办理流程。补充材料处理流程图如图4-6所示。

图4-6补充材料处理流程图

3.3.5 服务评价与反馈流程设计

  村民在服务完成后接收到评价通知,进入服务评价功能模块。村民从服务质量、办理效率、服务态度等维度进行评分并填写评语。系统生成评价记录并关联至对应的服务申请。干部用户可在服务评价管理模块查看评价详情。管理员收集所有评价数据,作为服务质量考核的参考依据。服务评价与反馈流程图如图4-7所示。

图4-7服务评价与反馈流程图

3.4 数据库设计

3.4.1 概念模型设计

  概念模型是现实世界数据需求到数据库逻辑结构之间的一个中间环节,它用以抽象地描述业务实体以及它们之间的联系18。概念模型与具体的数据库管理系统无关,可以给出稳定的、清晰的数据视图,为之后的物理设计打下基础。系统所涉及的业务实体有村民用户、干部用户、政务信息、服务申请、办理进度、补充材料、结果反馈、服务评价、政策类型、留言等十个核心实体。这些实体间存在着诸多联系类型,村民用户同政务信息存在查询联系,服务申请牵涉到村民用户和干部用户,办理进度依附于服务申请并记载流转情况。全局E-R模型如图4-8所示。

图4-8全局E-R图

  根据系统分析,系统的主要实体有村民用户、干部用户、政务信息、服务申请、办理进度、补充材料、结果反馈、服务评价、政策类型、留言,各个实体具体的属性如下图所示。

  (1)村民用户实体主要包括村民用户编号、村民姓名、村民电话、村民性别等。如图4-9所示。

图4-9村民用户属性图

  (2)干部用户实体主要包括干部用户编号、干部姓名、干部电话、管辖区域等。如图4-10所示。

图4-10干部用户属性图

  (3)政务信息实体主要包括政务信息编号、信息标题、政策类型、服务对象等。如图4-11所示。

图4-11政务信息属性图

  (4)服务申请实体主要包括服务申请编号、信息标题、申请日期、审核状态等。如图4-12所示。

图4-12服务申请属性图

  (5)办理进度实体主要包括办理进度编号、办理进度、进度简介、申请日期等。如图4-13所示。

图4-13办理进度属性图

  (6)补充材料实体主要包括补充材料编号、补充材料、补充备注、申请日期等。如图4-14所示。

图4-14补充材料属性图

  (7)结果反馈实体主要包括结果反馈编号、结果简介、完成日期、共计天数等。如图4-15所示。

图4-15结果反馈属性图

  (8)服务评价实体主要包括服务评价编号、服务评价、评价内容等。如图4-16所示。

图4-16服务评价属性图

  (9)政策类型实体主要包括政策类型编号、政策类型等。如图4-17所示。

图4-17政策类型属性图

  (10)留言实体主要包括留言板编号、内容、回复、回复状态等。如图4-18所示。

图4-18留言属性图

3.4.2 数据库逻辑设计

  逻辑设计阶段把概念模型转换成MySQL数据库可以执行的表结构定义。根据E-R图中各个实体及联系来建立对应的表,并设置主键和外键约束。表的字段设计以数据类型最小化为原则,在满足业务需求的基础上选用合适的字段类型和长度19。各个表之间通过外键关联来保证数据的参照完整性,服务申请表中保存村民用户编号和干部用户编号,办理进度表中关联服务申请编号。时间字段采用datetime或timestamp类型存储操作时刻,状态字段使用varchar或smallint类型记录业务流转阶段。

  (1)村民用户表主要用于存储注册村民的身份信息与联系方式。主要包括村民用户编号、村民姓名、村民电话、村民性别、用户编号、创建时间等字段。如表4-1所示。

表4-1村民用户表

序号 字段名 数据类型 长度 备注
1 villager_user_id int 11 村民用户编号
2 villagers_name varchar 64 村民姓名
3 villagers_phone varchar 64 村民电话
4 gender_of_villagers varchar 64 村民性别
5 user_id int 11 用户编号
6 create_time datetime - 创建时间

  (2)干部用户表主要用于存储基层干部的基本信息与管辖范围。主要包括干部用户编号、干部姓名、干部电话、管辖区域、干部性别、用户编号等字段。如表4-2所示。

表4-2干部用户表

序号 字段名 数据类型 长度 备注
1 cadre_user_id int 11 干部用户编号
2 name_of_cadre varchar 64 干部姓名
3 cadre_telephone varchar 64 干部电话
4 jurisdiction varchar 64 管辖区域
5 cadre_gender varchar 64 干部性别
6 user_id int 11 用户编号

  (3)政务信息表主要用于存储干部发布的管理与服务类信息内容。主要包括政务信息编号、信息标题、政策类型、政策简介、服务对象、所需材料、封面图片、审核状态、发布日期等字段。如表4-3所示。

表4-3政务信息表

序号 字段名 数据类型 长度 备注
1 government_information_id int 11 政务信息编号
2 message_title varchar 64 信息标题
3 policy_type varchar 64 政策类型
4 policy_oversight longtext 65535 政策简介
5 service_recipient varchar 64 服务对象
6 required_materials varchar 255 所需材料
7 cover_image varchar 255 封面图片
8 examine_state varchar 16 审核状态
9 publication_date date - 发布日期

  (4)服务申请表主要用于记录村民提交的服务请求信息。主要包括服务申请编号、信息标题、申请日期、申请备注、审核状态、证明材料、村民姓名、村民电话、干部姓名等字段。如表4-4所示。

表4-4服务申请表

序号 字段名 数据类型 长度 备注
1 service_request_id int 11 服务申请编号
2 message_title varchar 64 信息标题
3 application_date date - 申请日期
4 application_notes text 65535 申请备注
5 examine_state varchar 16 审核状态
6 supporting_documents varchar 255 证明材料
7 villagers_name varchar 64 村民姓名
8 villagers_phone varchar 64 村民电话
9 name_of_cadre varchar 64 干部姓名

  (5)办理进度表主要用于跟踪服务申请的处理状态与流转节点。主要包括办理进度编号、办理进度、进度简介、申请日期、证明材料、村民姓名、干部姓名等字段。如表4-5所示。

表4-5办理进度表

序号 字段名 数据类型 长度 备注
1 processing_progress_id int 11 办理进度编号
2 processing_progress varchar 64 办理进度
3 progress_oversight text 65535 进度简介
4 application_date date - 申请日期
5 supporting_documents varchar 255 证明材料
6 villagers_name varchar 64 村民姓名
7 name_of_cadre varchar 64 干部姓名

  (6)补充材料表主要用于记录材料不全时发起的补充请求与村民上传的文件。主要包括补充材料编号、补充材料、补充备注、申请日期、证明材料、村民姓名、村民电话等字段。如表4-6所示。

表4-6补充材料表

序号 字段名 数据类型 长度 备注
1 supplementary_materials_id int 11 补充材料编号
2 supplementary_materials varchar 255 补充材料
3 supplementary_remarks text 65535 补充备注
4 application_date date - 申请日期
5 supporting_documents varchar 255 证明材料
6 villagers_name varchar 64 村民姓名
7 villagers_phone varchar 64 村民电话

  (7)结果反馈表主要用于记录服务完成后的办理结果与完结文档。主要包括结果反馈编号、结果简介、完成日期、共计天数、完结文档、村民姓名、干部姓名等字段。如表4-7所示。

表4-7结果反馈表

序号 字段名 数据类型 长度 备注
1 result_feedback_id int 11 结果反馈编号
2 results_introduction text 65535 结果简介
3 completion_date date - 完成日期
4 total_number_of_days double - 共计天数
5 end_document varchar 255 完结文档
6 villagers_name varchar 64 村民姓名
7 name_of_cadre varchar 64 干部姓名

  (8)服务评价表主要用于存储村民对已完成服务的评分与评语内容。主要包括服务评价编号、服务评价、评价内容、干部姓名、村民姓名等字段。如表4-8所示。

表4-8服务评价表

序号 字段名 数据类型 长度 备注
1 service_resight_id int 11 服务评价编号
2 service_resight varchar 64 服务评价
3 resight_content text 65535 评价内容
4 name_of_cadre varchar 64 干部姓名
5 villagers_name varchar 64 村民姓名

  (9)政策类型表主要用于对政务信息进行分类管理。主要包括政策类型编号、政策类型等字段。如表4-9所示。

表4-9政策类型表

序号 字段名 数据类型 长度 备注
1 policy_type_id int 11 政策类型编号
2 policy_type varchar 64 政策类型

  (10)留言板表主要用于存储村民提交的咨询内容与管理员的回复信息。主要包括留言板编号、内容、回复、回复状态、昵称、创建时间等字段。如表4-10所示。

表4-10留言板表

序号 字段名 数据类型 长度 备注
1 message_id int 11 留言板编号
2 content longtext 65535 内容
3 reply longtext 65535 回复
4 reply_state tinyint - 回复状态
5 nickname varchar 32 昵称
6 create_time timestamp - 创建时间

第四章 系统详细设计与实现

4.1 村民用户功能实现

4.1.1 注册登录功能实现

  村民注册功能由UserController的signUp方法实现,系统接收村民填写的用户名和密码,检验用户名是否唯一之后调用insert方法写入数据库。登录功能采用login方法实现,系统根据用户名、邮箱或者手机号查询用户的登录信息,与密码进行比对之后生成一个UUID格式的token,并存入到redis中,有效时间为两个小时。注册登录界面如图5-1所示。

图5-1注册登录界面

  核心代码实现如下:

  @PostMapping("register")

  public Map<String, Object> signUp(@RequestBody User user) {

  Map<String, String> query = new HashMap<>();

  query.put("username",user.getUsername());

  List list = service.selectBaseList(service.select(query, new HashMap<>()));

  if (list.size()>0){

  return error(30000, "用户已存在");

  }

  service.insert(map);

  return success(1);

  }

4.1.2 政务信息查看功能实现

  村民通过GovernmentInformationController的getList方法查看政务信息。系统接收前端传来的政策类型筛选条件和信息标题搜索关键词,调用selectBaseList方法从数据库中查询符合条件的记录,按照发布日期倒序排列后返回分页数据。前端页面显示信息标题、政策类型、发布日期。政务信息查看界面如图5-2所示。

图5-2政务信息查看界面

  核心代码实现如下:

  @RequestMapping("/get_list")

  public Map<String, Object> getList(HttpServletRequest request) {

  Map<String, String> query = service.readQuery(request);

  Map<String, String> config = service.readConfig(request);

  List list = this.service.selectBaseList(this.service.select(query, config));

  map.put("list",list);

  map.put("count",this.service.selectBaseCount(this.service.count(query,config)));

  return success(map);

  }

4.1.3 新闻资讯查看功能实现

  新闻资讯功能用ArticleController模块来实现。村民输入关键词之后,系统会调用get_list接口传入搜索条件,后台会在文章表里做模糊匹配查询。系统支持按发布时间或者点击量排序,分页显示资讯标题和摘要内容。村民点击标题就可以跳转到详情页阅读正文。新闻资讯查看界面如图5-3所示。

图5-3新闻资讯查看界面

  核心代码实现如下:

  @RequestMapping("/get_list")

  public Map<String, Object> getList(HttpServletRequest request) {

  Map<String, String> query = service.readQuery(request);

  Map<String, String> config = service.readConfig(request);

  List list = this.service.selectBaseList(this.service.select(query, config));

  map.put("list",list);

  map.put("count",this.service.selectBaseCount(this.service.count(query,config)));

  return success(map);

  }

4.1.4 留言反馈功能实现

  村民通过MessageController的add方法提交留言。系统接收村民填写的标题和内容,检查标题不为空之后调用insert方法插入数据,并且记录当前登录用户的昵称和创建时间。管理员回复之后系统更新回复状态字段,村民端通过get_list接口获取已经回复的留言内容。留言反馈界面如图5-4所示。

图5-4留言反馈界面

  核心代码实现如下:

  @PostMapping("/add")

  @Transactional

  public Map<String, Object> add(HttpServletRequest request) throws IOException {

  Map<String, Object> addMap = service.readBody(request.getReader());

  validateParameters(addMap);

  removeUnnecessaryFields(addMap);

  this.service.insert(addMap);

  return success(1);

  }

4.1.5 服务申请管理功能实现

  村民通过ServiceRequestController的add方法提交服务申请。系统接收信息标题、申请备注和证明材料等字段,校验必填项之后生成服务申请记录。申请状态为未审核,系统默认把当前登录村民的姓名和联系方式关联起来。服务申请管理界面如图5-5所示。

图5-5服务申请管理界面

  核心代码实现如下:

  @PostMapping("/add")

  @Transactional

  public Map<String, Object> add(HttpServletRequest request) throws IOException {

  Map<String,Object> paramMap = service.readBody(request.getReader());

  paramMap.entrySet().removeIf(entry -> {

  Object value = entry.getValue();

  return value instanceof String && ((String) value).isEmpty();

  });

  ServiceRequest service_request = new ServiceRequest();

  service_request.setMessage_title(paramMap.get("message_title")==null?null:String.valueOf(paramMap.get("message_title")));

  this.addEntity(service_request);

  return success(1);

  }

4.1.6 办理进度查看功能实现

  村民进入办理进度模块后,系统通过ProcessingProgressController的get_list接口查询进度记录。系统以村民用户编号为检索条件,查询出与之相关联的服务申请,并给出办理进度状态、进度简介以及更新时间。村民可以点击详情查看完整的流转记录。办理进度查看界面如图5-6所示。

图5-6办理进度查看界面

  核心代码实现如下:

  @RequestMapping("/get_list")

  public Map<String, Object> getList(HttpServletRequest request) {

  Map<String, String> query = service.readQuery(request);

  Map<String, String> config = service.readConfig(request);

  List list = this.service.selectBaseList(this.service.select(query, config));

  map.put("list",list);

  map.put("count",this.service.selectBaseCount(this.service.count(query,config)));

  return success(map);

  }

4.1.7 补充材料功能实现

  干部发起补充材料请求后,村民通过SupplementaryMaterialsController的get_list接口查看补充任务。系统显示补充备注的内容以及截止时间,村民调用set方法上传补充材料文件。后端修改补充材料字段、改变状态,通知干部复核。补充材料界面如图5-7所示。

图5-7补充材料界面

  核心代码实现如下:

  @PostMapping("/set")

  @Transactional

  public Map<String, Object> set(HttpServletRequest request) throws IOException {

  Map<String,String> queryMap = service.readQuery(request);

  Map<String,Object> paramMap = service.readBody(request.getReader());

  SupplementaryMaterials supplementary_materials = new SupplementaryMaterials();

  supplementary_materials.setSupplementary_materials(paramMap.get("supplementary_materials")==null?null:String.valueOf(paramMap.get("supplementary_materials")));

  this.setEntity(queryMap,configMap,supplementary_materials);

  return success(1);

  }

4.1.8 结果反馈功能实现

  村民通过ResultFeedbackController的get_list接口查看已完成服务的结果反馈。系统返回结果简介、完成日期、总天数和完结文档下载地址。村民下载完毕文档之后可以确认服务办理结果。结果反馈界面如图5-8所示。

图5-8结果反馈界面

  核心代码实现如下:

  @RequestMapping("/get_list")

  public Map<String, Object> getList(HttpServletRequest request) {

  Map<String, String> query = service.readQuery(request);

  Map<String, String> config = service.readConfig(request);

  List list = this.service.selectBaseList(this.service.select(query, config));

  map.put("list",list);

  map.put("count",this.service.selectBaseCount(this.service.count(query,config)));

  return success(map);

  }

4.1.9 服务评价功能实现

  村民收到服务完成通知后通过ServiceResightController的add方法提交评价。系统接收服务评价等级和评语内容,关联当前登录村民和对应的服务申请。评价记录生成之后供干部和管理员查看。服务评价界面如图5-9所示。

图5-9服务评价界面

  核心代码实现如下:

  @PostMapping("/add")

  @Transactional

  public Map<String, Object> add(HttpServletRequest request) throws IOException {

  Map<String,Object> paramMap = service.readBody(request.getReader());

  ServiceResight service_resight = new ServiceResight();

  service_resight.setService_resight(paramMap.get("service_resight")==null?null:String.valueOf(paramMap.get("service_resight")));

  service_resight.setResight_content(paramMap.get("resight_content")==null?null:String.valueOf(paramMap.get("resight_content")));

  this.addEntity(service_resight);

  return success(1);

  }

4.2 干部用户功能实现

4.2.1 政务信息管理功能实现

  干部通过GovernmentInformationController的add方法发布政务信息。系统接收信息标题、政策类型、服务对象、政策简介、所需材料、封面图片等字段,校验必填项之后生成待审核状态的记录。干部可以在get_list接口中查看本人发布的全部信息,也可以对已发布的部分信息进行修改或者删除。政务信息管理界面如图5-10所示。

图5-10政务信息管理界面

  核心代码实现如下:

  @PostMapping("/add")

  @Transactional

  public Map<String, Object> add(HttpServletRequest request) throws IOException {

  Map<String,Object> paramMap = service.readBody(request.getReader());

  GovernmentInformation government_information = new GovernmentInformation();

  government_information.setMessage_title(paramMap.get("message_title")==null?null:String.valueOf(paramMap.get("message_title")));

  government_information.setPolicy_type(paramMap.get("policy_type")==null?null:String.valueOf(paramMap.get("policy_type")));

  government_information.setPolicy_oversight(paramMap.get("policy_oversight")==null?null:String.valueOf(paramMap.get("policy_oversight")));

  this.addEntity(government_information);

  return success(1);

  }

4.2.2 服务申请管理功能实现

  干部通过ServiceRequestController的get_list接口查看管辖区域内的服务申请。系统根据干部管辖的区域选择申请记录,再把信息标题、村民姓名、申请日期、审核状态返回给用户。干部调用set方法修改审核状态,填写审核意见。服务申请管理界面如图5-11所示。

图5-11服务申请管理界面

  核心代码实现如下:

  @PostMapping("/set")

  @Transactional

  public Map<String, Object> set(HttpServletRequest request) throws IOException {

  Map<String,String> queryMap = service.readQuery(request);

  Map<String,Object> paramMap = service.readBody(request.getReader());

  ServiceRequest service_request = new ServiceRequest();

  service_request.setExamine_state(paramMap.get("examine_state")==null?null:String.valueOf(paramMap.get("examine_state")));

  service_request.setExamine_reply(paramMap.get("examine_reply")==null?null:String.valueOf(paramMap.get("examine_reply")));

  this.setEntity(queryMap,configMap,service_request);

  return success(1);

  }

4.2.3 办理进度管理功能实现

  干部通过ProcessingProgressController的add或set方法更新办理进度。系统接收办理进度状态与进度简介字段,关联对应的服务申请编号。更新完成后村民端通过get_list接口实时查看最新进度。办理进度管理界面如图5-12所示。

图5-12办理进度管理界面

  核心代码实现如下:

  @PostMapping("/set")

  @Transactional

  public Map<String, Object> set(HttpServletRequest request) throws IOException {

  Map<String,String> queryMap = service.readQuery(request);

  Map<String,Object> paramMap = service.readBody(request.getReader());

  ProcessingProgress processing_progress = new ProcessingProgress();

  processing_progress.setProcessing_progress(paramMap.get("processing_progress")==null?null:String.valueOf(paramMap.get("processing_progress")));

  processing_progress.setProgress_oversight(paramMap.get("progress_oversight")==null?null:String.valueOf(paramMap.get("progress_oversight")));

  this.setEntity(queryMap,configMap,processing_progress);

  return success(1);

  }

4.2.4 补充材料管理功能实现

  干部审核材料后发现缺失文件,通过SupplementaryMaterialsController的add方法发起补充请求。系统收到补充备注字段之后,生成一份补充材料记录,将该记录和服务申请进行关联。系统给村民端推送通知,村民上传文件后干部调用set方法进行复核。补充材料管理界面如图5-13所示。

图5-13补充材料管理界面

  核心代码实现如下:

  @PostMapping("/add")

  @Transactional

  public Map<String, Object> add(HttpServletRequest request) throws IOException {

  Map<String,Object> paramMap = service.readBody(request.getReader());

  SupplementaryMaterials supplementary_materials = new SupplementaryMaterials();

  supplementary_materials.setSupplementary_remarks(paramMap.get("supplementary_remarks")==null?null:String.valueOf(paramMap.get("supplementary_remarks")));

  supplementary_materials.setSupplementary_materials(paramMap.get("supplementary_materials")==null?null:String.valueOf(paramMap.get("supplementary_materials")));

  this.addEntity(supplementary_materials);

  return success(1);

  }

4.2.5 结果反馈管理功能实现

  干部通过ResultFeedbackController的add方法填写结果反馈。系统接收结果简介、完结文档与完成日期字段,自动根据申请日期与完成日期计算共计天数。反馈内容生成后村民端可查看。结果反馈管理界面如图5-14所示。

图5-14结果反馈管理界面

  核心代码实现如下:

  @PostMapping("/add")

  @Transactional

  public Map<String, Object> add(HttpServletRequest request) throws IOException {

  Map<String,Object> paramMap = service.readBody(request.getReader());

  ResultFeedback result_feedback = new ResultFeedback();

  result_feedback.setResults_introduction(paramMap.get("results_introduction")==null?null:String.valueOf(paramMap.get("results_introduction")));

  result_feedback.setEnd_document(paramMap.get("end_document")==null?null:String.valueOf(paramMap.get("end_document")));

  result_feedback.setCompletion_date(paramMap.get("completion_date")==null?null:String.valueOf(paramMap.get("completion_date")));

  this.addEntity(result_feedback);

  return success(1);

  }

4.2.6 服务评价管理功能实现

  干部通过ServiceResightController的get_list接口查看村民提交的评价内容。系统以干部用户编号为依据来筛选评价记录,得到服务评价等级、评语内容和村民姓名。干部可以查看评价详情来改进服务质量。服务评价管理界面如图5-15所示。

图5-15服务评价管理界面

  核心代码实现如下:

  @RequestMapping("/get_list")

  public Map<String, Object> getList(HttpServletRequest request) {

  Map<String, String> query = service.readQuery(request);

  Map<String, String> config = service.readConfig(request);

  List list = this.service.selectBaseList(this.service.select(query, config));

  map.put("list",list);

  map.put("count",this.service.selectBaseCount(this.service.count(query,config)));

  return success(map);

  }

4.3 管理员功能实现

4.3.1 政策类型管理功能实现

  管理员通过PolicyTypeController的add、set与del方法管理政策类型。系统接收政策类型名称字段,校验非空后插入数据库。管理员可在get_list接口中查看所有类型列表,支持编辑类型名称与删除操作。政策类型管理界面如图5-16所示。

图5-16政策类型管理界面

  核心代码实现如下:

  @PostMapping("/add")

  @Transactional

  public Map<String, Object> add(HttpServletRequest request) throws IOException {

  Map<String,Object> paramMap = service.readBody(request.getReader());

  PolicyType policy_type = new PolicyType();

  policy_type.setPolicy_type(paramMap.get("policy_type")==null?null:String.valueOf(paramMap.get("policy_type")));

  this.addEntity(policy_type);

  return success(1);

  }

4.3.2 政务信息管理功能实现

  管理员通过GovernmentInformationController的updateExamineState方法审核政务信息。系统按照信息编号进行查询,修改审核状态字段。审核通过的信息在前端显示,驳回的信息退回干部端。管理员通过get_list接口查看所有的信息。政务信息管理界面如图5-17所示。

图5-17政务信息管理界面

  核心代码实现如下:

  @GetMapping("/update_examine_state")

  public String updateExamineState(Long id, String newState) throws IOException {

  if (!newState.equals("未审核") && !newState.equals("已通过") && !newState.equals("未通过")) {

  return "非法的审核状态";

  }

  Map<String,String> queryMap = new HashMap<>();

  queryMap.put("id",String.valueOf(id));

  GovernmentInformation government_information = service.findOne(queryMap);

  government_information.setExamine_state(newState);

  this.setEntity(queryMap,new HashMap<>(),government_information);

  return "审核成功";

  }

4.3.3 服务申请管理功能实现

  管理员通过ServiceRequestController的get_list接口查看全网服务申请记录。系统支持按审核状态与信息标题筛选。管理员可调用updateExamineState方法对异常申请进行直接审核,支持批量操作功能。服务申请管理界面如图5-18所示。

图5-18服务申请管理界面

  核心代码实现如下:

  @GetMapping("/update_examine_state")

  public String updateExamineState(Long id, String newState) throws IOException {

  if (!newState.equals("未审核") && !newState.equals("已通过") && !newState.equals("未通过")) {

  return "非法的审核状态";

  }

  Map<String,String> queryMap = new HashMap<>();

  queryMap.put("id",String.valueOf(id));

  ServiceRequest service_request = service.findOne(queryMap);

  service_request.setExamine_state(newState);

  this.setEntity(queryMap,new HashMap<>(),service_request);

  return "审核成功";

  }

4.3.4 办理进度管理功能实现

  管理员通过ProcessingProgressController的get_list接口监控所有服务申请的办理进度。系统展示申请标题、干部信息、当前进度状态、更新时间。管理员可以对逾期未处理的申请进行标记或者干预。办理进度管理界面如图5-19所示。

图5-19办理进度管理界面

  核心代码实现如下:

  @RequestMapping("/get_list")

  public Map<String, Object> getList(HttpServletRequest request) {

  Map<String, String> query = service.readQuery(request);

  Map<String, String> config = service.readConfig(request);

  List list = this.service.selectBaseList(this.service.select(query, config));

  map.put("list",list);

  map.put("count",this.service.selectBaseCount(this.service.count(query,config)));

  return success(map);

  }

4.3.5 补充材料管理功能实现

  管理员通过SupplementaryMaterialsController的get_list接口查看所有补充材料请求记录。系统展示信息标题、干部姓名、村民姓名、补充备注与补充材料文件链接。管理员可监督补充材料处理的及时性。补充材料管理界面如图5-20所示。

图5-20补充材料管理界面

  核心代码实现如下:

  @RequestMapping("/get_list")

  public Map<String, Object> getList(HttpServletRequest request) {

  Map<String, String> query = service.readQuery(request);

  Map<String, String> config = service.readConfig(request);

  List list = this.service.selectBaseList(this.service.select(query, config));

  map.put("list",list);

  map.put("count",this.service.selectBaseCount(this.service.count(query,config)));

  return success(map);

  }

4.3.6 结果反馈管理功能实现

  管理员通过ResultFeedbackController的get_list接口查看已完成服务的结果反馈内容。系统展示的完成日期、共用天数、结果简介和完结文档。管理员会对反馈内容的完整性做审核。结果反馈管理界面如图5-21所示。

图5-21结果反馈管理界面

  核心代码实现如下:

  @RequestMapping("/get_list")

  public Map<String, Object> getList(HttpServletRequest request) {

  Map<String, String> query = service.readQuery(request);

  Map<String, String> config = service.readConfig(request);

  List list = this.service.selectBaseList(this.service.select(query, config));

  map.put("list",list);

  map.put("count",this.service.selectBaseCount(this.service.count(query,config)));

  return success(map);

  }

4.3.7 服务评价管理功能实现

  管理员通过ServiceResightController的get_list接口收集全系统评价数据。系统根据评价等级或者服务类型进行筛选显示,管理员可以查看评价的详细情况用作服务质量的考核依据。服务评价管理界面如图5-22所示。

图5-22服务评价管理界面

  核心代码实现如下:

  @RequestMapping("/get_list")

  public Map<String, Object> getList(HttpServletRequest request) {

  Map<String, String> query = service.readQuery(request);

  Map<String, String> config = service.readConfig(request);

  List list = this.service.selectBaseList(this.service.select(query, config));

  map.put("list",list);

  map.put("count",this.service.selectBaseCount(this.service.count(query,config)));

  return success(map);}

4.3.8 留言管理功能实现

  管理员通过MessageController的set方法回复村民留言。系统根据留言编号查询记录,更新回复内容与回复状态字段。管理员可在get_list接口中筛选未回复留言,村民端查看已回复内容。留言管理界面如图5-23所示。

图5-23留言管理界面

  核心代码实现如下:

  @PostMapping("/set")

  @Transactional

  public Map<String, Object> set(HttpServletRequest request) throws IOException {

  Map<String,Object> body = this.service.readBody(request.getReader());

  Message message = JSON.parseObject(JSON.toJSONString(body),Message.class);

  this.service.updateEntity(service.readQuery(request), service.readConfig(request), message);

  return success(1);}

第五章 系统测试

5.1 测试目的

  系统测试的根本目的就是检验乡村政务服务系统是否达到设计要求,保证各个功能模块在实际运行环境中的正确性和稳定性20。测试过程主要是业务流程的完全拟合度,看服务申请从提出到反馈的整个链条的数据是否一致。系统测试主要针对数据一致性进行检验,各种业务操作之后数据库中记录应该能够正确反映操作的结果。系统稳定性测试,对多用户并发访问的时候服务响应是否正常进行检验。交互准确性测试用来检测前后端数据传递过程中字段映射是否正确。容错能力测试是对系统在输入异常数据时所表现出来的处理方式进行检验,看其是否能给出正确的提示信息,并且具有恢复系统的能力。

5.2 测试方法

  测试工作使用黑盒测试和白盒测试相结合的方式进行。黑盒测试关注功能模块,模拟出三类角色用户真实的操作场景,检验各个功能是否符合需求规格说明书。测试用例要覆盖正常的业务流程以及异常处理分支,即服务申请提交、材料补充、进度更新、结果反馈这些主要的流转节点。白盒测试主要对关键业务逻辑代码进行测试,看条件分支和循环结构的执行路径是否正确。测试环境是在本地搭建了完整的系统前后端服务以及数据库,测试数据使用模拟的村民信息、政务信息和服务申请记录。接口测试用Postman工具对RESTful API请求响应格式、状态码进行验证。回归测试就是修复缺陷之后再执行相关的测试用例,保证修改没有引入新的问题。

5.3 测试用例

5.3.1 服务申请提交功能测试

  测试服务申请模块的正常提交流程与异常处理能力。村民填写申请信息后系统生成记录,干部端可查看申请列表。材料不全时系统应给出明确提示。如表6-1所示。

表6-1服务申请提交测试用例表

测试内容 测试步骤 预期结果 实际结果
正常提交申请 填写完整信息后提交 生成申请记录 符合预期
必填项为空 不填信息标题提交 提示必填项 符合预期
材料格式错误 上传不符合格式的文件 提示格式错误 符合预期

5.3.2 办理进度更新功能测试

  测试干部更新办理进度时前端页面的实时刷新效果与后端数据存储的正确性。进度变更后村民端应同步展示最新状态。如表6-2所示。

表6-2办理进度更新测试用例表

测试内容 测试步骤 预期结果 实际结果
更新进度状态 干部填写进度简介后提交 数据库记录更新 符合预期
村民端同步查看 村民刷新办理进度页面 显示最新进度 符合预期
多次进度更新 干部连续更新多次进度 保留每次记录 符合预期

5.3.3 补充材料处理功能测试

  测试干部发起补充材料请求后村民接收通知并上传文件的全过程。干部复核补充材料后应能够继续推进办理流程。如表6-3所示。

表6-3补充材料处理测试用例表

测试内容 测试步骤 预期结果 实际结果
发起补充请求 干部填写补充备注后提交 生成补充记录 符合预期
村民上传材料 村民查看补充要求并上传 材料保存成功 符合预期
干部复核材料 干部查看上传的补充材料 复核状态变更 符合预期

5.3.4 政务信息审核功能测试

  测试管理员对干部提交的政务信息进行审核操作。审核通过的信息应在村民端可见,驳回的信息应退回干部端修改。如表6-4所示。

表6-4政务信息审核测试用例表

测试内容 测试步骤 预期结果 实际结果
审核通过信息 管理员点击通过按钮 前端页面展示 符合预期
审核驳回信息 管理员填写驳回理由 退回干部端 符合预期
批量审核操作 管理员选择多条信息提交 批量状态变更 符合预期

5.3.5 留言回复功能测试

  测试管理员对村民留言进行回复的操作流程。回复完成后留言状态应从未回复变更为已回复,村民端可查看回复内容。如表6-5所示。

表6-5留言回复测试用例表

测试内容 测试步骤 预期结果 实际结果
管理员回复留言 管理员填写回复内容后提交 留言状态变更 符合预期
村民查看回复 村民进入留言模块 显示回复内容 符合预期
未回复留言筛选 管理员筛选未回复留言 列表正确展示 符合预期

测试结论

  系统测试包含了村民用户、干部用户和管理员所有的主要功能模块。测试完毕的服务申请提交、办理进度查询、补充材料办理、政务信息审核、留言反馈等主要业务环节。功能模块间的数据流转准确无误,服务申请记录可以和村民信息、干部信息正确关联起来,进度更新之后村民端可以及时查看最新的状态。异常输入处理机制对必填项为空、文件格式错误等进行有效的提示,系统没有出现崩溃或者数据丢失的情况。接口测试时所有的RESTful API请求都会得到正确的状态码以及数据格式。测试结果说明乡村政务服务系统功能齐全、数据一致、运行正常,满足毕业设计的各项要求。

喜欢本项目的朋友可以点赞关注我,私信发【源码】就能免费领取完整项目代码

相关推荐
名字还没想好☜1 小时前
Python sqlite3 实战:事务提交、参数化防注入、WAL 并发与 row_factory 取字典
后端·python·编程语言
志尊宝1 小时前
Vue3 零基础每日笔记(037):动手封装 useMouse 与 useWindowSize——事件监听的标准模板
前端·javascript·vue.js·笔记·html5
shmily麻瓜小菜鸡1 小时前
TDD(测试驱动开发)详解
开发语言·javascript·typescript·node.js·ecmascript
论文复现现场1 小时前
ComfyUI 怎么同时调用 4 张/8 张 RTX 4090?AI 视频批量生成的多实例队列与 Python 调度方案
人工智能·python·comfyui·rtx4090
泡海椒2 小时前
评分系统最佳实践:JQuick-Java实现权重、阈值动态配置评分
java·人工智能·python
aixingpan2 小时前
aixingpan.cn API开发文档:api_docs_bichart_natalvssolar_return2接口指南
前端·php
weixin199701080162 小时前
《二手ERP对接的对账机制:按日巡检 + 自动补偿,消灭“幽灵订单“》(附Python源码)
python
BillKu2 小时前
vue3双向邦定:使用defineModel替换defineProps+defineEmits
vue.js
m0_547486662 小时前
《Python数据分析与实践》全套PPT课件(杭州电子科技大学)
python·数据分析