欢迎光临散文网 会员登陆 & 注册

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

2023-05-15 10:57 作者:指南针毕业设计  | 我要投稿


项目编号: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")@Slf4jpublic 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")@Slf4jpublic 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三层结构。在设计过程中,把民政救助系统分为了办公中心功能模块、民政城市优抚医疗救助功能模块、民政农村优抚医疗救助功能模块、系统维护功能模块、医疗机构救助功能模块等五个部分,希望可以实现民政救助内部人员的网上办公。这个系统的实施运行可以提高民政救助部门的内部办公的效率,规范办公流程,为民政部门的信息化发展起到积极的作用。


民政救助系统|基于Spring Boot的民政救助系统的评论 (共 条)

分享到微博请遵守国家法律