基于Vue+SpringBoot的12345市民热线问题管理系统的设计与实现

目 录
摘 要 IV
Abstract V
第1章 绪论 1
1.1 课题研究背景 1
1.2 课题研究现状 1
1.2.1 国内研究现状 1
1.2.2 国外研究现状 2
1.3 课题研究目的和意义 3
1.4 论文结构和章节安排 3
1.5 本章小结 3
第2章 需求分析 4
2.1 任务目标 4
2.2 业务需求分析 5
2.2.1 用户特点 5
2.2.2 适用范围 5
2.2.3 业务流程图 5
2.3 系统主要业务功能需求 6
2.3.1 个人中心功能 6
2.3.2 投诉写信功能 8
2.3.3 留言管理功能 9
2.3.4 用户管理功能 10
2.3.5 角色管理功能 10
2.3.6 类别管理功能 11
2.3.7 菜单管理功能 12
2.4 本章小结 12
第3章 系统总体设计 14
3.1 构架设计 14
3.1.1 系统构架 14
3.1.2 功能结构设计 14
3.2 功能设计 16
3.2.1 个人中心功能 16
3.2.2 投诉写信功能 17
3.2.3 留言管理功能 18
3.2.4 用户管理功能 19
3.2.5 角色管理功能 20
3.2.6 类别管理功能 22
3.2.7 菜单管理功能 23
3.3 数据库设计 24
3.3.1 数据库环境说明 24
3.3.2 概念结构设计 24
3.4 开发环境选择 26
3.5 本章小结 27
第4章 系统详细设计 28
4.1 系统数据库表设计 28
4.1.1 逻辑结构设计 28
4.1.2 表结构设计 28
4.2 主要功能模块详细设计 31
4.2.1 个人中心模块设计 31
4.2.2 投诉写信模块设计 32
4.2.3 留言管理模块设计 33
4.2.4 用户管理模块设计 35
4.2.5 角色管理模块设计 37
4.2.6 类别管理模块设计 39
4.2.7 菜单管理模块设计 41
4.3 本章小结 43
5.1 测试环境 44
5.1.1 软件配置 44
5.1.2 硬件设备 44
5.2 系统主要功能模块测试 44
5.2.1 个人中心功能测试 44
5.2.2 投诉写信功能测试 47
5.2.3 留言管理功能测试 48
5.2.4 用户管理功能测试 50
5.2.5 角色管理功能测试 52
5.2.6 类别管理功能测试 55
5.2.7 菜单管理功能测试 55
5.3 测试结论 57
5.4 本章小结 58
结 论 59
参考文献 60
致 谢 61

第2章 需求分析
2.1 任务目标
本系统主要是随着通信和互联网的高速发展,针对市民对于政府部门的12345市民热线进行改进,为市民们提供了一个可以更加方便的提出自己所有问题的平台,同时给政府部门提供了一个方便管理的平台进行解决问题。
本系统针对以上需求具有以下功能:
1.个人中心功能
个人中心功能主要是对市民的个人信息进行管理,用户可以在其中查看和更改自己的个人信息、头像等信息。
2.投诉写信功能
投诉写信功能主要是让已经登录的市民提交自己的诉求,写投诉信。还可以查询诉求的状态,并针对已完成的诉求进行满意度评价。
3.留言管理功能
留言管理功能主要是针对市民提出的诉求进行管理。对规范的信件进行审核后交由相关部门,再由相关部门完成诉求。
4.用户管理功能
用户管理功能可以管理已经注册的市民用户,对其个人信息进行修改、查询等操作,还能够禁止用户登录。
5.角色管理功能
角色管理功能可以管理所拥有的角色,例如部门、审批人员、用户等。
6.类别管理功能
类别管理功能可以管理信件的类型,对用户所写出的诉求和建议进行归类。例如普通信件、投诉信件、表扬信件等。
7.菜单管理功能
与菜单管理功能可以管理后台页面的菜单选项。可以对菜单进行排序、分类、修改等操作。还可以导入使用Vue写的新页面。
2.2 业务需求分析
2.2.1 用户特点
本系统用户有市民、超级管理员、部门、审批人员。
1.市民
市民可以通过登录进行提出诉求、更改个人信息和查看诉求状态。
2.超级管理员
超级管理员拥有所有的权限。
3.部门
部门可以对审批通过的诉求进行回复、完成操作。
4.审批人员
审批人员可以对市民提出的诉求进行审批,并分配给相应的部门。
2.2.2 适用范围
本系统主要是为了哈尔滨市人民政府做的,部署在政府本地服务器或者是云服务器上。市民可以通过访问相应的网站,去提出诉求。部门可以在同一平台上,对市民所提出的诉求进行解答、完成等。管理员也可以在平台上对非法的用户进行封禁。

