民政救助系统|基于Spring Boot的民政救助系统

简介: 民政救助系统|基于Spring Boot的民政救助系统

项目编号:BS-XX-193

前言:

随着计算机技术和网络技术的快速发展,信息化建设已经成为影响我国社会各行各业发展的重要因素,特别是电子政务系统的运用,受到了我国很多政府部门的亲睐,也给他们政务工作带来了显著的效果。加上我国医疗制度不断的改革与发展,在医院业务流程上也提出实现信息化,同时,民政部门救助工作也应该积极响应国家信息化建设的号召,把手工的业务流程转化为信息化流程,使整个业务流程更加高效和规范。而我国民政救助工作不是独立的一项工作,运作过程中涉及贫困人口管理、工作内容管理、资金管理、扶贫帮对管理、追踪记录等众多的模块,这样民政部门要实现民政救助业务的信息化就变的非常困难,民政救助系统建设一个信息管理系统,目前国家还没有建设一款比较成熟和完善的系统,还需要更多的学者进行深入的研究。本文就是在这种背景下对民政救助系统的开发展开探讨,通过结合民政救助需求实际情况,对民政救助系统设计进行了研究与系统的开发工作。在民政救助系统设计方面,为了更方便于软件开发与维护,采用B/S三层结构。在设计过程中,把民政救助系统分为了贫困人口管理模块、工作内容管理模块、资金管理模块、扶贫帮对管理模块、追踪记录功能模块等五个部分,希望可以实现民政救助内部人员的网上办公。这个系统的实施运行可以提高民政救助部门的内部办公的效率,规范办公流程,为民政部门的信息化发展起到积极的作用。

一,环境介绍

语言环境:Java:  jdk1.8

数据库:Mysql: mysql5.7

应用服务器:Tomcat:  tomcat8.5.31

开发工具:IDEA或eclipse

二,项目简介

民政救助系统提供了贫困人口管理、工作内容管理、资金管理、扶贫帮对管理、追踪记录等功能。主要进行贫困人口管理:对贫困人口进行注册、申请、审批等操作 2.工作内容管理:申请管理扶贫补助、管理扶贫项目 3.资金管理:记录系统金额的使用情况,近路当前资金总量,资金使用过多余额较少时给出提醒。 4.扶贫帮对管理:扶贫对象信息管理,扶贫主体信息管理,结对管理 5.追踪记录:帮扶记录、帮扶措施、帮扶计划、帮扶成效。

本系统初步分为七个模块主要是贫困人口管理,工作内容管理,资金管理,扶贫帮对管理,追踪记录,救济金管理,建档立卡等七个主要的模块。

(1)贫困人口管理模块:这个模块主要包括贫困人口注册,贫困人口

申请,贫困人口审批等功能。

(2)工作内容管理模块:这个模块主要包括申请管理扶贫补助,管理扶贫项目。

(3)资金管理模块:这个模块主要包括记录系统金额的使用情况,近路当前资金总量,资金使用过多余额较少时给出提醒。

(4)扶贫帮对管理模块:这个模块主要包括扶贫对象信息管理,扶贫主体信息管理,结对管理。

(5)追踪记录模块:这个模块主要包括帮扶记录、帮扶措施、帮扶计划、帮扶成效。

民政救助系统提供了贫困人口管理、工作内容管理、资金管理、扶贫帮对管理、追踪记录等功能。主要进行贫困人口管理:对贫困人口进行注册、申请、审批等操作 2.工作内容管理:申请管理扶贫补助、管理扶贫项目 3.资金管理:记录系统金额的使用情况,近路当前资金总量,资金使用过多余额较少时给出提醒。 4.扶贫帮对管理:扶贫对象信息管理,扶贫主体信息管理,结对管理 5.追踪记录:帮扶记录、帮扶措施、帮扶计划、帮扶成效。功能模块图如图2-1所示:

图2-1系统功能模块图

普通游客可以进行注册,登录,贫困人口申请,贫困人口注册用户功能用例如图2-2用户功能用例图

图2-2用户功能用例图

管理员通过系统内置的账户登录,管理员账户除了能使用普通用户的所有功能之外,还能进入后台管理页面对用户进行贫困人口注册,贫困人口申请,贫困人口审批,贫困人口注册,管理扶贫项目,记录资金,扶贫帮对管理等如图2-3

