作者主页:编程指南针

作者简介:Java领域优质创作者、多年架构师设计经验、腾讯课堂常驻讲师

主要内容:Java项目、毕业设计、简历模板、学习资料、面试题库、技术互助


项目编号: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所示:

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

 

图2-1系统功能模块图

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

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

 

图2-2用户功能用例图

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

管理员用例图

民政救助系统|基于Spring Boot的民政救助系统_后端_03


 

图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中。

民政救助系统|基于Spring Boot的民政救助系统_后端_04

 

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

 

3.2贫困人口管理

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

 

3.3申请管理扶贫补助

民政救助系统|基于Spring Boot的民政救助系统_后端_07

 

3.4管理扶贫项目

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

 

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

 

民政救助系统|基于Spring Boot的民政救助系统_民政管理系统_10

 

民政救助系统|基于Spring Boot的民政救助系统_后端_11

 

3.5资金管理

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

民政救助系统|基于Spring Boot的民政救助系统_民政管理系统_13

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

 

3.6扶贫帮对管理模块

民政救助系统|基于Spring Boot的民政救助系统_后端_15

5.7追踪记录模块

民政救助系统|基于Spring Boot的民政救助系统_民政管理系统_16

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

 

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

 

四,核心代码展示

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