package cn.bellsee.citizen.controller;

import cn.bellsee.citizen.core.AjaxResult;
import cn.bellsee.citizen.domain.database.Menu;
import cn.bellsee.citizen.domain.database.User;
import cn.bellsee.citizen.domain.in.ManagerUserEditFormat;
import cn.bellsee.citizen.domain.in.ManagerUserMultipleSelection;
import cn.bellsee.citizen.domain.in.ManagerUserSelectFormat;
import cn.bellsee.citizen.domain.out.ManagerMenu;
import cn.bellsee.citizen.domain.out.UserData;
import cn.bellsee.citizen.exception.TipsException;
import cn.bellsee.citizen.repository.RoleMenuRepository;
import cn.bellsee.citizen.repository.UserRepository;
import cn.bellsee.citizen.service.UserService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.List;

@RestController
public class UserController {

    Logger logger = LoggerFactory.getLogger(UserController.class);
    @Autowired
    UserService userService;

    @Autowired
    UserRepository userRepository;

    @Autowired
    RoleMenuRepository roleMenuRepository;


    @GetMapping("/info/{id}")
    public AjaxResult getUserInfo(@PathVariable String id, @RequestHeader("Token") String token) throws TipsException {
        logger.info("getUserInfo,id:{},token:{}", id, token);
        return AjaxResult.success(userService.getUserInfo(id));
    }

    // TODO : 前台不应该使用 User 接收对象,使用一个自定义的对象来接收
    @PostMapping("/info/change")
    public AjaxResult changeUserInfo(@RequestBody User user, @RequestHeader("Token") String token) throws IllegalAccessException, TipsException {
        logger.info("changeUserInfo,user:{},token:{}", user, token);
        System.out.println(user);
        userService.changeUserInfo(user);
        User nUser = userRepository.findById(user.getUserId()).orElse(null);

        if (nUser.getUserId() != null) {
            //获取 route
            List<Menu> menus = new ArrayList<>();
            roleMenuRepository.getRoleMenusByRoleId(nUser.getRole().getRoleId())
                    .forEach(roleMenu -> {
                        menus.add(roleMenu.getMenu());
                    });
            return AjaxResult.success("修改成功!", new UserData(nUser, ManagerMenu.parseMenuList(menus)));
        } else {
            return AjaxResult.error("修改失败!");
        }
    }

    /**
     * 后台 进行用户管理 查找所有用户
     */
    @PostMapping("/manager/userPage")
    public AjaxResult getUserPage(@RequestBody ManagerUserSelectFormat managerUserSelectFormat, @RequestHeader("Token") String token) {
        logger.info("getUserPage,managerUserSelectFormat:{},token:{}", managerUserSelectFormat, token);
        return AjaxResult.success(userService.selectUsers(managerUserSelectFormat));
    }