管理员用例图


图2-3管理员用例图

三,系统展示

3.1注册和登录

前端登录与注册页面由login.vue和register.vue实现用户信息由userInfo.vue实现。用户首先需要输入用户名和邮箱,之后点击发送验证码,前端会将用户名和邮箱通过/api/sendCode提交到后端。后端接受到数据之后,首先会验证邮箱是否符合格式,邮箱是否已经被注册,如果条件成立,则返回相关提示信息。否则将生成验证码,通过邮件发送至用户邮箱,同时将邮箱和验证码存储于session中。之后用户需要将其他信息填写完毕,并且输入验证码,点击注册,前端会通过/api/register接口将数据提交到后端。后端收到数据后,首先会通过提交信息的邮箱从session中读取之前存储的验证码并进行对比,如果不一致,则返回验证码无效提示信息,否则继续业务。之后会验证邮箱是否符合规范,以及是否被注册,如果验证通过,则后端调用服务层类userService的register方法添加用户,register方法首先会将用户的密码进行MD5加密,填充注册时间,用户状态等信息,然后通过持久层类userMapper的方法将用户信息提交至数据库。提交成功之将创建用户的文件仓库,通过调用fileStoreService的 createFileStore方法创建对应用户的文件仓库并提交到数据库。界面实现效果如图5-1所示。

完成注册之后用户就可以登录了。输入用户名和密码之后点击登录,前端会将携带用户名与密码通过/api/login接口提交至后端,后端调用服务层类userService的login方法来处理数据。首先会将用户的明文密码使用MD5加密,之后通过持久层类userMapper的方法去数据库中查询是否存在对应用户名的用户,然后对比密码是否正确,并返回相应结果至控制层。如果账户密码正确,则将查询到的用户数据存储于session中,并且生成token提交至数据库中。之后将提示信息与token返回至前端,前端会将token存储于cookie中,以保持登录状态。界面实现效果如图5-2所示。

用户完成登录之后,将跳转至网盘界面,同时通过/api/getTokenVerity接口验证token是否有效,然后通过/api/getLoggedUser接口向后端的session中获取当前登录用户信息,并存储于cookie中。

3.2贫困人口管理

3.3申请管理扶贫补助

3.4管理扶贫项目

3.5资金管理

3.6扶贫帮对管理模块

5.7追踪记录模块

四,核心代码展示

package cn.poverty.api.controller;
import cn.afterturn.easypoi.handler.inter.IExcelDictHandler;
import cn.poverty.interaction.req.item.apply.ReliefItemApplyAddReq;
import cn.poverty.interaction.req.item.apply.ReliefItemApplyPageReq;
import cn.poverty.interaction.req.item.apply.ReliefItemApplyReq;
import cn.poverty.interaction.req.item.apply.ReliefItemApplyUpdateReq;
import cn.poverty.interaction.resp.base.ApiResponse;
import cn.poverty.interaction.resp.item.apply.ReliefItemApplyResp;
import cn.poverty.interaction.resp.page.Pagination;
import cn.poverty.service.ReliefItemApplyService;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.util.Arrays;
/**
 * @author
 * @packageName cn.poverty.api.controller
 * @Description: 前端控制器
 * @date
 */
