【计算机毕业设计】疫情社区管理系统的设计与实现 (新增-健康打卡)

介绍

基于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));
    }

}

🌟思维导图

在这里插入图片描述

后面的就不再列举了,,

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

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值