    /**
     * 后台 统计 Total
     */
    @PostMapping("/manager/userCount")
    public AjaxResult getUserCount(@RequestBody ManagerUserSelectFormat managerUserSelectFormat, @RequestHeader("Token") String token) {
        logger.info("getUserCount,managerUserSelectFormat:{},token:{}", managerUserSelectFormat, token);
        return AjaxResult.success(userService.getUserCount(managerUserSelectFormat));
    }

    /**
     * 后台 改变User信息 OR 添加用户 ( 给定的 UserId -> isHidden = 0  )
     */
    @PostMapping("/manager/userChange")
    public AjaxResult changeUserInfoManager(@RequestBody ManagerUserEditFormat managerUserEditFormat, @RequestHeader("Token") String token) throws IllegalAccessException {
        logger.info("changeUserInfoManager,managerUserEditFormat:{},token:{}", managerUserEditFormat, token);
        return AjaxResult.success(userService.changeUserInfo(managerUserEditFormat.getUser()));
    }

    /**
     * 后台 新增用户 创建临时 User
     */
    @GetMapping("/manager/newUser")
    public AjaxResult getNewUser(@RequestHeader("Token") String token) {
        Integer userId = userService.getNewUserId();
        logger.info("getNewUser,userId:{},token:{}", userId, token);

        return AjaxResult.success(userId);
    }

    /**
     * 后台 多选 禁用、启用、删除
     */
    @PostMapping("/manager/userMultipleSelection")
    public AjaxResult changeMultipleUserStatus(@RequestBody ManagerUserMultipleSelection managerUserMultipleSelection, @RequestHeader("Token") String token) throws TipsException {
//        System.out.println(managerUserMultipleSelection);
        logger.info("changeMultipleUserStatus,managerUserMultipleSelection:{},token:{}", managerUserMultipleSelection, token);
//        userRepository
        if (managerUserMultipleSelection.getStatus() == -1) {
            userRepository.deleteUser(managerUserMultipleSelection.getUserIdList());
        } else if (managerUserMultipleSelection.getStatus() == 0) {
            userRepository.updateUserBan(0, managerUserMultipleSelection.getUserIdList());
        } else if (managerUserMultipleSelection.getStatus() == 1) {
            userRepository.updateUserBan(1, managerUserMultipleSelection.getUserIdList());
        } else throw new TipsException();
        return AjaxResult.success();
    }

    @GetMapping("/manager/department/all")
    public AjaxResult getAllDepartment(@RequestHeader("Token") String token){
        logger.info("getAllDepartment,token:{}", token);
        return AjaxResult.success(userRepository.findByRoleId(10));
    }
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 13
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
抱歉,我是一个语言模型AI,无法展示图片或者设计图。但是,我可以为您提供一些基于Vue+SpringBoot的图书管理系统设计思路和技术架构。 整个系统的前端使用Vue框架,后端使用SpringBoot框架。前后端通过RESTful API进行数据交互。系统中的数据存储使用MySQL数据库。 前端主要包括登录注册模块、图书管理模块、用户管理模块等。其中,登录注册模块使用JWT实现用户认证和授权,图书管理模块实现对图书的添加、修改、删除和查询等功能,用户管理模块实现对用户信息的增删改查等功能。 后端主要包括用户管理模块、图书管理模块和权限管理模块等。其中,用户管理模块实现对用户信息的管理,图书管理模块实现对图书信息的管理,权限管理模块实现对用户权限的管理。 整个系统的运行流程如下: 1. 用户通过前端页面进行登录或者注册。 2. 前端向后端发送登录或注册请求。 3. 后端对用户信息进行验证,并返回JWT令牌。 4. 前端将JWT令牌保存在本地,并用于后续的请求验证和授权。 5. 用户通过前端页面进行图书的添加、修改、删除和查询等操作。 6. 前端向后端发送对应的请求。 7. 后端对请求进行验证和处理,并返回相应的数据。 8. 前端接收到数据,并进行相应的展示。 以上就是基于Vue+SpringBoot的图书管理系统的总体设计思路和技术架构。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值