XiaoLFeng 76a1cf758c
All checks were successful
代码检查 / 代码检查 (pull_request) Successful in 23s
patch: 优化日志处理模式,删除多余的日志信息
2024-04-16 17:29:21 +08:00

182 lines
7.0 KiB
Java

package com.jsl.oa.dao;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.jsl.oa.common.constant.BusinessConstants;
import com.jsl.oa.mapper.PermissionMapper;
import com.jsl.oa.model.dodata.PermissionDO;
import com.jsl.oa.utils.redis.RoleRedisUtil;
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;
/**
* <h1>权限数据表</h1>
* <hr/>
* 内容进入自定义实体类
*
* @author xiao_lfeng
* @version v1.1.0
* @since v1.1.0
*/
@Slf4j
@Component
@RequiredArgsConstructor
public class PermissionDAO {
private final PermissionMapper permissionMapper;
private final RoleRedisUtil<String> roleRedisUtil;
private final Gson gson;
/**
* <h2>获取用户权限信息</h2>
* <hr/>
* 通过用户 ID 获取用户权限信息
*
* @param uid 用户ID
* @return {@link List<String>}
*/
public List<String> getPermission(@NotNull Long uid) {
List<String> getPermissionForString;
String permissionRedisString = roleRedisUtil.getData(BusinessConstants.NONE, uid.toString());
if (permissionRedisString == null) {
List<PermissionDO> permissionList = permissionMapper.permissionUserPid(uid);
getPermissionForString = new ArrayList<>();
forPermissionToBuildString(permissionList, getPermissionForString);
// 存入 Redis
roleRedisUtil.setData(BusinessConstants.NONE, uid.toString(), gson.toJson(getPermissionForString), 1440);
} else {
getPermissionForString = gson.fromJson(permissionRedisString, new TypeToken<List<String>>() { }.getType());
}
return getPermissionForString;
}
public List<String> getAllPermissionBuildString() {
List<String> getPermissionForString;
String getRedisData = roleRedisUtil.getData(BusinessConstants.ALL_PERMISSION, "string");
if (getRedisData == null) {
List<PermissionDO> permissionList = permissionMapper.getAllPermission();
permissionList.removeIf(it -> it.getPid() != null);
getPermissionForString = new ArrayList<>();
forPermissionToBuildString(permissionList, getPermissionForString);
// 存入 Redis
roleRedisUtil.setData(
BusinessConstants.ALL_PERMISSION,
"string",
gson.toJson(getPermissionForString),
1440);
} else {
getPermissionForString = gson.fromJson(getRedisData, new TypeToken<List<String>>() { }.getType());
}
return getPermissionForString;
}
public List<PermissionDO> getRootPermission() {
String getRedisData = roleRedisUtil.getData(BusinessConstants.ALL_PERMISSION, "all");
if (getRedisData == null) {
List<PermissionDO> permissionList = permissionMapper.getAllPermission();
if (!permissionList.isEmpty()) {
List<PermissionDO> getPermissionList = new ArrayList<>();
for (PermissionDO permission : permissionList) {
if (permission.getPid() == null) {
getPermissionList.add(permission);
}
}
roleRedisUtil.setData(BusinessConstants.ALL_PERMISSION, "all", gson.toJson(getPermissionList), 1440);
return getPermissionList;
} else {
return null;
}
} else {
return gson.fromJson(getRedisData, new TypeToken<List<PermissionDO>>() {
}.getType());
}
}
/**
* <h2>获取全部权限信息</h2>
* <hr/>
* 获取全部权限信息
*
* @param permissionList 权限信息
* @param getPermissionForString 存储权限信息
*/
private void forPermissionToBuildString(
@NotNull List<PermissionDO> permissionList,
List<String> getPermissionForString) {
for (PermissionDO permission : permissionList) {
// 寻找是否存在父亲
StringBuilder permissionString = new StringBuilder();
if (permission.getPid() != null) {
// 存在父亲
this.getFatherPermission(permissionString, permission.getPid());
} else {
// 不存在父亲
permissionString.append(permission.getName());
}
// 寻找子类
this.getChildPermission(permissionString, permission.getId(), getPermissionForString);
getPermissionForString.add(permissionString.toString());
}
}
/**
* <h2>获取子类权限信息</h2>
* <hr/>
* 通过父类 ID 获取子类权限信息<br/>
* 递归调用
*
* @param permissionString 父类权限信息
* @param id 父类 ID
* @param getPermissionForString 存储权限信息
*/
private void getChildPermission(StringBuilder permissionString, Long id, List<String> getPermissionForString) {
// 获取子类权限信息
List<PermissionDO> permissionList = permissionMapper.getChildPermission(id);
// 判断是否存在子类
if (!permissionList.isEmpty()) {
// 存在子类
for (PermissionDO permission : permissionList) {
StringBuilder childPermissionString = new StringBuilder(permissionString);
// 遍历数据检查是否依旧存在子类
List<PermissionDO> childPermissionList = permissionMapper.getChildPermission(permission.getId());
if (!childPermissionList.isEmpty()) {
// 存在子类
permissionString.append(".").append(permission.getName());
this.getChildPermission(permissionString, permission.getId(), getPermissionForString);
} else {
// 不存在子类
permissionString.append(".").append(permission.getName());
getPermissionForString.add(permissionString.toString());
}
permissionString = childPermissionString;
}
}
}
/**
* <h2>获取父类权限信息</h2>
* <hr/>
* 通过子类 ID 获取父类权限信息<br/>
* 递归调用
*
* @param permissionString 父类权限信息
* @param pid 父类 ID
*/
public void getFatherPermission(StringBuilder permissionString, Long pid) {
// 获取权限信息
PermissionDO permissionDO = permissionMapper.getPermissionById(pid);
// 判断是否存在父亲
if (permissionDO.getPid() != null) {
// 存在父亲
this.getFatherPermission(permissionString, permissionDO.getPid());
} else {
// 不存在父亲
permissionString.append(permissionDO.getCode());
}
}
}