@RestController
@RequestMapping(value = "api/v1/reliefItemApply")
@Slf4j
public class ReliefItemApplyController extends BaseApiController {
    @Resource
    private ReliefItemApplyService reliefItemApplyService;
    @Resource
    private HttpServletResponse response;
    @Resource
    private IExcelDictHandler excelDictHandler;
    /**
     * 申请扶贫项目
     * @author
     * @date
     * @param addReq 申请扶贫项目请求参数
     */
    @PostMapping(value = "/applyItem")
    @RequiresPermissions("reliefItemApply:add")
    public ApiResponse applyItem(@RequestBody @Valid ReliefItemApplyReq addReq){
        reliefItemApplyService.applyItem(addReq);
        return apiResponse();
    }
    /**
     * 新增
     * @author
     * @date
     * @param addReq 新增Req
     */
    @PostMapping(value = "/addItem")
    @RequiresPermissions("reliefItemApply:add")
    public ApiResponse addItem(@RequestBody @Valid ReliefItemApplyAddReq addReq){
        reliefItemApplyService.addItem(addReq);
        return apiResponse();
    }
    /**
     * 主键ID集合批量
     *
     * @date
     * @param mainIdList 主键ID集合
     */
    @DeleteMapping(value = "/batchDeleteItem/{mainIdList}")
    @RequiresPermissions("reliefItemApply:batchDelete")
    public ApiResponse batchDeleteItem(@PathVariable(name = "mainIdList") String mainIdList){
        reliefItemApplyService.batchDeleteItem(Arrays.asList(mainIdList.split(",")));
        return apiResponse();
    }
    /**
     * 分页查询
     *
     * @date
     * @param  pageReq 分页查询Req
     * @return Pagination
     */
    @PostMapping(value = "/queryByPage")
    @RequiresPermissions("reliefItemApply:itemList")
    public ApiResponse<Pagination<ReliefItemApplyResp>> queryByPage(
            @RequestBody @Valid ReliefItemApplyPageReq pageReq){
        return apiResponse(reliefItemApplyService.queryByPage(pageReq));
    }
    /**
     * 更新
     *
     * @date
     * @param updateReq 更新请求参数
     */
    @PutMapping(value = "/updateItem")
    @RequiresPermissions("reliefItemApply:edit")
    public ApiResponse updateItem(@RequestBody @Valid ReliefItemApplyUpdateReq updateReq){
        reliefItemApplyService.updateItem(updateReq);
        return apiResponse();
    }
}
package cn.poverty.api.controller;
import cn.poverty.common.utils.alibaba.AliOssService;
import cn.poverty.interaction.req.common.MultipleFileAccessUrlReq;
import cn.poverty.interaction.resp.base.ApiResponse;
import cn.poverty.interaction.resp.upload.AppFileUrlResp;
import cn.poverty.interaction.resp.upload.MultipartFileUrlResp;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
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.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.validation.Valid;
import java.util.Arrays;
import java.util.List;
/**
 * @author
 * @projectName poverty-help-api
 * @Description: 系统文件相关前端控制器
 * @date
 */
@RestController
@RequestMapping("api/systemFile")
public class SystemFileController extends BaseApiController {
    @Resource
    private AliOssService aliOssService;
    /**
     * 拿到文件直接访问路径
     *
     * @date
     * @param fileNames
     * @return ApiResponse
     */
    @GetMapping("/appFileAccessUrl")
    @RequiresPermissions("file:accessUrl")
    public ApiResponse<List<AppFileUrlResp>> appFileAccessUrl(@RequestParam(name = "fileNames") String fileNames){
        return apiResponse(aliOssService.getObjectAccessUrlList(Arrays.asList(fileNames.split(","))));
    }
    /**
     * 拿到单个文件名称的地址
     * @author
     * @date
     * @param fileName 文件名称
     * @return String
     */
    @GetMapping("/singleFileAccessUrl")
    public ApiResponse<String> singleFileAccessUrl(@RequestParam(name = "fileName")String fileName){
        return apiResponse(aliOssService.getObjectAccessUrl(fileName));
    }
    /**
     * 拿到多个文件名称的地址
     * @author
     * @date
     * @param multipleFileAccessUrlReq 文件名称集合
     * @return String
     */
    @PostMapping("/multipleFileAccessUrl")
    public ApiResponse<List<String>> multipleFileAccessUrl(@RequestBody @Valid MultipleFileAccessUrlReq multipleFileAccessUrlReq){
        return apiResponse(aliOssService.getObjectAccessUrlList(multipleFileAccessUrlReq.getFileNameList()));
    }
    /**
     * 拿到多个文件名称的地址
     * @author
     * @date
     * @param multipleFileAccessUrlReq 文件名称集合
     * @return List
     */
    @PostMapping("/queryMultipleFileAccessUrl")
    public ApiResponse<List<MultipartFileUrlResp>> queryMultipleFileAccessUrl(@RequestBody @Valid MultipleFileAccessUrlReq multipleFileAccessUrlReq){
        return apiResponse(aliOssService.getObjectAccessUrlList(multipleFileAccessUrlReq.getFileNameList()));
    }
    /**
     * 删除OSS的文件
     * @author
     * @date
     * @param name 删除OSS的文件
     */
    @DeleteMapping("/deleteFileByFileName")
    public ApiResponse deleteFileByFileName(@RequestParam(name = "name") String name){
        aliOssService.deleteObject(name);
        return apiResponse();
    }
    /**
     * 上传文件
     *
     * @date
     * @param file
     * @return String
     */
    @PostMapping(value = "/uploadFile")
    public ApiResponse<String> uploadFile(@RequestParam(name = "file") MultipartFile file){
        return apiResponse(aliOssService.multipartFileToOss(file,false));
    }
    /**
     * 上传文件
     *
     * @date
     * @param file
     * @return String
     */
    @PostMapping(value = "/uploadFileMixed")
    public ApiResponse<String> uploadFileMixed(@RequestParam(name = "file") MultipartFile file){
        return apiResponse(aliOssService.mixFileToOss(file,true));
    }
}
package cn.poverty.api.controller;
import cn.afterturn.easypoi.handler.inter.IExcelDictHandler;
import cn.poverty.interaction.req.item.ReliefItemAddReq;
import cn.poverty.interaction.req.item.ReliefItemPageReq;
import cn.poverty.interaction.req.item.ReliefItemUpdateReq;
import cn.poverty.interaction.resp.base.ApiResponse;
import cn.poverty.interaction.resp.item.ReliefItemResp;
import cn.poverty.interaction.resp.page.Pagination;
import cn.poverty.service.ReliefItemService;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.web.bind.annotation.DeleteMapping;
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.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.util.Arrays;
import java.util.List;
/**
 * @author
 * @packageName cn.poverty.api.controller
 * @Description: 前端控制器
 * @date
 */
