package com.application.server.sys.service.impl;
import com.alibaba.fastjson2.JSON;
import com.application.server.common.utils.JwtUtil;
import com.application.server.sys.entity.Menu;
import com.application.server.sys.entity.User;
import com.application.server.sys.entity.UserRole;
import com.application.server.sys.mapper.UserMapper;
import com.application.server.sys.mapper.UserRoleMapper;
import com.application.server.sys.service.IMenuService;
import com.application.server.sys.service.IUserService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* <p>
* 服务实现类
* </p>
*
* @author eee
* @since 2023-11-17
*/
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {
@Autowired
private RedisTemplate redisTemplate;
@Autowired
private PasswordEncoder passwordEncoder;
@Autowired
private JwtUtil jwtUtil;
@Resource
private UserRoleMapper userRoleMapper;
@Autowired
private IMenuService menuService;
@Override
public Map<String, Object> login(User user) {
//根据用户名查询
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper();
wrapper.eq(User::getUsername,user.getUsername());
User loginUser = this.baseMapper.selectOne(wrapper);
//结果不为空,则生成token给前端,并将用户信息存入redis
if(loginUser != null && passwordEncoder.matches(user.getPassword(), loginUser.getPassword())){
//暂用uuid,最好用jwt
//String key = "user:" + UUID.randomUUID();
//创建jwt
loginUser.setPassword(null);
String token = jwtUtil.createToken(loginUser);
//存入redis
// loginUser.setPassword(null);
// redisTemplate.opsForValue().set(key,loginUser,30, TimeUnit.MINUTES);
//返回数据
Map<String, Object> data = new HashMap<>();
data.put("token",token);
return data;
}
return null;
}
@Override
public Map<String, Object> getUserInfo(String token) {
// 从redis查询token
//Object obj = redisTemplate.opsForValue().get(token);
// 反序列化
//User user = JSON.parseObject(JSON.toJSONString(obj),User.class);
User loginUser = null;
try {
loginUser = jwtUtil.parseToken(token, User.class);
}catch (Exception e){
e.printStackTrace();
}
if(loginUser != null){
Map<String, Object> data = new HashMap<>();
data.put("name",loginUser.getUsername());
data.put("avatar",loginUser.getAvatar());
data.put("phone",loginUser.getPhone());
data.put("email",loginUser.getEmail());
data.put("id",loginUser.getId());
//角色
List<String> roleList = this.baseMapper.getRoleNamesByUserId(loginUser.getId());
data.put("roles", roleList);
//权限/菜单列表
List<Menu> menuList = menuService.getMenuListByUserId(loginUser.getId());
data.put("menuList",menuList);
return data;
}
return null;
}
@Override
public void logout(String token) {
//redisTemplate.delete(token);
}
@Override
@Transactional
public void addUser(User user) {
//写入用户表
this.baseMapper.insert(user);
//写入用户角色表
List<Integer> roleIdList = user.getRoleIdList();
if(roleIdList != null){
for(Integer roleId : roleIdList){
userRoleMapper.insert(new UserRole(null,user.getId(),roleId));
}
}
}
@Override
public User getUserById(Integer id) {
User user = this.baseMapper.selectById(id);
LambdaQueryWrapper<UserRole> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(UserRole::getUserId,id);
List <UserRole> userRoleList = userRoleMapper.selectList(wrapper);
List<Integer> roleIdList =
userRoleList.stream().map(userRole -> {
return userRole.getRoleId();
})
.collect(Collectors.toList());
user.setRoleIdList(roleIdList);
return user;
}
@Override
@Transactional
public void updateUser(User user) {
//更新用户表
this.baseMapper.updateById(user);
//清除原有角色
LambdaQueryWrapper<UserRole> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(UserRole::getUserId,user.getId());
userRoleMapper.delete(wrapper);
//设置新的角色
List<Integer> roleIdList = user.getRoleIdList();
if(roleIdList != null){
for(Integer roleId : roleIdList){
userRoleMapper.insert(new UserRole(null,user.getId(),roleId));
}
}
}
@Override
public void deleteUserById(Integer id) {
this.baseMapper.deleteById(id);
//清除原有角色
LambdaQueryWrapper<UserRole> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(UserRole::getUserId,id);
userRoleMapper.delete(wrapper);
}
}
Springboot+vue+MySQL实现的养老院管理系统
需积分: 0 180 浏览量
更新于2024-01-17
收藏 245KB ZIP 举报
【Spring Boot + Vue + MySQL 实现的养老院管理系统】
在当今的信息化社会,高效、便捷的管理系统对于各行各业都至关重要,特别是在老龄化趋势日益显著的今天,养老院管理系统的建设显得尤为重要。本项目采用Spring Boot作为后端开发框架,Vue.js作为前端框架,并结合MySQL数据库,构建了一个完整的养老院管理系统。下面将详细介绍这三个技术栈在系统中的应用。
**Spring Boot**
Spring Boot是基于Spring框架的快速开发工具,它简化了Spring应用程序的初始设置和配置。在本项目中,Spring Boot主要负责以下功能:
1. **自动配置**:Spring Boot通过`@SpringBootApplication`注解自动配置应用程序,省去了大量XML配置。
2. **内嵌式Web服务器**:Spring Boot支持内嵌Tomcat或Jetty,无需额外部署,提高了开发效率。
3. **starter依赖**:Spring Boot提供了一系列starter,如`spring-boot-starter-web`用于Web开发,方便添加所需依赖。
4. **RESTful API**:Spring Boot与Spring MVC集成,便于构建RESTful API,实现前后端分离。
**Vue.js**
Vue.js是一款轻量级的前端MVVM框架,以其简单易学、高性能和可维护性著称。在本项目中,Vue.js主要用于:
1. **组件化开发**:Vue.js的组件系统允许开发者将UI拆分成独立、可复用的组件,提高代码复用性和可维护性。
2. **响应式数据绑定**:Vue.js的`v-model`指令实现了视图和模型的双向数据绑定,简化了DOM操作。
3. **路由管理**:通过`vue-router`库,实现页面间的导航和状态管理,提供SPA(单页应用)体验。
4. **axios库**:Vue.js常用的数据交互库,用于发起HTTP请求,与后端Spring Boot服务进行数据交互。
**MySQL**
MySQL是一款流行的开源关系型数据库管理系统,适用于处理大量数据。在本项目中,MySQL用于:
1. **存储数据**:养老院的相关信息,如老人信息、员工信息、房间信息等,都存储在MySQL数据库中。
2. **数据操作**:通过Spring Data JPA或MyBatis等持久层框架,实现CRUD(创建、读取、更新、删除)操作。
3. **事务管理**:在需要确保数据一致性的情景下,MySQL支持ACID(原子性、一致性、隔离性、持久性)事务处理。
**系统实现**
在系统实现过程中,后端开发人员使用Spring Boot建立数据库模型,配置数据源,创建RESTful API接口,处理来自前端的HTTP请求。接着,前端开发者使用Vue.js构建用户界面,设计下拉菜单,实现养老院老人信息的查询功能,这些功能可能包括搜索、筛选、排序等。同时,前端通过axios调用后端API,获取或提交数据。前后端通过JSON进行数据交换,确保系统的正常运行。
总结,Spring Boot、Vue.js和MySQL的结合,为养老院管理系统提供了稳定、高效的解决方案。通过合理的设计和开发,这个系统可以有效地帮助养老院管理员进行日常管理,提升工作效率,同时也为老人和家属提供更好的服务体验。
m0_62991278
- 粉丝: 12
- 资源: 1
最新资源
- 基于卷积神经网络的人脸识别全部资料+优秀项目+详细文档.zip
- 基于卷积神经网络识别面部表情(机器学习课程设计)全部资料+优秀项目+详细文档.zip
- 厚板碳素钢制压力容器的焊接方法控制.pdf
- 娱乐综艺异业合作营销策划方案.zip
- 机械设计汽车单用途缓冲器生产线上下料机step全套设计资料100%好用.zip
- 机械设计汽车天窗GPA修边打磨工作站(sw18可编辑+工程图+BOM)全套设计资料100%好用.zip
- 机械设计全自动对刀仪(sw可编辑+bom单+工程图)全套设计资料100%好用.zip
- 基于Python,通过神经网络训练锂离子电池使用相关数据,预测电池当前最大容量全部资料+详细文档+优秀项目.zip
- 基于C语言关于快递柜的数据结构大作业全部资料+详细文档+优秀项目.zip
- 基于Echarts和百度地图的地理大数据可视化项目全部资料+详细文档+优秀项目.zip
- 人工智能实战-从 Python 入门到机器学习.zip
- 基于Spark的电商用户行为分析大数据平台全部资料+详细文档+优秀项目.zip
- 基于python的电商产品评论数据情感分析全部资料+详细文档+优秀项目.zip
- 基于ssm开发的电力大数据,hadoop+python数据抓取全部资料+详细文档+优秀项目.zip
- 基于vue框架的大数据展示页面全部资料+详细文档+优秀项目.zip
- 基于Vue和SpringBoot的大病保险管理系统全部资料+详细文档+优秀项目.zip