介绍
基于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));
}
}
🌟思维导图
后面的就不再列举了,,
✨✨源码,看下面评论哦✨✨