@RestController
@RequestMapping(value = "api/v1/reliefItem")
@Slf4j
public class ReliefItemController extends BaseApiController {
    @Resource
    private ReliefItemService reliefItemService;
    @Resource
    private HttpServletResponse response;
    @Resource
    private IExcelDictHandler excelDictHandler;
    /**
     * 新增
     *
     * @date
     * @param addReq 新增Req
     */
    @PostMapping(value = "/addItem")
    @RequiresPermissions("reliefItem:add")
    public ApiResponse addItem(@RequestBody @Valid ReliefItemAddReq addReq){
        reliefItemService.addItem(addReq);
        return apiResponse();
    }
    /**
     * 主键ID集合批量
     *
     * @date
     * @param mainIdList 主键ID集合
     */
    @DeleteMapping(value = "/batchDeleteItem/{mainIdList}")
    @RequiresPermissions("reliefItem:batchDelete")
    public ApiResponse batchDeleteItem(@PathVariable(name = "mainIdList") String mainIdList){
        reliefItemService.batchDeleteItem(Arrays.asList(mainIdList.split(",")));
        return apiResponse();
    }
    /**
     * 分页查询
     *
     * @date
     * @param  pageReq 分页查询Req
     * @return Pagination
     */
    @PostMapping(value = "/queryByPage")
    @RequiresPermissions("reliefItem:itemList")
    public ApiResponse<Pagination<ReliefItemResp>> queryByPage(
            @RequestBody @Valid ReliefItemPageReq pageReq){
        return apiResponse(reliefItemService.queryByPage(pageReq));
    }
    /**
     * 查询所有项目
     *
     * @date
     * @return java.util.List
     */
    @GetMapping(value = "/queryAllItem")
    public ApiResponse<List<ReliefItemResp>> queryAllItem(){
        return apiResponse(reliefItemService.queryAllItem());
    }
    /**
     * 更新
     *
     * @date
     * @param updateReq 更新请求参数
     */
    @PutMapping(value = "/updateItem")
    @RequiresPermissions("reliefItem:edit")
    public ApiResponse updateItem(@RequestBody @Valid ReliefItemUpdateReq updateReq){
        reliefItemService.updateItem(updateReq);
        return apiResponse();
    }
}

五,项目总结

