package com.jsl.oa.dao; import com.google.gson.Gson; import com.jsl.oa.common.constant.BusinessConstants; import com.jsl.oa.mapper.UserMapper; import com.jsl.oa.model.doData.RoleDO; import com.jsl.oa.model.doData.RoleUserDO; import com.jsl.oa.model.doData.UserDO; import com.jsl.oa.model.voData.UserAllCurrentVO; import com.jsl.oa.model.voData.UserCurrentBackVO; import com.jsl.oa.model.voData.UserEditProfileVO; import com.jsl.oa.utils.Processing; import com.jsl.oa.utils.redis.UserRedisUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.jetbrains.annotations.NotNull; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.List; /** *

用户 DAO

*
* 用于用户的增删改查,以及用户权限的获取,用户信息的获取,用户信息的修改,用户信息的删除,用户信息的锁定,用户信息的解锁,用户信息的添加,用户信息的 * 编辑等 * * @version v1.1.0 * @since v1.1.0 * @author xiao_lfeng | 176yunxuan | xiangZr-hhh */ @Slf4j @Component @RequiredArgsConstructor public class UserDAO { public final UserMapper userMapper; private final RoleDAO roleDAO; private final PermissionDAO permissionDAO; private final Gson gson; private final UserRedisUtil userRedisUtil; /** *

用户名获取用户信息

*
* 根据用户名获取用户信息 * * @param username 用户名 * @return {@link UserDO} * @author 筱锋xiao_lfeng */ public UserDO getUserInfoByUsername(String username) { log.info("\t> 执行 DAO 层 UserDAO.getUserInfoByUsername 方法"); UserDO userDO = null; // 从 Redis 获取数据 // TODO: 10000-Redis: 从 Redis 获取数据 // 从数据库获取用户信息 if (userDO == null) { userDO = userMapper.getUserInfoByUsername(username); } return userDO; } /** *

用户id获取用户信息

*
* 根据id判断用户是否存在 * * @param id 用户id * @return Boolean */ public Boolean isExistUser(@NotNull Long id) { log.info("\t> 执行 DAO 层 UserDAO.isExistUser 方法"); // 从 Redis 获取数据 String redisData = userRedisUtil.getData(BusinessConstants.NONE, id.toString()); if (redisData != null) { log.info("\t\t> 从 Redis 获取数据"); return true; } else { UserDO userDO = userMapper.getUserById(id); log.info("\t\t> 从 MySQL 获取数据"); if (userDO != null) { userRedisUtil.setData(BusinessConstants.NONE, userDO.getId().toString(), gson.toJson(userDO), 120); return true; } else { return false; } } } /** *

用户账号删除

*
* 用户账号删除 * * @param id 用户id */ public void userDelete(@NotNull Long id) { log.info("\t> 执行 DAO 层 UserDAO.userDelete 方法"); // Redis 获取数据 String redisData = userRedisUtil.getData(BusinessConstants.NONE, id.toString()); if (redisData != null) { log.info("\t\t> 从 Redis 删除数据"); userRedisUtil.delData(BusinessConstants.NONE, id.toString()); } log.info("\t\t> 从 MySQL 删除数据"); userMapper.userDelete(id); } public boolean userGetDelete(Long id) { log.info("\t> 执行 DAO 层 UserDAO.userGetDelete 方法"); log.info("\t\t> 从 MySQL 获取数据"); return userMapper.userGetDelete(id); } /** * 用户账号锁定 * * @param id */ public void userLock(Long id,Long isLock) { log.info("\t> 执行 DAO 层 UserDAO.userLock 方法"); log.info("\t\t> 从 MySQL 获取数据"); userMapper.userLock(id,isLock); } public void userEditProfile(UserEditProfileVO userEditProfileVO) { log.info("\t> 执行 DAO 层 UserDAO.userEditProfile 方法"); log.info("\t\t> 从 MySQL 获取数据"); userMapper.userEditProfile(userEditProfileVO); } public List userCurrentAll(UserAllCurrentVO userAllCurrentVO) { log.info("\t> 执行 DAO 层 UserDAO.userCurrentAll 方法"); log.info("\t\t> 从 MySQL 获取数据"); List userCurrentDO = userMapper.getAllUser(userAllCurrentVO); List userCurrentDOList = new ArrayList<>(); userCurrentDO.forEach(it -> userCurrentDOList.add(Processing.returnUserInfo(it, roleDAO, permissionDAO))); return userCurrentDOList; } public List userCurrentAllLike(UserAllCurrentVO userAllCurrentVO) { log.info("\t> 执行 DAO 层 UserDAO.userCurrentAllLike 方法"); log.info("\t\t> 从 MySQL 获取数据"); List userCurrentDO = userMapper.getAllUserBySearch(userAllCurrentVO); List userCurrentDOList = new ArrayList<>(); userCurrentDO.forEach(it -> userCurrentDOList.add(Processing.returnUserInfo(it, roleDAO, permissionDAO))); return userCurrentDOList; } /** * @return * @Description 用户添加 * @Date: 2024/1/16 * @Param userDO: user 数据库表实体类 */ public boolean userAdd(UserDO userDO) { log.info("\t> 执行 DAO 层 userAdd 方法"); log.info("\t\t> 从 MySQL 获取数据"); return userMapper.insertUser(userDO); } public void userEdit(UserDO userDO) { log.info("\t> 执行 DAO 层 userEdit 方法"); log.info("\t\t> 从 MySQL 获取数据"); userMapper.updateUser(userDO); } /** * @Description 根据username检测用户是否重复 * @Date: 2024/1/16 * @Param username: 用户名 **/ public Boolean isRepeatUser(String username) { log.info("\t> 执行 DAO 层 isRepeatUser 方法"); log.info("\t\t> 从 MySQL 获取数据"); return userMapper.getUserInfoByUsername(username) != null; } /** * @Description 检测用户工号是否重复 * @Date 2024/1/18 * @Param userNum: **/ public Boolean isRepeatUserNum(String userNum) { if (userMapper.getUserByUserNum(userNum) != null) { return true; } return false; } /** * @Description 根据用户id获取用户数据 * @Date 2024/1/17 * @Param userId **/ public UserDO getUserById(Long userId) { log.info("\t> 执行 DAO 层 getUserById 方法"); log.info("\t\t> 从 MySQL 获取数据"); return userMapper.getUserById(userId); } /** * @Description 根据用户id查询对应用户权限 * @Date 2024/1/18 * @Param uid:用户id **/ public RoleUserDO getRoleFromUser(Long uid) { log.info("\t> 执行 DAO 层 getRoleFromUser 方法"); log.info("\t\t> 从 MySQL 获取数据"); return userMapper.getRoleIdByUserId(uid); } /** * @Description 检验用户权限是否为管理员 * @Date 2024/1/18 * @Param null:用户id **/ public Boolean isManagerByRoleId(Long roleId) { log.info("\t> 执行 DAO 层 isManagerByRoleId 方法"); log.info("\t\t> 从 MySQL 获取数据"); RoleDO role = userMapper.getRoleById(roleId); if (role == null) { return false; } return "admin".equals(role.getRoleName()); } public List getRecommendUser(){ log.info("\t> 执行 DAO 层 getRecommendUser 方法"); log.info("\t\t> 从 MySQL 获取数据"); return userMapper.getRecommendUser(); } public UserDO getUserByEmail(String email) { log.info("\t> 执行 DAO 层 getUserByEmail 方法"); log.info("\t\t> 从 MySQL 获取数据"); return userMapper.getUserByEmail(email); } public UserDO getUserByPhone(String phone) { log.info("\t> 执行 DAO 层 getUserByPhone 方法"); log.info("\t\t> 从 MySQL 获取数据"); return userMapper.getUserByPhone(phone); } }