【计算机毕业设计】疫情社区管理系统的设计与实现

介绍

基于Java的疫情社区人员流动管理系统。

软件架构

系统使用前后端分离,后端编写接口,提供数据。前端调用接口获取数据,根据要求在页面上进行渲染。

由于使用前后端分离,就要解决跨域访问的问题,所以用JWT进行数据的传送。

用shiro框架进行权限的控制,根据用户拥有的角色,分配角色对应的权限。

在用户注册时,会有注册码,注册码有两种分类,一种是管理员,一种是超级管理员,根据注册码给用户分配角色。

管理员有添加、查询,删除居民或者访客信息的权限,也有查询住户地址权限。而超级管理员拥有系统所有的权限。

开发环境

1.系统用Java语言开发,前端用Vue,后端用Spring Boot框架;

2.开发工具:IDEA、Navicat Premium 15、Postman等;

3.技术:MySQL、Redis、Spring、Spring Boot、MyBatis、JWT(Shiro)、Vue等

界面效果图

登录:
在这里插入图片描述
首页:
首页
用户个人信息(图片上传):
在这里插入图片描述

住户管理:
在这里插入图片描述
访客出入登记:
在这里插入图片描述
访客出入信息管理:
在这里插入图片描述
文件管理:
在这里插入图片描述
垃圾箱(数据恢复):
在这里插入图片描述

项目结构

在这里插入图片描述

代码实现:

登录:

@RequestMapping("/user")
@RestController
public class LoginController {

    final UserService userService;

    final MenuService menuService;

    public LoginController(UserService userService, MenuService menuService){
        this.userService = userService;
        this.menuService = menuService;
    }

    @RequestMapping(value = "/login",method = RequestMethod.POST)
    public APIResult login(@RequestBody User user){
        Subject subject = SecurityUtils.getSubject();
        try {
            subject.login(new UsernamePasswordToken(user.getAccount(),user.getPassword()));
            // 获取当前登录用户
            User loginuser = userService.findRolesByAccount(user.getAccount());
            List<Menu> menuByRoleName = menuService.findMenuByRoleName(loginuser.getRoleName());
            loginuser.setMenus(menuByRoleName);
            if (loginuser.getStatus() == ConstantsUtils.CODE_STATUS_1){
                return APIResult.notFound("该用户已被禁用或者拉入黑名单,请联系管理员");
            }
            loginuser.setPassword(null);
            loginuser.setCodeText(null);
            String token = TokenUtil.createToken(loginuser.getAccount());
            return new APIResult(ConstantsUtils.CODE_STATUS_200,token,1,loginuser);
        } catch (UnknownAccountException e) {
            e.printStackTrace();
            return APIResult.notFound("用户名错误");
        } catch (IncorrectCredentialsException e) {
            e.printStackTrace();
            return APIResult.notFound("密码错误");
        }

    }
    @RequestMapping(value = "/loginout",method = RequestMethod.POST)
    public APIResult loginout(@RequestBody String account){
        RedisTemplate redisTemplate = (RedisTemplate) ApplicationContextUtils.getBean("redisTemplate");
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        redisTemplate.opsForHash().delete("authenticationCache",account);
        return new APIResult(ConstantsUtils.CODE_STATUS_200,null,ConstantsUtils.CODE_STATUS_1,"退出成功");
    }


    @RequestMapping(value = "/reg",method = RequestMethod.POST)
    public APIResult reg(@RequestBody User user){

        try {
            userService.reg(user);
            return APIResult.created(user);
        } catch (Exception e) {
            e.printStackTrace();
            return APIResult.notFound(e.getMessage());
        }
    }
}

图表统计

@RequestMapping("/echarts")
@RestController
public class EchartsController {

    final ResidentService residentService;
    final VisitorService visitorService;
    final AddressService addressService;

    public EchartsController(ResidentService residentService, VisitorService visitorService, AddressService addressService) {
        this.residentService = residentService;
        this.visitorService = visitorService;
        this.addressService = addressService;
    }

    @GetMapping("/members")
    public APIResult members() {
        List<Resident> list = residentService.queryAll(null,null,null);
        int q1 = list.size(); // 正常
        List<Resident> residents = residentService.queryByresState();
        int q2 = residents.size();
        return new APIResult(ConstantsUtils.CODE_STATUS_200,null,list.size(),CollUtil.newArrayList(q1, q2));
    }

    @RequestMapping(value = "/vis",method = RequestMethod.GET)
    public APIResult getVis(){
        List<Visitor> list = visitorService.queryAll(null, null, null);
        int q1 = 0; // 第一季度
        int q2 = 0; // 第二季度
        int q3 = 0; // 第三季度
        int q4 = 0; // 第四季度
        for (Visitor visitor : list) {
            Date visTime = visitor.getVisTime();
            Quarter quarter = DateUtil.quarterEnum(visTime);
            switch (quarter) {
                case Q1: q1 += 1; break;
                case Q2: q2 += 1; break;
                case Q3: q3 += 1; break;
                case Q4: q4 += 1; break;
                default: break;
            }
        }
        return new APIResult(ConstantsUtils.CODE_STATUS_200,null,list.size(),CollUtil.newArrayList(q1, q2, q3, q4));
    }

    @RequestMapping(value = "/getFour",method = RequestMethod.GET)
    public APIResult getFour(){
        //住户总体人数
        List<Resident> list1 = residentService.getAll();
        int number1=list1.size();
        //访客数量
        List<Visitor> list2 = visitorService.getAll();
        int number2 =list2.size();
        //中高风险地区人数
        List<Resident> list3 = residentService.queryByresState();
        int number3 = list3.size();
        //房间数量
        List<Address> list4 = addressService.queryAll(null, null, null);
        int number4 = list4.size();
        return new APIResult(ConstantsUtils.CODE_STATUS_200,null,null,CollUtil.newArrayList(number1, number2, number3, number4));
    }

}

🌟思维导图

在这里插入图片描述

后面的就不再列举了,,

✨✨源码,看下面评论哦✨✨


版权声明:本文为newuserphb原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
THE END
< <上一篇
下一篇>>