随着计算机技术和网络技术的快速发展,信息化建设已经成为影响我国社会各行各业发展的重要因素,特别是电子政务系统的运用,受到了我国很多政府部门的亲睐,也给他们政务工作带来了显著的效果。加上我国扶贫制度不断的改革与发展,在扶贫业务流程上也提出实现信息化,同时,民政部门救助工作也应该积极响应国家信息化建设的号召,把手工的业务流程转化为信息化流程,使整个业务流程更加高效和规范。而我国民政救助工作不是独立的一项工作,运作过程中涉及扶贫、资金管理、贫困人口管理等众多的部门,这样民政部门要实现民政救助业务的信息化就变的非常困难,民政救助系统建设一个信息管理系统,目前国家还没有建设一款比较成熟和完善的系统,还需要更多的学者进行深入的研究。 本文就是在这种背景下对民政救助系统的开发展开探讨,通过结合民政救助需求实际情况,对民政救助系统设计进行了研究与系统的开发工作。在民政救助系统设计方面,为了更方便于软件开发与维护,采用B/S三层结构。在设计过程中,把民政救助系统分为了办公中心功能模块、民政城市优抚医疗救助功能模块、民政农村优抚医疗救助功能模块、系统维护功能模块、医疗机构救助功能模块等五个部分,希望可以实现民政救助内部人员的网上办公。这个系统的实施运行可以提高民政救助部门的内部办公的效率,规范办公流程,为民政部门的信息化发展起到积极的作用。

相关文章
|
3月前
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的服装商城管理系统
基于Java+Springboot+Vue开发的服装商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的服装商城管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
176 2
基于Java+Springboot+Vue开发的服装商城管理系统
|
8天前
|
Java 数据库 数据安全/隐私保护
轻松掌握Spring依赖注入:打造你的登录验证系统
本文以轻松活泼的风格,带领读者走进Spring框架中的依赖注入和登录验证的世界。通过详细的步骤和代码示例,我们从DAO层的创建到Service层的实现,再到Spring配置文件的编写,最后通过测试类验证功能,一步步构建了一个简单的登录验证系统。文章不仅提供了实用的技术指导,还以口语化和生动的语言,让学习变得不再枯燥。
23 2
|
1月前
|
XML Java 数据库连接
SpringBoot集成Flowable:打造强大的工作流管理系统
在企业级应用开发中,工作流管理是一个核心组件,它能够帮助我们定义、执行和管理业务流程。Flowable是一个开源的工作流和业务流程管理(BPM)平台,它提供了强大的工作流引擎和建模工具。结合SpringBoot,我们可以快速构建一个高效、灵活的工作流管理系统。本文将探讨如何将Flowable集成到SpringBoot应用中,并展示其强大的功能。
138 1
|
1月前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
2月前
|
存储 安全 Java
打造智能合同管理系统:SpringBoot与电子签章的完美融合
【10月更文挑战第7天】 在数字化转型的浪潮中,电子合同管理系统因其高效、环保和安全的特点,正逐渐成为企业合同管理的新宠。本文将分享如何利用SpringBoot框架实现一个集电子文件签字与合同管理于一体的智能系统,探索技术如何助力合同管理的现代化。
102 4
|
2月前
|
前端开发 Java Apache
SpringBoot实现电子文件签字+合同系统!
【10月更文挑战第15天】 在现代企业运营中,合同管理和电子文件签字成为了日常活动中不可或缺的一部分。随着技术的发展,电子合同系统因其高效性、安全性和环保性,逐渐取代了传统的纸质合同。本文将详细介绍如何使用SpringBoot框架实现一个电子文件签字和合同管理系统。
95 1
|
2月前
|
文字识别 安全 Java
SpringBoot3.x和OCR构建车牌识别系统
本文介绍了一个基于Java SpringBoot3.x框架的车牌识别系统,详细阐述了系统的设计目标、需求分析及其实现过程。利用Tesseract OCR库和OpenCV库,实现了车牌图片的识别与处理,确保系统的高准确性和稳定性。文中还提供了具体的代码示例,展示了如何构建和优化车牌识别服务,以及如何处理特殊和异常车牌。通过实际应用案例,帮助读者理解和应用这一解决方案。
|
3月前
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的大学竞赛报名管理系统
基于Java+Springboot+Vue开发的大学竞赛报名管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的大学竞赛报名管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
232 3
基于Java+Springboot+Vue开发的大学竞赛报名管理系统
|
3月前
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的蛋糕商城管理系统
基于Java+Springboot+Vue开发的蛋糕商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的蛋糕商城管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
177 3
基于Java+Springboot+Vue开发的蛋糕商城管理系统
|
3月前
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的美容预约管理系统
基于Java+Springboot+Vue开发的美容预约管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的美容预约管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
59 3
基于Java+Springboot+Vue开发的美容预约管理系统