Merge branch 'develop' of https://git-fy.cn/WxxyDeveloper/JSL_OrganizeInternalOA into feature-zrx
# Conflicts: # src/main/java/com/jsl/oa/controllers/ReviewController.java # src/main/java/com/jsl/oa/dao/ProjectDAO.java # src/main/java/com/jsl/oa/services/impl/ModuleServiceImpl.java # src/main/java/com/jsl/oa/services/impl/ReviewServiceImpl.java
This commit is contained in:
commit
f3840de509
|
@ -1,59 +0,0 @@
|
|||
package com.jsl.oa;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.jsl.oa.common.constant.SafeConstants;
|
||||
import com.jsl.oa.mapper.InfoMapper;
|
||||
import com.jsl.oa.model.dodata.ConfigDO;
|
||||
import com.jsl.oa.model.vodata.business.InfoAboutSecurityKey;
|
||||
import com.jsl.oa.utils.Processing;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.beans.factory.SmartInitializingSingleton;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.sql.Timestamp;
|
||||
|
||||
/**
|
||||
* <h1>启动类</h1>
|
||||
* <hr/>
|
||||
* 用于启动项目
|
||||
*
|
||||
* @version v1.1.0
|
||||
* @see org.springframework.boot.SpringApplication
|
||||
* @see org.springframework.boot.autoconfigure.SpringBootApplication
|
||||
* @since v1.1.0
|
||||
* @author xiaofeng
|
||||
*/
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
public class JslOrganizeInternalOaRunnerApplication implements SmartInitializingSingleton {
|
||||
private final Gson gson = new Gson();
|
||||
private final InfoMapper infoMapper;
|
||||
|
||||
|
||||
/**
|
||||
* <h1>获取安全密钥</h1>
|
||||
* <hr/>
|
||||
* 从数据库中获取安全密钥
|
||||
*/
|
||||
@Override
|
||||
public void afterSingletonsInstantiated() {
|
||||
// 获取数据库中的 SecurityKey
|
||||
try {
|
||||
SafeConstants.setSecretKey(infoMapper.getSecurityKey().getData());
|
||||
} catch (NullPointerException exception) {
|
||||
// 生成密钥
|
||||
String key = Processing.generateKey(System.currentTimeMillis());
|
||||
InfoAboutSecurityKey infoAboutSecurityKey = new InfoAboutSecurityKey();
|
||||
infoAboutSecurityKey.setKey(key)
|
||||
.setUpdateTime(System.currentTimeMillis());
|
||||
String json = gson.toJson(infoAboutSecurityKey, InfoAboutSecurityKey.class);
|
||||
// 更新密钥
|
||||
ConfigDO configDO = new ConfigDO();
|
||||
configDO.setValue("security_key")
|
||||
.setData(json)
|
||||
.setCreatedAt(new Timestamp(System.currentTimeMillis()));
|
||||
infoMapper.insertSecurityKey(configDO);
|
||||
SafeConstants.setSecretKey(key);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,60 +0,0 @@
|
|||
package com.jsl.oa.annotations;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
/**
|
||||
* <h1>检查用户是否可用</h1>
|
||||
* <hr/>
|
||||
* 用于检查用户是否可用
|
||||
*
|
||||
* @version v1.1.0
|
||||
* @since v1.1.0
|
||||
* @see com.jsl.oa.aspect.AnnotationsAspect
|
||||
* @author xiao_lfeng
|
||||
*/
|
||||
@Target(ElementType.METHOD)
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
public @interface CheckUserAbleToUse {
|
||||
/**
|
||||
* <h2>是否启用</h2>
|
||||
* <hr/>
|
||||
* 用于指定是否启用<br/>
|
||||
* 请注意,禁用后任何用户权限校验不校验用户是否启用
|
||||
*
|
||||
* @return {@link Boolean}
|
||||
*/
|
||||
boolean isCheckEnable() default true;
|
||||
|
||||
/**
|
||||
* <h2>是否删除</h2>
|
||||
* <hr/>
|
||||
* 用于指定是否删除<br/>
|
||||
* 请注意,禁用后任何用户权限校验不校验用户是否删除
|
||||
*
|
||||
* @return {@link Boolean}
|
||||
*/
|
||||
boolean isCheckDelete() default true;
|
||||
|
||||
/**
|
||||
* <h2>是否锁定</h2>
|
||||
* <hr/>
|
||||
* 用于指定是否锁定<br/>
|
||||
* 请注意,禁用后任何用户权限校验不校验用户是否锁定
|
||||
*
|
||||
* @return {@link Boolean}
|
||||
*/
|
||||
boolean isCheckLock() default true;
|
||||
|
||||
/**
|
||||
* <h2>是否过期</h2>
|
||||
* <hr/>
|
||||
* 用于指定是否过期<br/>
|
||||
* 请注意,禁用后任何用户权限校验不校验用户是否过期
|
||||
*
|
||||
* @return {@link Boolean}
|
||||
*/
|
||||
boolean isCheckExpire() default true;
|
||||
}
|
|
@ -14,7 +14,7 @@ import java.lang.annotation.*;
|
|||
@Documented
|
||||
@Target(ElementType.METHOD)
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
public @interface CheckUserHasPermission {
|
||||
public @interface NeedRoleGroup {
|
||||
/**
|
||||
* <h2>权限名称</h2>
|
||||
* <hr/>
|
||||
|
@ -23,14 +23,4 @@ public @interface CheckUserHasPermission {
|
|||
* @return {@link String}
|
||||
*/
|
||||
String value() default "";
|
||||
|
||||
/**
|
||||
* <h2>是否检查</h2>
|
||||
* <hr/>
|
||||
* 用于指定是否检查<br/>
|
||||
* 请注意,该方法只会禁止检查权限,但是不会禁止检查用户是否允许继续执行
|
||||
* @since v1.1.0
|
||||
* @return {@link Boolean}
|
||||
*/
|
||||
boolean isCheck() default true;
|
||||
}
|
19
src/main/java/com/jsl/oa/annotations/UserAbleToUse.java
Normal file
19
src/main/java/com/jsl/oa/annotations/UserAbleToUse.java
Normal file
|
@ -0,0 +1,19 @@
|
|||
package com.jsl.oa.annotations;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
/**
|
||||
* <h1>检查用户是否可用</h1>
|
||||
* <hr/>
|
||||
* 用于检查用户是否可用
|
||||
*
|
||||
* @version v1.1.0
|
||||
* @since v1.1.0
|
||||
* @author xiao_lfeng
|
||||
*/
|
||||
@Target(ElementType.METHOD)
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
public @interface UserAbleToUse { }
|
|
@ -1,206 +0,0 @@
|
|||
package com.jsl.oa.aspect;
|
||||
|
||||
import com.jsl.oa.annotations.CheckUserAbleToUse;
|
||||
import com.jsl.oa.annotations.CheckUserHasPermission;
|
||||
import com.jsl.oa.dao.PermissionDAO;
|
||||
import com.jsl.oa.dao.RoleDAO;
|
||||
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.utils.BaseResponse;
|
||||
import com.jsl.oa.utils.ErrorCode;
|
||||
import com.jsl.oa.utils.Processing;
|
||||
import com.jsl.oa.utils.ResultUtil;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.aspectj.lang.ProceedingJoinPoint;
|
||||
import org.aspectj.lang.annotation.Around;
|
||||
import org.aspectj.lang.annotation.Aspect;
|
||||
import org.aspectj.lang.reflect.MethodSignature;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.context.request.RequestContextHolder;
|
||||
import org.springframework.web.context.request.ServletRequestAttributes;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* <h1>注解切面</h1>
|
||||
* <hr/>
|
||||
* 用于注解的切面
|
||||
*
|
||||
* @author xiao_lfeng
|
||||
* @version v1.1.0
|
||||
* @since v1.1.0
|
||||
*/
|
||||
@Slf4j
|
||||
@Aspect
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
public class AnnotationsAspect {
|
||||
private final UserMapper userMapper;
|
||||
private final RoleDAO roleDAO;
|
||||
private final PermissionDAO permissionDAO;
|
||||
|
||||
/**
|
||||
* <h2>检查用户是否有权限</h2>
|
||||
* <hr/>
|
||||
* 检查用户是否有权限
|
||||
*
|
||||
* @param pjp ProceedingJoinPoint对象
|
||||
* @return {@link Object}
|
||||
* @throws Throwable 异常
|
||||
*/
|
||||
@Around("@annotation(com.jsl.oa.annotations.CheckUserHasPermission)")
|
||||
public Object checkUserHasPermission(@NotNull ProceedingJoinPoint pjp) throws Throwable {
|
||||
log.info("用户权限检查");
|
||||
// 获取 HttpServletRequest 对象
|
||||
HttpServletRequest request =
|
||||
((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes()))
|
||||
.getRequest();
|
||||
|
||||
// 获取注解方法
|
||||
CheckUserHasPermission checkUserHasPermission = getCheckUserHasPermission(pjp);
|
||||
// 获取注解值
|
||||
String permissionName = null;
|
||||
boolean permissionCheck = true;
|
||||
if (checkUserHasPermission != null) {
|
||||
permissionName = checkUserHasPermission.value();
|
||||
permissionCheck = checkUserHasPermission.isCheck();
|
||||
}
|
||||
|
||||
// 获取用户信息
|
||||
Long userId = Processing.getAuthHeaderToUserId(request);
|
||||
if (userId != null) {
|
||||
// 检查用户是否允许继续执行
|
||||
BaseResponse checkUserAbleToNext = checkUserAbleToNext(userId, userMapper);
|
||||
if (checkUserAbleToNext != null) {
|
||||
return checkUserAbleToNext;
|
||||
} else {
|
||||
if (permissionCheck) {
|
||||
// 检查用户权限
|
||||
List<String> getPermission = permissionDAO.getPermission(userId);
|
||||
// 匹配权限
|
||||
if (getPermission.contains(permissionName)) {
|
||||
return pjp.proceed();
|
||||
} else {
|
||||
log.info("\t> 用户权限不足,检查是否是管理员");
|
||||
// 检查用户是管理员
|
||||
RoleUserDO roleUserDO = roleDAO
|
||||
.getRoleUserByUid(Processing.getAuthHeaderToUserId(request));
|
||||
if (roleUserDO == null) {
|
||||
return ResultUtil.error(ErrorCode.NOT_ADMIN);
|
||||
}
|
||||
RoleDO roleDO = roleDAO.getRoleByRoleName("admin");
|
||||
if (roleUserDO.getRid().equals(roleDO.getId())) {
|
||||
return pjp.proceed();
|
||||
} else {
|
||||
return ResultUtil.error(ErrorCode.NOT_PERMISSION);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return pjp.proceed();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return ResultUtil.error(ErrorCode.TOKEN_NOT_EXIST);
|
||||
}
|
||||
}
|
||||
|
||||
@Around("@annotation(com.jsl.oa.annotations.CheckUserAbleToUse)")
|
||||
public Object checkUserAbleToUse(ProceedingJoinPoint pjp) throws Throwable {
|
||||
log.info("检查用户是否有权限继续");
|
||||
// 获取 HttpServletRequest 对象
|
||||
HttpServletRequest request =
|
||||
((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes()))
|
||||
.getRequest();
|
||||
|
||||
// 获取注解方法
|
||||
CheckUserAbleToUse check = getCheckUserAbleToUse(pjp);
|
||||
// 获取注解值
|
||||
assert check != null;
|
||||
|
||||
// 获取用户信息
|
||||
Long userId = Processing.getAuthHeaderToUserId(request);
|
||||
UserDO userDO = userMapper.getUserById(userId);
|
||||
// 用户不存在
|
||||
if (userDO == null) {
|
||||
return ResultUtil.error(ErrorCode.USER_NOT_EXIST);
|
||||
}
|
||||
if (check.isCheckEnable()) {
|
||||
// 用户是否被禁用
|
||||
if (!userDO.getEnabled()) {
|
||||
return ResultUtil.error(ErrorCode.USER_DISABLED);
|
||||
}
|
||||
}
|
||||
if (check.isCheckLock()) {
|
||||
// 用户是否被封禁
|
||||
if (!userDO.getAccountNoLocked()) {
|
||||
return ResultUtil.error(ErrorCode.USER_LOCKED);
|
||||
}
|
||||
}
|
||||
if (check.isCheckDelete()) {
|
||||
// 用户是否被删除
|
||||
if (userDO.getIsDelete()) {
|
||||
return ResultUtil.error(ErrorCode.USER_ALREADY_DELETE);
|
||||
}
|
||||
}
|
||||
if (check.isCheckExpire()) {
|
||||
// 用户是否过期
|
||||
if (!userDO.getAccountNoExpired()) {
|
||||
return ResultUtil.error(ErrorCode.USER_EXPIRED);
|
||||
}
|
||||
}
|
||||
return pjp.proceed();
|
||||
}
|
||||
|
||||
private @Nullable CheckUserHasPermission getCheckUserHasPermission(@NotNull ProceedingJoinPoint joinPoint) {
|
||||
// 获取方法对象
|
||||
MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
|
||||
Method method = methodSignature.getMethod();
|
||||
|
||||
// 获取方法上的注解
|
||||
return (method != null) ? method.getAnnotation(CheckUserHasPermission.class) : null;
|
||||
}
|
||||
|
||||
private @Nullable CheckUserAbleToUse getCheckUserAbleToUse(@NotNull ProceedingJoinPoint joinPoint) {
|
||||
// 获取方法对象
|
||||
MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
|
||||
Method method = methodSignature.getMethod();
|
||||
|
||||
// 获取方法上的注解
|
||||
return (method != null) ? method.getAnnotation(CheckUserAbleToUse.class) : null;
|
||||
}
|
||||
|
||||
private @Nullable BaseResponse checkUserAbleToNext(Long userId, @NotNull UserMapper userMapper) {
|
||||
log.info("\t> 检查用户是否有权限继续");
|
||||
// 获取用户信息
|
||||
UserDO userDO = userMapper.getUserById(userId);
|
||||
// 用户不存在
|
||||
if (userDO == null) {
|
||||
return ResultUtil.error(ErrorCode.USER_NOT_EXIST);
|
||||
}
|
||||
// 用户是否被禁用
|
||||
if (!userDO.getEnabled()) {
|
||||
return ResultUtil.error(ErrorCode.USER_DISABLED);
|
||||
}
|
||||
// 用户是否被封禁
|
||||
if (!userDO.getAccountNoLocked()) {
|
||||
return ResultUtil.error(ErrorCode.USER_LOCKED);
|
||||
}
|
||||
// 用户是否被删除
|
||||
if (userDO.getIsDelete()) {
|
||||
return ResultUtil.error(ErrorCode.USER_ALREADY_DELETE);
|
||||
}
|
||||
// 用户是否过期
|
||||
if (!userDO.getAccountNoExpired()) {
|
||||
return ResultUtil.error(ErrorCode.USER_EXPIRED);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
|
@ -1,131 +0,0 @@
|
|||
package com.jsl.oa.aspect;
|
||||
|
||||
import com.jsl.oa.common.constant.BusinessConstants;
|
||||
import com.jsl.oa.utils.ErrorCode;
|
||||
import com.jsl.oa.utils.ResultUtil;
|
||||
import com.jsl.oa.utils.redis.TokenRedisUtil;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.aspectj.lang.ProceedingJoinPoint;
|
||||
import org.aspectj.lang.annotation.Around;
|
||||
import org.aspectj.lang.annotation.Aspect;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.context.request.RequestContextHolder;
|
||||
import org.springframework.web.context.request.ServletRequestAttributes;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* <h1>用户控制器切面</h1>
|
||||
* <hr/>
|
||||
* 用于用户控制器的切面
|
||||
*
|
||||
* @author xiao_lfeng
|
||||
* @version v1.1.0
|
||||
* @since v1.0.0
|
||||
*/
|
||||
@Slf4j
|
||||
@Aspect
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
public class AuthControllerAspect {
|
||||
private final TokenRedisUtil<String> tokenRedisUtil;
|
||||
|
||||
/**
|
||||
* <h1>用户控制器切面</h1>
|
||||
* <hr/>
|
||||
* 用于用户控制器的切面
|
||||
*
|
||||
* @param pjp ProceedingJoinPoint对象
|
||||
* @return {@link Object}
|
||||
* @throws Throwable 异常
|
||||
* @since v1.0.0
|
||||
*/
|
||||
@Around("execution(* com.jsl.oa.controllers.*.*(..)) && !execution(* com.jsl.oa.controllers.IndexController.*(..))")
|
||||
public Object controllerAround(ProceedingJoinPoint pjp) throws Throwable {
|
||||
// 获取HttpServletRequest对象
|
||||
HttpServletRequest request =
|
||||
((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes()))
|
||||
.getRequest();
|
||||
|
||||
// 时间戳检查
|
||||
if (checkTimestamp(request)) {
|
||||
// TODO: 2023/12/21 0001 后期固定业务(如:日志处理)
|
||||
return pjp.proceed();
|
||||
} else {
|
||||
return ResultUtil.error(ErrorCode.TIMESTAMP_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* <h1>Token检查切面</h1>
|
||||
* <hr/>
|
||||
* 用于检查Token是否有效
|
||||
*
|
||||
* @param pjp ProceedingJoinPoint对象
|
||||
* @return {@link Object}
|
||||
* @throws Throwable 异常
|
||||
*/
|
||||
@Around("execution(* com.jsl.oa.controllers.*.*(..)) "
|
||||
+ "&& !execution(* com.jsl.oa.controllers.AuthController.authSendEmailCode(..))"
|
||||
+ "&& !execution(* com.jsl.oa.controllers.AuthController.authLoginByEmail(..))"
|
||||
+ "&& !execution(* com.jsl.oa.controllers.AuthController.authForgetPassword(..))"
|
||||
+ "&& !execution(* com.jsl.oa.controllers.AuthController.authLogin(..))"
|
||||
+ "&& !execution(* com.jsl.oa.controllers.AuthController.authRegister(..)) "
|
||||
+ "&& !execution(* com.jsl.oa.controllers.IndexController.*(..)) "
|
||||
+ "&& !execution(* com.jsl.oa.controllers.CustomController.*(..)) "
|
||||
+ "&& !execution(* com.jsl.oa.controllers.InfoController.infoGetHeaderImage(..)) "
|
||||
+ "&& !execution(* com.jsl.oa.controllers.InfoController.infoGetHeaderUser(..))"
|
||||
+ "&& !execution(* com.jsl.oa.controllers.ProjectController.*(..))"
|
||||
+ "&& !execution(* com.jsl.oa.controllers.TagController.*(..))")
|
||||
public Object tokenControllerAround(ProceedingJoinPoint pjp) throws Throwable {
|
||||
// 获取 HttpServletRequest 对象
|
||||
HttpServletRequest request =
|
||||
((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes()))
|
||||
.getRequest();
|
||||
|
||||
// 检查 Token 是否有效
|
||||
String token = request.getHeader("Authorization");
|
||||
if (token != null && !token.isEmpty()) {
|
||||
// 获取 Redis 检查 Token 是否存在
|
||||
String finalToken = token.replace("Bearer ", "");
|
||||
for (String it : tokenRedisUtil.getList(BusinessConstants.BUSINESS_LOGIN)) {
|
||||
if (it.equals(finalToken)) {
|
||||
return pjp.proceed();
|
||||
}
|
||||
}
|
||||
}
|
||||
return ResultUtil.error(ErrorCode.TOKEN_NOT_EXIST);
|
||||
}
|
||||
|
||||
/**
|
||||
* <h1>时间戳检查</h1>
|
||||
* <hr/>
|
||||
* 用于检查时间戳是否合法,合法时间范围正负5秒
|
||||
*
|
||||
* @param request HttpServletRequest对象
|
||||
* @return {@link Boolean}
|
||||
* @since v1.0.0
|
||||
*/
|
||||
private @NotNull Boolean checkTimestamp(@NotNull HttpServletRequest request) {
|
||||
// 获取请求头中的时间戳
|
||||
String getTimestamp = request.getHeader("Timestamp");
|
||||
log.info("\t> 获取到的时间戳为 {} | 当前时间戳 {}", getTimestamp, System.currentTimeMillis());
|
||||
// 判断是否为空
|
||||
if (getTimestamp == null || getTimestamp.isEmpty()) {
|
||||
return false;
|
||||
} else {
|
||||
if (getTimestamp.length() == 10) {
|
||||
getTimestamp += "000";
|
||||
}
|
||||
}
|
||||
// 获取当前时间戳
|
||||
long nowTimestamp = System.currentTimeMillis();
|
||||
|
||||
// 时间误差允许前后五秒钟
|
||||
return nowTimestamp - Long.parseLong(getTimestamp) <= 10000
|
||||
&& nowTimestamp - Long.parseLong(getTimestamp) >= -10000;
|
||||
}
|
||||
}
|
100
src/main/java/com/jsl/oa/aspect/BusinessAop.java
Normal file
100
src/main/java/com/jsl/oa/aspect/BusinessAop.java
Normal file
|
@ -0,0 +1,100 @@
|
|||
package com.jsl.oa.aspect;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.aspectj.lang.JoinPoint;
|
||||
import org.aspectj.lang.ProceedingJoinPoint;
|
||||
import org.aspectj.lang.annotation.Around;
|
||||
import org.aspectj.lang.annotation.Aspect;
|
||||
import org.aspectj.lang.annotation.Before;
|
||||
import org.aspectj.lang.reflect.MethodSignature;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.context.request.RequestContextHolder;
|
||||
import org.springframework.web.context.request.ServletRequestAttributes;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
* 业务切面
|
||||
* <hr/>
|
||||
* 对业务进行切入,进行对内容操作的预处理
|
||||
*
|
||||
* @since v1.2.0
|
||||
* @version v1.2.0
|
||||
* @author xiao_lfeng
|
||||
*/
|
||||
@Slf4j
|
||||
@Aspect
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
public class BusinessAop {
|
||||
|
||||
/**
|
||||
* 在控制器的所有方法执行前执行
|
||||
*
|
||||
* @param joinPoint 切入点提供对方法执行的信息
|
||||
*/
|
||||
@Before("execution(* com.jsl.oa.controllers.*.*(..))")
|
||||
public void beforeController(@NotNull JoinPoint joinPoint) {
|
||||
// 从ServletRequest中获取用户信息
|
||||
ServletRequestAttributes servletRequestAttributes =
|
||||
(ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
|
||||
|
||||
if (servletRequestAttributes != null) {
|
||||
HttpServletRequest request = servletRequestAttributes.getRequest();
|
||||
// 获取方法签名
|
||||
MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
|
||||
Class<?> declaringType = methodSignature.getDeclaringType();
|
||||
String methodName = methodSignature.getName();
|
||||
|
||||
log.info(
|
||||
"[CONTROL] 执行 {}:{} 接口 | 地址: [{}]{}",
|
||||
declaringType.getName(),
|
||||
methodName,
|
||||
request.getMethod(),
|
||||
request.getServletPath()
|
||||
);
|
||||
} else {
|
||||
throw new RuntimeException("无法获取信息");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 在服务的所有方法执行前执行
|
||||
*
|
||||
* @param joinPoint 切入点提供对方法执行的信息
|
||||
*/
|
||||
@Before("execution(* com.jsl.oa.services.impl.*.*(..))")
|
||||
public void beforeService(@NotNull JoinPoint joinPoint) {
|
||||
// 获取方法签名
|
||||
MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
|
||||
Class<?> declaringType = methodSignature.getDeclaringType();
|
||||
String methodName = methodSignature.getName();
|
||||
|
||||
log.info("[SERVICE] 执行 {}:{} 业务", declaringType.getName(), methodName);
|
||||
}
|
||||
|
||||
/**
|
||||
* 在DAO的所有方法执行前执行
|
||||
*
|
||||
* @param pjp 切入点提供对方法执行的信息
|
||||
*/
|
||||
@Around("execution(* com.jsl.oa.dao.*.*(..))")
|
||||
public Object beforeDao(@NotNull ProceedingJoinPoint pjp) throws Throwable {
|
||||
// 获取方法签名
|
||||
MethodSignature methodSignature = (MethodSignature) pjp.getSignature();
|
||||
Class<?> declaringType = methodSignature.getDeclaringType();
|
||||
String methodName = methodSignature.getName();
|
||||
Object[] args = pjp.getArgs();
|
||||
log.info("==>[DAO] 操作 {}:{} 记录", declaringType.getName(), methodName);
|
||||
if (args.length != 0) {
|
||||
log.debug("\t> 传入信息:{}", Arrays.toString(args));
|
||||
}
|
||||
Object result = pjp.proceed();
|
||||
log.info("<==[DAO] 返回数据类型 {}", declaringType.descriptorString());
|
||||
log.debug("\t> 传出信息:{}", result.toString());
|
||||
return result;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,75 @@
|
|||
package com.jsl.oa.aspect;
|
||||
|
||||
import com.jsl.oa.dao.UserDAO;
|
||||
import com.jsl.oa.exception.library.NotLoginException;
|
||||
import com.jsl.oa.exception.library.UserCanntUse;
|
||||
import com.jsl.oa.model.dodata.UserDO;
|
||||
import com.jsl.oa.utils.Processing;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.aspectj.lang.ProceedingJoinPoint;
|
||||
import org.aspectj.lang.annotation.Around;
|
||||
import org.aspectj.lang.annotation.Aspect;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.context.request.RequestContextHolder;
|
||||
import org.springframework.web.context.request.ServletRequestAttributes;
|
||||
|
||||
/**
|
||||
* 检查用户权限切面
|
||||
* <hr/>
|
||||
* 检查用户能否正常使用,在用户使用之前进行可用性检查
|
||||
*
|
||||
* @since v1.2.0
|
||||
* @version v1.2.0
|
||||
* @author xiao_lfeng
|
||||
*/
|
||||
@Slf4j
|
||||
@Aspect
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
public class CheckUserAbleToUseAspect {
|
||||
|
||||
private final UserDAO userDAO;
|
||||
|
||||
@Around("@annotation(com.jsl.oa.annotations.NeedRoleGroup)")
|
||||
public Object checkUse(ProceedingJoinPoint pjp) throws Throwable {
|
||||
// 从ServletRequest中获取用户信息
|
||||
ServletRequestAttributes servletRequestAttributes =
|
||||
(ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
|
||||
|
||||
if (servletRequestAttributes != null) {
|
||||
// 获取用户
|
||||
Long getUserId = Processing.getAuthHeaderToUserId(servletRequestAttributes.getRequest());
|
||||
if (getUserId == null) {
|
||||
throw new NotLoginException("用户信息不存在");
|
||||
}
|
||||
|
||||
// 获取用户详细信息
|
||||
UserDO getUser = userDAO.getUserById(getUserId);
|
||||
if (getUser != null) {
|
||||
// 用户是否被禁用
|
||||
if (!getUser.getEnabled()) {
|
||||
throw new UserCanntUse("用户未启用");
|
||||
}
|
||||
// 用户是否被封禁
|
||||
if (!getUser.getAccountNoLocked()) {
|
||||
throw new UserCanntUse("用户被封禁");
|
||||
}
|
||||
// 用户是否被删除
|
||||
if (getUser.getIsDelete()) {
|
||||
throw new UserCanntUse("用户被删除");
|
||||
}
|
||||
// 用户是否过期
|
||||
if (!getUser.getAccountNoExpired()) {
|
||||
throw new UserCanntUse("用户已过期");
|
||||
}
|
||||
|
||||
return pjp.proceed();
|
||||
} else {
|
||||
throw new NotLoginException("用户信息不存在");
|
||||
}
|
||||
} else {
|
||||
throw new RuntimeException("无法获取信息");
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,76 @@
|
|||
package com.jsl.oa.aspect;
|
||||
|
||||
import com.jsl.oa.annotations.NeedRoleGroup;
|
||||
import com.jsl.oa.dao.RoleDAO;
|
||||
import com.jsl.oa.exception.library.NotLoginException;
|
||||
import com.jsl.oa.exception.library.PermissionDeniedException;
|
||||
import com.jsl.oa.model.dodata.RoleDO;
|
||||
import com.jsl.oa.utils.Processing;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.aspectj.lang.ProceedingJoinPoint;
|
||||
import org.aspectj.lang.annotation.Around;
|
||||
import org.aspectj.lang.annotation.Aspect;
|
||||
import org.aspectj.lang.reflect.MethodSignature;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.context.request.RequestContextHolder;
|
||||
import org.springframework.web.context.request.ServletRequestAttributes;
|
||||
|
||||
/**
|
||||
* 检查用户权限切面
|
||||
* <hr/>
|
||||
* 检查访问的用户是否包含正确的访问权限,若用户有正确的访问权限则允许访问,若没有指定的权限将会返回错误的权限信息。
|
||||
*
|
||||
* @since v1.2.0
|
||||
* @version v1.2.0
|
||||
* @author xiao_lfeng
|
||||
*/
|
||||
@Slf4j
|
||||
@Aspect
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
public class CheckUserPermissionAspect {
|
||||
|
||||
private final RoleDAO roleDAO;
|
||||
|
||||
/**
|
||||
* 检查权限
|
||||
* <hr/>
|
||||
* 检查注解中填写的权限,只有当接口符合注解中的权限信息,才会实际进入业务,否则将会被拦截
|
||||
*
|
||||
* @param pjp {@link ProceedingJoinPoint}
|
||||
* @return {@link Object}
|
||||
*/
|
||||
@Around("@annotation(com.jsl.oa.annotations.NeedRoleGroup)")
|
||||
public Object checkPermission(ProceedingJoinPoint pjp) throws Throwable {
|
||||
// 从ServletRequest中获取用户信息
|
||||
ServletRequestAttributes servletRequestAttributes =
|
||||
(ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
|
||||
|
||||
if (servletRequestAttributes != null) {
|
||||
// 获取用户
|
||||
Long getUserId = Processing.getAuthHeaderToUserId(servletRequestAttributes.getRequest());
|
||||
if (getUserId == null) {
|
||||
throw new NotLoginException("用户信息不存在");
|
||||
}
|
||||
// 获取方法签名
|
||||
MethodSignature signature = (MethodSignature) pjp.getSignature();
|
||||
NeedRoleGroup checkAccountPermission = signature.getMethod().getAnnotation(NeedRoleGroup.class);
|
||||
String getRoleAtAnnotation = checkAccountPermission.value();
|
||||
|
||||
// 获取用户所在权限组
|
||||
RoleDO getUserRole = roleDAO.getRoleNameByUid(getUserId);
|
||||
if (getUserRole != null) {
|
||||
if (getUserRole.getRoleName().equals(getRoleAtAnnotation)) {
|
||||
return pjp.proceed();
|
||||
} else {
|
||||
throw new PermissionDeniedException("用户组不匹配", getRoleAtAnnotation);
|
||||
}
|
||||
} else {
|
||||
throw new PermissionDeniedException("用户组不匹配", getRoleAtAnnotation);
|
||||
}
|
||||
} else {
|
||||
throw new RuntimeException("无法获取信息");
|
||||
}
|
||||
}
|
||||
}
|
65
src/main/java/com/jsl/oa/config/filter/TimestampFilter.java
Normal file
65
src/main/java/com/jsl/oa/config/filter/TimestampFilter.java
Normal file
|
@ -0,0 +1,65 @@
|
|||
package com.jsl.oa.config.filter;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.jsl.oa.utils.ErrorCode;
|
||||
import com.jsl.oa.utils.ResultUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import javax.servlet.*;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* 时间戳过滤器
|
||||
* <hr/>
|
||||
* 对前端发送的时间戳进行检查,当检查通过后将会进入通过过滤器,若检查不通过将会被当前拦截器拦截并返回 {@link ErrorCode} 内的 TIMESTAMP_ERROR
|
||||
* 信息。另外,该过滤器仅对 OPTION 请求不进行时间戳检查,其他请求都将会检查处理。
|
||||
*
|
||||
* @since v1.2.0
|
||||
* @version v1.2.0
|
||||
* @author xiao_lfeng
|
||||
*/
|
||||
@Slf4j
|
||||
public class TimestampFilter implements Filter {
|
||||
private final Gson gson = new Gson();
|
||||
|
||||
@Override
|
||||
public void doFilter(
|
||||
ServletRequest request,
|
||||
ServletResponse response,
|
||||
FilterChain chain
|
||||
) throws IOException, ServletException {
|
||||
HttpServletRequest req = (HttpServletRequest) request;
|
||||
HttpServletResponse res = (HttpServletResponse) response;
|
||||
|
||||
res.setContentType("application/json;charset=UTF-8");
|
||||
// 获取当前时间戳
|
||||
long nowTimestamp = System.currentTimeMillis();
|
||||
if (!req.getMethod().equals("OPTIONS")) {
|
||||
String getTimestamp = req.getHeader("Timestamp");
|
||||
log.info("[FILTER] 获取到的时间戳为 {} | 当前时间戳 {}", getTimestamp, nowTimestamp);
|
||||
if (getTimestamp == null || getTimestamp.isEmpty()) {
|
||||
res.setStatus(200);
|
||||
res.getWriter().write(gson.toJson(ResultUtil.error(ErrorCode.TIMESTAMP_ERROR)));
|
||||
} else {
|
||||
// 秒与毫秒转换
|
||||
if (getTimestamp.length() == 10) {
|
||||
getTimestamp += "000";
|
||||
}
|
||||
// 时间误差允许前后五秒钟
|
||||
if (nowTimestamp - Long.parseLong(getTimestamp) <= 10000
|
||||
&& nowTimestamp - Long.parseLong(getTimestamp) >= -10000) {
|
||||
chain.doFilter(req, res);
|
||||
} else {
|
||||
res.setStatus(200);
|
||||
res.getWriter().write(gson.toJson(ResultUtil.error(ErrorCode.TIMESTAMP_ERROR)));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
log.info("[FILTER] 预执行请求[OPTION],不进行时间戳检查");
|
||||
res.setStatus(200);
|
||||
res.getWriter().write(gson.toJson(ResultUtil.success("Option成功")));
|
||||
}
|
||||
}
|
||||
}
|
|
@ -2,6 +2,7 @@ package com.jsl.oa.config.shiro;
|
|||
|
||||
import com.jsl.oa.config.filter.CorsFilter;
|
||||
import com.jsl.oa.config.filter.JwtFilter;
|
||||
import com.jsl.oa.config.filter.TimestampFilter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
|
||||
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
|
||||
|
@ -46,8 +47,13 @@ public class ShiroConfiguration {
|
|||
|
||||
// 添加JWT过滤器
|
||||
Map<String, Filter> filters = new LinkedHashMap<>();
|
||||
filters.put("authc", new JwtFilter()); // 配置自定义的JWT过滤器
|
||||
filters.put("anon", new CorsFilter()); // 配置自定义的CORS过滤器
|
||||
// 配置自定义的JWT过滤器
|
||||
filters.put("authc", new JwtFilter());
|
||||
// 配置自定义的CORS过滤器
|
||||
filters.put("anon", new CorsFilter());
|
||||
// 配置自定义的时间戳检查
|
||||
filters.put("time", new TimestampFilter());
|
||||
|
||||
shiroFilterFactoryBean.setFilters(filters);
|
||||
return shiroFilterFactoryBean;
|
||||
}
|
||||
|
@ -86,7 +92,7 @@ public class ShiroConfiguration {
|
|||
@NotNull
|
||||
private static Map<String, String> setFilterChain() {
|
||||
Map<String, String> filterChainDefinitionMap = new LinkedHashMap<>();
|
||||
filterChainDefinitionMap.put("/auth/**/**", "anon");
|
||||
filterChainDefinitionMap.put("/auth/**/**", "anon, time");
|
||||
filterChainDefinitionMap.put("/unauthorized", "anon");
|
||||
filterChainDefinitionMap.put("/", "anon");
|
||||
filterChainDefinitionMap.put("/info/header-image/get", "anon");
|
||||
|
@ -98,7 +104,7 @@ public class ShiroConfiguration {
|
|||
filterChainDefinitionMap.put("/project/work/add", "anon");
|
||||
filterChainDefinitionMap.put("/tags/project/list", "anon");
|
||||
filterChainDefinitionMap.put("/module/add", "anon");
|
||||
filterChainDefinitionMap.put("/**/**", "authc");
|
||||
filterChainDefinitionMap.put("/**/**", "authc, time");
|
||||
|
||||
return filterChainDefinitionMap;
|
||||
}
|
||||
|
|
35
src/main/java/com/jsl/oa/config/startup/PrepareData.java
Normal file
35
src/main/java/com/jsl/oa/config/startup/PrepareData.java
Normal file
|
@ -0,0 +1,35 @@
|
|||
package com.jsl.oa.config.startup;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.dao.DataAccessException;
|
||||
import org.springframework.jdbc.core.JdbcTemplate;
|
||||
|
||||
@Slf4j
|
||||
@RequiredArgsConstructor
|
||||
public class PrepareData {
|
||||
private final JdbcTemplate jdbcTemplate;
|
||||
|
||||
/**
|
||||
* 检查角色
|
||||
* <hr/>
|
||||
* 检查检查指定的角色是否存在,如果不存在则创建
|
||||
*/
|
||||
public void checkRole(String roleName, String displayName) {
|
||||
try {
|
||||
jdbcTemplate.queryForObject(
|
||||
"SELECT id FROM organize_oa.oa_role WHERE role_name = ? LIMIT 1",
|
||||
Long.class,
|
||||
roleName
|
||||
);
|
||||
} catch (DataAccessException e) {
|
||||
// 创建角色
|
||||
log.debug("[Preparation] 创建角色 [{}] {}", roleName, displayName);
|
||||
jdbcTemplate.update(
|
||||
"INSERT INTO organize_oa.oa_role (role_name, display_name) VALUES (?,?)",
|
||||
roleName,
|
||||
displayName
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,228 @@
|
|||
package com.jsl.oa.config.startup;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
import com.jsl.oa.common.constant.SafeConstants;
|
||||
import com.jsl.oa.model.dodata.ConfigDO;
|
||||
import com.jsl.oa.model.vodata.business.InfoAboutSecurityKey;
|
||||
import com.jsl.oa.utils.Processing;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.mindrot.jbcrypt.BCrypt;
|
||||
import org.springframework.boot.CommandLineRunner;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.core.annotation.Order;
|
||||
import org.springframework.dao.DataAccessException;
|
||||
import org.springframework.jdbc.core.JdbcTemplate;
|
||||
|
||||
import java.sql.Timestamp;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
|
||||
/**
|
||||
* 系统启动时进行的一些初始化操作
|
||||
* <hr/>
|
||||
* 1. 检查数据库完整性
|
||||
* 2. 检查系统配置
|
||||
* 3. 检查系统权限
|
||||
* 4. 检查系统数据
|
||||
*
|
||||
* @author xiao_lfeng
|
||||
* @version v1.2.0
|
||||
* @since v1.2.0
|
||||
*/
|
||||
@Slf4j
|
||||
@Configuration
|
||||
@RequiredArgsConstructor
|
||||
public class StartupConfiguration {
|
||||
private final JdbcTemplate jdbcTemplate;
|
||||
private PrepareData prepareData;
|
||||
|
||||
@Bean
|
||||
@Order(1)
|
||||
public CommandLineRunner startUpPreparation() {
|
||||
return args -> {
|
||||
log.info(">===========================================================");
|
||||
log.info("[Preparation] 系统进行准备检查");
|
||||
prepareData = new PrepareData(jdbcTemplate);
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* 对数据库进行完整性检查
|
||||
* <hr/>
|
||||
* 对数据库进行完整性检查,检查数据库是否有数据缺失等信息
|
||||
*/
|
||||
@Bean
|
||||
@Order(2)
|
||||
public CommandLineRunner roleDataPreparation() {
|
||||
return args -> {
|
||||
log.info("[Preparation] 系统进行数据库完整性检查");
|
||||
// 检查角色信息是否完整
|
||||
prepareData.checkRole("console", "超级管理员");
|
||||
prepareData.checkRole("principal", "负责人");
|
||||
prepareData.checkRole("developer", "开发者");
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查默认管理员账户
|
||||
* <hr/>
|
||||
* 为程序进行检查默认管理员程序,检查默认管理员是否存在,若管理员存在且权限正确则检查通过,若检查失败或该用户不存在将会创建一个超级管理员
|
||||
* 账户。
|
||||
*/
|
||||
@Bean
|
||||
@Order(3)
|
||||
public CommandLineRunner defaultConsoleDataPreparation() {
|
||||
return args -> {
|
||||
log.info("[Preparation] 系统进行默认超级管理员信息检查");
|
||||
// 检查默认的信息是否完整
|
||||
Long getDefaultUser;
|
||||
try {
|
||||
getDefaultUser = jdbcTemplate.queryForObject(
|
||||
"SELECT id FROM organize_oa.oa_user WHERE job_id = 'OTH0000001'",
|
||||
Long.class);
|
||||
} catch (DataAccessException e) {
|
||||
log.debug("[Preparation] 超级管理员不存在,创建 console_user 超级管理员账户,密码 jsl_nbxt");
|
||||
jdbcTemplate.update(
|
||||
"INSERT INTO organize_oa.oa_user "
|
||||
+ "(job_id, username, password, address, phone, email, age) "
|
||||
+ "VALUES (?, ?, ?, ?, ?, ?, ?)",
|
||||
"OTH0000001",
|
||||
"console_user",
|
||||
BCrypt.hashpw("jsl_nbxt", BCrypt.gensalt()),
|
||||
"江苏省/无锡市",
|
||||
"18888888888",
|
||||
"console@jsl.com",
|
||||
"18"
|
||||
);
|
||||
getDefaultUser = jdbcTemplate.queryForObject(
|
||||
"SELECT id FROM organize_oa.oa_user WHERE job_id = 'OTH0000001'",
|
||||
Long.class);
|
||||
}
|
||||
// 检查超级管理员权限是否正确
|
||||
Long getConsoleRole = jdbcTemplate
|
||||
.queryForObject("SELECT id FROM organize_oa.oa_role WHERE role_name='console' LIMIT 1", Long.class);
|
||||
assert getConsoleRole != null;
|
||||
Long getConsoleRoleUser;
|
||||
try {
|
||||
getConsoleRoleUser = jdbcTemplate.queryForObject(
|
||||
"SELECT rid FROM organize_oa.oa_role_user WHERE uid=?",
|
||||
Long.class,
|
||||
getDefaultUser
|
||||
);
|
||||
if (!getConsoleRole.equals(getConsoleRoleUser)) {
|
||||
log.debug("[Preparation] 超级管理员账户权限错误,正在恢复权限至 console 角色组");
|
||||
jdbcTemplate.update(
|
||||
"UPDATE organize_oa.oa_role_user SET rid=? WHERE uid=?",
|
||||
getConsoleRole,
|
||||
getDefaultUser
|
||||
);
|
||||
}
|
||||
} catch (DataAccessException e) {
|
||||
log.debug("[Preparation] 为超级管理员账户添加 console 角色组权限");
|
||||
// 插入超级管理员权限
|
||||
jdbcTemplate.update(
|
||||
"INSERT INTO organize_oa.oa_role_user (uid, rid) VALUES (?,?)",
|
||||
getDefaultUser,
|
||||
getConsoleRole
|
||||
);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Bean
|
||||
@Order(4)
|
||||
public CommandLineRunner prepareDefaultConfigData(Gson gson) {
|
||||
return args -> {
|
||||
// 检查加密密钥是否存在
|
||||
try {
|
||||
jdbcTemplate
|
||||
.queryForObject("SELECT id FROM organize_oa.oa_config WHERE value='security_key'", Long.class);
|
||||
} catch (DataAccessException e) {
|
||||
HashMap<String, String> insertData = new HashMap<>();
|
||||
insertData.put("key", Processing.generateKey(1233061823L));
|
||||
insertData.put("updateTime", String.valueOf(new Date().getTime()));
|
||||
jdbcTemplate.update(
|
||||
"INSERT INTO organize_oa.oa_config (value, data) VALUES (?,?)",
|
||||
"security_key",
|
||||
gson.toJson(insertData)
|
||||
);
|
||||
}
|
||||
// 检查 carousel
|
||||
try {
|
||||
jdbcTemplate.queryForObject("SELECT id FROM organize_oa.oa_config WHERE value='carousel'", Long.class);
|
||||
} catch (DataAccessException e) {
|
||||
jdbcTemplate.update(
|
||||
"INSERT INTO organize_oa.oa_config (value, data) VALUES (?,?)",
|
||||
"carousel",
|
||||
gson.toJson("")
|
||||
);
|
||||
}
|
||||
// 检查 project_show
|
||||
try {
|
||||
jdbcTemplate
|
||||
.queryForObject("SELECT id FROM organize_oa.oa_config WHERE value='project_show'", Long.class);
|
||||
} catch (DataAccessException e) {
|
||||
jdbcTemplate.update(
|
||||
"INSERT INTO organize_oa.oa_config (value, data) VALUES (?,?)",
|
||||
"project_show",
|
||||
gson.toJson("")
|
||||
);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* 准备安全密钥
|
||||
* <hr/>
|
||||
* 准备安全密钥,用于加密解密等操作
|
||||
*/
|
||||
@Bean
|
||||
@Order(5)
|
||||
public CommandLineRunner prepareKey() {
|
||||
return args -> {
|
||||
log.info("[Preparation] 系统进行安全密钥准备");
|
||||
Gson gson = new Gson();
|
||||
// 获取数据库中的安全密钥
|
||||
String getSecurityKey = jdbcTemplate.queryForObject(
|
||||
"SELECT data FROM organize_oa.oa_config WHERE value = 'security_key' LIMIT 1",
|
||||
String.class);
|
||||
if (getSecurityKey != null) {
|
||||
HashMap<String, String> getData = gson.fromJson(
|
||||
getSecurityKey,
|
||||
new TypeToken<HashMap<String, String>>() {
|
||||
}.getType());
|
||||
SafeConstants.setSecretKey(getData.get("key"));
|
||||
} else {
|
||||
// 生成密钥
|
||||
String key = Processing.generateKey(System.currentTimeMillis());
|
||||
InfoAboutSecurityKey infoAboutSecurityKey = new InfoAboutSecurityKey();
|
||||
infoAboutSecurityKey.setKey(key)
|
||||
.setUpdateTime(System.currentTimeMillis());
|
||||
String json = gson.toJson(infoAboutSecurityKey, InfoAboutSecurityKey.class);
|
||||
// 更新密钥
|
||||
ConfigDO configDO = new ConfigDO();
|
||||
configDO.setValue("security_key")
|
||||
.setData(json)
|
||||
.setCreatedAt(new Timestamp(System.currentTimeMillis()));
|
||||
// 初始化密钥
|
||||
jdbcTemplate.update("INSERT INTO organize_oa.oa_config (value, data) VALUES (?, ?)",
|
||||
configDO.getValue(),
|
||||
configDO.getData()
|
||||
);
|
||||
SafeConstants.setSecretKey(key);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Bean
|
||||
@Order(100)
|
||||
public CommandLineRunner preparationCompleted() {
|
||||
return args -> {
|
||||
log.info("[Preparation] 系统准备检查完毕");
|
||||
log.info("===========================================================>");
|
||||
};
|
||||
}
|
||||
}
|
|
@ -55,7 +55,6 @@ public class AuthController {
|
|||
@RequestBody @Validated UserRegisterVO userRegisterVO,
|
||||
@NotNull BindingResult bindingResult
|
||||
) {
|
||||
log.info("请求接口[POST]: /auth/register");
|
||||
// 判断是否有参数错误
|
||||
if (bindingResult.hasErrors()) {
|
||||
return ResultUtil.error(ErrorCode.REQUEST_BODY_ERROR, Processing.getValidatedErrorList(bindingResult));
|
||||
|
@ -79,8 +78,6 @@ public class AuthController {
|
|||
@RequestBody @Validated UserLoginVO userLoginVO,
|
||||
@NotNull BindingResult bindingResult
|
||||
) {
|
||||
log.info("请求接口[POST]: /auth/login");
|
||||
|
||||
// 判断是否有参数错误
|
||||
if (bindingResult.hasErrors()) {
|
||||
return ResultUtil.error(ErrorCode.REQUEST_BODY_ERROR, Processing.getValidatedErrorList(bindingResult));
|
||||
|
@ -100,7 +97,6 @@ public class AuthController {
|
|||
*/
|
||||
@GetMapping("/auth/email/code")
|
||||
public BaseResponse authSendEmailCode(@RequestParam String email) {
|
||||
log.info("请求接口[GET]: /auth/email/code");
|
||||
if (email != null) {
|
||||
if (Pattern.matches("^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$", email)) {
|
||||
return authService.authLoginSendEmailCode(email);
|
||||
|
@ -125,7 +121,6 @@ public class AuthController {
|
|||
*/
|
||||
@GetMapping("/auth/login/email")
|
||||
public BaseResponse authLoginByEmail(@RequestParam String email, @RequestParam String code) {
|
||||
log.info("请求接口[GET]: /auth/login/email");
|
||||
if (email != null && code != null && !email.isEmpty() && !code.isEmpty()) {
|
||||
if (Pattern.matches("^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$", email)) {
|
||||
try {
|
||||
|
@ -152,7 +147,6 @@ public class AuthController {
|
|||
*/
|
||||
@GetMapping("/auth/logout")
|
||||
public BaseResponse authLogout(HttpServletRequest request) {
|
||||
log.info("请求接口[GET]: /auth/logout");
|
||||
return authService.authLogout(request);
|
||||
}
|
||||
|
||||
|
@ -173,13 +167,11 @@ public class AuthController {
|
|||
@NotNull BindingResult bindingResult,
|
||||
HttpServletRequest request
|
||||
) {
|
||||
log.info("请求接口[PUT]: /auth/password");
|
||||
// 判断是否有参数错误
|
||||
if (bindingResult.hasErrors()) {
|
||||
return ResultUtil.error(ErrorCode.REQUEST_BODY_ERROR, Processing.getValidatedErrorList(bindingResult));
|
||||
}
|
||||
return authService.
|
||||
authChangePassword((UserChangePasswordVO) request, (HttpServletRequest) userChangePasswordVO);
|
||||
return authService.authChangePassword(userChangePasswordVO, request);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -192,7 +184,6 @@ public class AuthController {
|
|||
@RequestBody @Validated UserForgetPasswordVO userForgetPasswordVO,
|
||||
@NotNull BindingResult bindingResult
|
||||
) {
|
||||
log.info("请求接口[PUT]: /auth/password/forget");
|
||||
// 判断是否有参数错误
|
||||
if (bindingResult.hasErrors()) {
|
||||
return ResultUtil.error(ErrorCode.REQUEST_BODY_ERROR, Processing.getValidatedErrorList(bindingResult));
|
||||
|
|
|
@ -35,7 +35,6 @@ public class IndexController {
|
|||
*/
|
||||
@RequestMapping("/")
|
||||
public BaseResponse index() {
|
||||
log.info("请求接口[GET]: /");
|
||||
HashMap<String, String> newMap = new HashMap<>();
|
||||
newMap.put("timestamp", "构建时间:" + timestamp);
|
||||
return ResultUtil.success("欢迎使用JSL-OA系统,服务器处于正常状态", newMap);
|
||||
|
|
|
@ -42,7 +42,6 @@ public class InfoController {
|
|||
*/
|
||||
@GetMapping("/info/header-image/get")
|
||||
public BaseResponse infoGetHeaderImage(@RequestParam(required = false) Integer id) {
|
||||
log.info("请求接口[GET]: /info/header-image/get");
|
||||
return infoService.getHeaderImage(id);
|
||||
}
|
||||
|
||||
|
@ -60,7 +59,6 @@ public class InfoController {
|
|||
HttpServletRequest request,
|
||||
@NotNull BindingResult bindingResult
|
||||
) {
|
||||
log.info("请求接口[PUT]: /info/header-image/edit");
|
||||
// 参数校验
|
||||
if (bindingResult.hasErrors()) {
|
||||
log.warn("参数校验失败: {}", Processing.getValidatedErrorList(bindingResult));
|
||||
|
@ -82,7 +80,6 @@ public class InfoController {
|
|||
*/
|
||||
@DeleteMapping("/info/header-image/del")
|
||||
public BaseResponse infoDelHeaderImage(@RequestParam Integer id, HttpServletRequest request) {
|
||||
log.info("请求接口[DELETE]: /info/header-image/del");
|
||||
return infoService.delHeaderImage(request, id);
|
||||
}
|
||||
|
||||
|
@ -100,7 +97,6 @@ public class InfoController {
|
|||
HttpServletRequest request,
|
||||
@NotNull BindingResult bindingResult
|
||||
) {
|
||||
log.info("请求接口[POST]: /info/header-image/add");
|
||||
// 参数校验
|
||||
if (bindingResult.hasErrors()) {
|
||||
log.warn("参数校验失败: {}", Processing.getValidatedErrorList(bindingResult));
|
||||
|
@ -118,7 +114,6 @@ public class InfoController {
|
|||
*/
|
||||
@PutMapping("/info/header-image/edit-setting")
|
||||
public BaseResponse infoEditSettingHeaderImage(@RequestParam Boolean showType, HttpServletRequest request) {
|
||||
log.info("请求接口[PUT]: /info/header-image/edit-setting");
|
||||
return infoService.editSettingHeaderImage(request, showType);
|
||||
}
|
||||
|
||||
|
@ -136,7 +131,6 @@ public class InfoController {
|
|||
@RequestParam String orderBy,
|
||||
HttpServletRequest request
|
||||
) {
|
||||
log.info("请求接口[GET]: /info/header-user/get");
|
||||
return infoService.getHeaderUser(request, order, orderBy);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -65,7 +65,6 @@ public class MessageController {
|
|||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime begin,
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime end,
|
||||
HttpServletRequest request) {
|
||||
log.info("请求接口[GET]:/message/get");
|
||||
String token = request.getHeader("Authorization").replace("Bearer ", "");
|
||||
Long uid = JwtUtil.getUserId(token);
|
||||
if (uid == null) {
|
||||
|
@ -79,7 +78,6 @@ public class MessageController {
|
|||
public BaseResponse messageGetById(
|
||||
@RequestParam Long id,
|
||||
HttpServletRequest request) {
|
||||
log.info("请求接口[GET]:/message/get/id");
|
||||
String token = request.getHeader("Authorization").replace("Bearer ", "");
|
||||
Long uid = JwtUtil.getUserId(token);
|
||||
if (uid == null) {
|
||||
|
|
|
@ -33,8 +33,6 @@ public class ModuleController {
|
|||
*/
|
||||
@GetMapping("/module/get")
|
||||
public BaseResponse moduleGetByProjectId(@RequestParam Integer projectId, HttpServletRequest request) {
|
||||
|
||||
log.info("[Controller] 执行 moduleGetByProjectId 接口");
|
||||
return moduleService.getByProjectId(projectId, request);
|
||||
}
|
||||
|
||||
|
@ -47,8 +45,6 @@ public class ModuleController {
|
|||
*/
|
||||
@GetMapping("/module/get/min")
|
||||
public BaseResponse moduleGetBySysId(@RequestParam Integer sysId, HttpServletRequest request) {
|
||||
|
||||
log.info("[Controller] 执行 moduleGetBySysId 接口");
|
||||
return moduleService.getBySysId(sysId, request);
|
||||
}
|
||||
|
||||
|
@ -61,7 +57,6 @@ public class ModuleController {
|
|||
*/
|
||||
@DeleteMapping("/module/delete/{id}")
|
||||
public BaseResponse moduleDeleteById(@PathVariable("id") Long id, HttpServletRequest request) {
|
||||
log.info("[Controller] 执行 moduleDeleteById 接口");
|
||||
return moduleService.deleteById(request, id);
|
||||
}
|
||||
|
||||
|
|
|
@ -52,7 +52,6 @@ public class NewsController {
|
|||
BindingResult bindingResult,
|
||||
HttpServletRequest request
|
||||
) {
|
||||
log.info("请求接口[POST]: /news/add");
|
||||
// 判断是否有参数错误
|
||||
if (bindingResult.hasErrors()) {
|
||||
return ResultUtil.error(ErrorCode.REQUEST_BODY_ERROR, Processing.getValidatedErrorList(bindingResult));
|
||||
|
|
|
@ -40,7 +40,6 @@ public class PermissionController {
|
|||
*/
|
||||
@PostMapping("/permission/add")
|
||||
public BaseResponse permissionAdd(HttpServletRequest request, @RequestParam Long rid, @RequestParam Long pid) {
|
||||
log.info("请求接口[POST]: /permission/add");
|
||||
// 判断是否有参数错误
|
||||
if (rid == null || pid == null) {
|
||||
return ResultUtil.error(ErrorCode.PARAMETER_ERROR);
|
||||
|
@ -58,7 +57,6 @@ public class PermissionController {
|
|||
*/
|
||||
@GetMapping("/permission/current")
|
||||
public BaseResponse permissionUser(HttpServletRequest request, @RequestParam Long uid) {
|
||||
log.info("请求接口[GET]: /permission/current");
|
||||
// 判断是否有参数错误
|
||||
if (uid == null) {
|
||||
return ResultUtil.error(ErrorCode.PARAMETER_ERROR);
|
||||
|
@ -75,7 +73,6 @@ public class PermissionController {
|
|||
*/
|
||||
@GetMapping("/permission/get")
|
||||
public BaseResponse permissionGet(HttpServletRequest request) {
|
||||
log.info("请求接口[GET]: /permission/get");
|
||||
return permissionService.permissionGet(request);
|
||||
}
|
||||
|
||||
|
@ -93,7 +90,6 @@ public class PermissionController {
|
|||
BindingResult bindingResult,
|
||||
HttpServletRequest request
|
||||
) {
|
||||
log.info("请求接口[PUT]: /permission/edit");
|
||||
// 判断是否有参数错误
|
||||
if (bindingResult.hasErrors()) {
|
||||
return ResultUtil.error(ErrorCode.REQUEST_BODY_ERROR, Processing.getValidatedErrorList(bindingResult));
|
||||
|
@ -110,7 +106,6 @@ public class PermissionController {
|
|||
*/
|
||||
@DeleteMapping("/permission/delete")
|
||||
public BaseResponse permissionDelete(@RequestParam Long pid, HttpServletRequest request) {
|
||||
log.info("请求接口[Delete]: /permission/delete");
|
||||
// 判断是否有参数错误
|
||||
if (pid == null) {
|
||||
return ResultUtil.error(ErrorCode.PARAMETER_ERROR);
|
||||
|
|
|
@ -46,12 +46,10 @@ public class ProjectController {
|
|||
*/
|
||||
@GetMapping("/project/header/get")
|
||||
public BaseResponse projectGetHeader(@RequestParam(required = false) final Integer id) {
|
||||
log.info("请求接口[GET]: /project/header/get");
|
||||
return projectService.getHeader(id);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @param id 要查询的 id
|
||||
* @return {@link BaseResponse}
|
||||
|
@ -77,28 +75,33 @@ public class ProjectController {
|
|||
*/
|
||||
@GetMapping("/project/get/custom")
|
||||
public BaseResponse projectGetCustom(
|
||||
@RequestParam(required = false) List<String> tags,
|
||||
@RequestParam(required = false) List<String> isFinish,
|
||||
@RequestParam(required = false, defaultValue = "1") Integer page,
|
||||
@RequestParam(required = false, defaultValue = "10") Integer pageSize) {
|
||||
log.info("请求接口[GET]: /project/get/custom");
|
||||
@RequestParam(required = false) List<String> tags,
|
||||
@RequestParam(required = false) List<String> isFinish,
|
||||
@RequestParam(required = false, defaultValue = "1") Integer page,
|
||||
@RequestParam(required = false, defaultValue = "10") Integer pageSize
|
||||
) {
|
||||
return projectService.tGet(tags, isFinish, page, pageSize);
|
||||
}
|
||||
|
||||
/**
|
||||
* 我负责的界面的获取项目
|
||||
* 根据项目 id 获取项目详细信息
|
||||
* <hr/>
|
||||
* 根据项目 id 获取项目的详细信息,在地址后面有 projectId 的 path 部分需要补充完整(不可缺少)
|
||||
*
|
||||
* @param projectId 项目 id
|
||||
* @param request 请求
|
||||
* @return {@link BaseResponse}
|
||||
*/
|
||||
@GetMapping("/project/get")
|
||||
public BaseResponse projectGet(
|
||||
@RequestParam(required = false) List<String> tags,
|
||||
@RequestParam(required = false) List<String> isFinish,
|
||||
@RequestParam(required = false, defaultValue = "1") Integer page,
|
||||
@RequestParam(required = false, defaultValue = "10") Integer pageSize,
|
||||
HttpServletRequest request) {
|
||||
log.info("请求接口[GET]: /project/get");
|
||||
return projectService.get(request, tags, isFinish, page, pageSize);
|
||||
@GetMapping("/project/get/{projectId}")
|
||||
public BaseResponse getProjectById(
|
||||
@PathVariable String projectId,
|
||||
HttpServletRequest request
|
||||
) {
|
||||
// 对 projectId 进行判断
|
||||
if (!projectId.matches("^[0-9]+$")) {
|
||||
return ResultUtil.error("参数 projectId 不是一个数字", ErrorCode.PARAMETER_ERROR);
|
||||
}
|
||||
return projectService.getProjectById(request, Long.parseLong(projectId));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -108,13 +111,13 @@ public class ProjectController {
|
|||
*/
|
||||
@GetMapping("/project/child/get")
|
||||
public BaseResponse projectWorkGet(
|
||||
@RequestParam(required = false) List<String> tags,
|
||||
@RequestParam(required = false) List<String> isFinish,
|
||||
@RequestParam(required = false) Integer is,
|
||||
@RequestParam(required = false, defaultValue = "1") Integer page,
|
||||
@RequestParam(required = false, defaultValue = "10") Integer pageSize,
|
||||
HttpServletRequest request) {
|
||||
log.info("请求接口[GET]: /project/work/get");
|
||||
@RequestParam(required = false) List<String> tags,
|
||||
@RequestParam(required = false) List<String> isFinish,
|
||||
@RequestParam(required = false) Integer is,
|
||||
@RequestParam(required = false, defaultValue = "1") Integer page,
|
||||
@RequestParam(required = false, defaultValue = "10") Integer pageSize,
|
||||
HttpServletRequest request
|
||||
) {
|
||||
return projectService.workGet(request, tags, isFinish, is, page, pageSize);
|
||||
}
|
||||
|
||||
|
@ -127,7 +130,6 @@ public class ProjectController {
|
|||
*/
|
||||
@GetMapping("/project/header")
|
||||
public BaseResponse projectGetByName(@RequestParam String name) {
|
||||
log.info("请求接口[GET]: /project/header");
|
||||
return projectService.getByName(name);
|
||||
}
|
||||
|
||||
|
@ -141,10 +143,11 @@ public class ProjectController {
|
|||
* @return {@link BaseResponse}
|
||||
*/
|
||||
@PostMapping("/project/header/add")
|
||||
public BaseResponse projectAddHeader(@RequestBody @Validated ProjectShowVO projectShowVO,
|
||||
HttpServletRequest request,
|
||||
@NotNull BindingResult bindingResult) {
|
||||
log.info("请求接口[POST]: /project/header/add");
|
||||
public BaseResponse projectAddHeader(
|
||||
@RequestBody @Validated ProjectShowVO projectShowVO,
|
||||
HttpServletRequest request,
|
||||
@NotNull BindingResult bindingResult
|
||||
) {
|
||||
// 判断是否有参数错误
|
||||
if (bindingResult.hasErrors()) {
|
||||
return ResultUtil.error(ErrorCode.PARAMETER_ERROR, Processing.getValidatedErrorList(bindingResult));
|
||||
|
@ -163,11 +166,12 @@ public class ProjectController {
|
|||
* @return {@link BaseResponse}
|
||||
*/
|
||||
@PutMapping("/project/header/edit/{projectId}")
|
||||
public BaseResponse projectEditById(@RequestParam Long projectId,
|
||||
@RequestBody @Validated ProjectEditVO projectEdit,
|
||||
@NotNull BindingResult bindingResult,
|
||||
HttpServletRequest request) {
|
||||
log.info("请求接口[PUT]: /project/header/edit/{projectId}");
|
||||
public BaseResponse projectEditById(
|
||||
@PathVariable Long projectId,
|
||||
@RequestBody @Validated ProjectEditVO projectEdit,
|
||||
@NotNull BindingResult bindingResult,
|
||||
HttpServletRequest request
|
||||
) {
|
||||
// 判断是否有参数错误
|
||||
if (bindingResult.hasErrors()) {
|
||||
return ResultUtil.error(ErrorCode.PARAMETER_ERROR, Processing.getValidatedErrorList(bindingResult));
|
||||
|
@ -183,10 +187,11 @@ public class ProjectController {
|
|||
* @return {@link BaseResponse}
|
||||
*/
|
||||
@PostMapping("/project/work/add")
|
||||
public BaseResponse projectWorkAdd(HttpServletRequest request,
|
||||
@RequestBody @Validated ProjectWorkVO projectWorkVO,
|
||||
@NotNull BindingResult bindingResult) {
|
||||
log.info("请求接口[POST]: /project/work/add");
|
||||
public BaseResponse projectWorkAdd(
|
||||
HttpServletRequest request,
|
||||
@RequestBody @Validated ProjectWorkVO projectWorkVO,
|
||||
@NotNull BindingResult bindingResult
|
||||
) {
|
||||
// 判断是否有参数错误
|
||||
if (bindingResult.hasErrors()) {
|
||||
return ResultUtil.error(ErrorCode.PARAMETER_ERROR, Processing.getValidatedErrorList(bindingResult));
|
||||
|
@ -205,10 +210,11 @@ public class ProjectController {
|
|||
*/
|
||||
|
||||
@PostMapping("/project/add")
|
||||
public BaseResponse projectAdd(HttpServletRequest request,
|
||||
@RequestBody @Validated ProjectInfoVO projectInfoVO,
|
||||
@NotNull BindingResult bindingResult) {
|
||||
log.info("请求接口[POST]: /project/add");
|
||||
public BaseResponse projectAdd(
|
||||
@RequestBody @Validated ProjectInfoVO projectInfoVO,
|
||||
@NotNull BindingResult bindingResult,
|
||||
HttpServletRequest request
|
||||
) {
|
||||
// 判断是否有参数错误
|
||||
if (bindingResult.hasErrors()) {
|
||||
return ResultUtil.error(ErrorCode.PARAMETER_ERROR, Processing.getValidatedErrorList(bindingResult));
|
||||
|
@ -234,7 +240,6 @@ public class ProjectController {
|
|||
*/
|
||||
@DeleteMapping("/project/delete")
|
||||
public BaseResponse projectDelete(HttpServletRequest request, @RequestParam List<Long> id) {
|
||||
log.info("请求接口[Delete]: /project/delete");
|
||||
if (id == null) {
|
||||
return ResultUtil.error(ErrorCode.PARAMETER_ERROR);
|
||||
}
|
||||
|
@ -243,7 +248,6 @@ public class ProjectController {
|
|||
|
||||
@GetMapping("/project/file")
|
||||
public BaseResponse getProjectFile(HttpServletRequest request, @RequestParam Long projectId) {
|
||||
log.info("请求接口[Get]: /project/file");
|
||||
//判断是否有参数错误
|
||||
if (projectId == null) {
|
||||
return ResultUtil.error(ErrorCode.REQUEST_BODY_ERROR);
|
||||
|
|
|
@ -43,7 +43,6 @@ public class RoleController {
|
|||
*/
|
||||
@GetMapping("/role/get")
|
||||
public BaseResponse roleGet(HttpServletRequest request, @RequestParam(required = false) String id) {
|
||||
log.info("请求接口[GET]: /role/get");
|
||||
return roleService.roleGet(request, id);
|
||||
}
|
||||
|
||||
|
@ -63,7 +62,6 @@ public class RoleController {
|
|||
@NotNull BindingResult bindingResult,
|
||||
HttpServletRequest request
|
||||
) {
|
||||
log.info("请求接口[PUT]: /role/edit");
|
||||
// 判断是否有参数错误
|
||||
if (bindingResult.hasErrors()) {
|
||||
return ResultUtil.error(ErrorCode.REQUEST_BODY_ERROR, Processing.getValidatedErrorList(bindingResult));
|
||||
|
@ -82,7 +80,6 @@ public class RoleController {
|
|||
*/
|
||||
@DeleteMapping("/role/delete")
|
||||
public BaseResponse roleDelete(HttpServletRequest request, @RequestParam Long id) {
|
||||
log.info("请求接口[DELETE]: /role/delete");
|
||||
// 判断是否有参数错误
|
||||
if (id == null) {
|
||||
return ResultUtil.error(ErrorCode.PARAMETER_ERROR);
|
||||
|
@ -97,7 +94,6 @@ public class RoleController {
|
|||
*/
|
||||
@PostMapping("role/user/add")
|
||||
public BaseResponse roleAddUser(HttpServletRequest request, @RequestParam Long uid, @RequestParam Long rid) {
|
||||
log.info("请求接口[POST]: /role/user/add");
|
||||
// 判断是否有参数错误
|
||||
if (uid == null || rid == null) {
|
||||
return ResultUtil.error(ErrorCode.PARAMETER_ERROR);
|
||||
|
@ -112,7 +108,6 @@ public class RoleController {
|
|||
*/
|
||||
@DeleteMapping("role/user/remove")
|
||||
public BaseResponse roleRemoveUser(HttpServletRequest request, @RequestParam Long uid) {
|
||||
log.info("请求接口[POST]: /role/user/remove");
|
||||
// 判断是否有参数错误
|
||||
if (uid == null) {
|
||||
return ResultUtil.error(ErrorCode.PARAMETER_ERROR);
|
||||
|
@ -131,7 +126,6 @@ public class RoleController {
|
|||
@NotNull BindingResult bindingResult,
|
||||
HttpServletRequest request
|
||||
) throws ClassCopyException {
|
||||
log.info("请求接口[POST]: /role/add");
|
||||
// 判断是否有参数错误
|
||||
if (bindingResult.hasErrors()) {
|
||||
return ResultUtil.error(ErrorCode.REQUEST_BODY_ERROR, Processing.getValidatedErrorList(bindingResult));
|
||||
|
@ -146,7 +140,6 @@ public class RoleController {
|
|||
*/
|
||||
@PutMapping("role/user/change")
|
||||
public BaseResponse roleChangeUser(HttpServletRequest request, @RequestParam Long uid, @RequestParam Long rid) {
|
||||
log.info("请求接口[POST]: /role/user/change");
|
||||
// 判断是否有参数错误
|
||||
if (uid == null || rid == null) {
|
||||
return ResultUtil.error(ErrorCode.PARAMETER_ERROR);
|
||||
|
|
|
@ -33,7 +33,6 @@ public class TagController {
|
|||
@RequestParam(required = false) String limit,
|
||||
@RequestParam(required = false) String order
|
||||
) {
|
||||
log.info("[Controller] 请求 getProjectList 接口");
|
||||
// 处理默认数据
|
||||
if (page == null || !Pattern.matches("^[0-9]+$", page) || Integer.parseInt(page) < 1) {
|
||||
page = "1";
|
||||
|
|
|
@ -44,7 +44,6 @@ public class UserController {
|
|||
*/
|
||||
@DeleteMapping("/user/delete")
|
||||
public BaseResponse userDelete(HttpServletRequest request, @RequestParam String id) {
|
||||
log.info("请求接口[PUT]: /user/delete");
|
||||
// 判断是否有参数错误
|
||||
if (id == null) {
|
||||
return ResultUtil.error(ErrorCode.PARAMETER_ERROR);
|
||||
|
@ -61,7 +60,6 @@ public class UserController {
|
|||
*/
|
||||
@PutMapping("/user/lock")
|
||||
public BaseResponse userLock(HttpServletRequest request, @RequestParam Long id, @RequestParam Long isLock) {
|
||||
log.info("请求接口[PUT]: /user/lock");
|
||||
// 判断是否有参数错误
|
||||
if (id == null) {
|
||||
return ResultUtil.error(ErrorCode.PARAMETER_ERROR);
|
||||
|
@ -81,7 +79,6 @@ public class UserController {
|
|||
@RequestBody @Validated UserEditProfileVO userEditProfileVO,
|
||||
BindingResult bindingResult
|
||||
) {
|
||||
log.info("请求接口[PUT]: /user/profile/edit");
|
||||
// 判断是否有参数错误
|
||||
if (bindingResult.hasErrors()) {
|
||||
return ResultUtil.error(ErrorCode.REQUEST_BODY_ERROR, Processing.getValidatedErrorList(bindingResult));
|
||||
|
@ -110,7 +107,6 @@ public class UserController {
|
|||
@RequestParam @Nullable String phone,
|
||||
@NotNull HttpServletRequest request
|
||||
) {
|
||||
log.info("请求接口[GET]: /user/current");
|
||||
// 检查数据是否有问题
|
||||
if (id != null && !id.isEmpty()) {
|
||||
if (!Pattern.matches("^[0-9]+$", id)) {
|
||||
|
@ -153,7 +149,6 @@ public class UserController {
|
|||
@NotNull BindingResult bindingResult,
|
||||
HttpServletRequest request
|
||||
) {
|
||||
log.info("请求接口[POST]: /user/current/all");
|
||||
// 判断是否有参数错误
|
||||
if (bindingResult.hasErrors()) {
|
||||
return ResultUtil.error(ErrorCode.REQUEST_BODY_ERROR, Processing.getValidatedErrorList(bindingResult));
|
||||
|
@ -174,7 +169,6 @@ public class UserController {
|
|||
BindingResult bindingResult,
|
||||
HttpServletRequest request
|
||||
) {
|
||||
log.info("请求接口[POST]: /user/add");
|
||||
// 判断是否有参数错误
|
||||
if (bindingResult.hasErrors()) {
|
||||
return ResultUtil.error(ErrorCode.REQUEST_BODY_ERROR, Processing.getValidatedErrorList(bindingResult));
|
||||
|
@ -194,7 +188,6 @@ public class UserController {
|
|||
BindingResult bindingResult,
|
||||
HttpServletRequest request
|
||||
) {
|
||||
log.info("请求接口[PUT]: /user/edit");
|
||||
// 判断是否有参数错误
|
||||
if (bindingResult.hasErrors()) {
|
||||
return ResultUtil.error(ErrorCode.REQUEST_BODY_ERROR, Processing.getValidatedErrorList(bindingResult));
|
||||
|
@ -205,7 +198,6 @@ public class UserController {
|
|||
|
||||
@GetMapping("/user/profile/get")
|
||||
public BaseResponse userProfileGet(HttpServletRequest request) {
|
||||
log.info("请求接口[GET]: /user/profile/get");
|
||||
return userService.userProfileGet(request);
|
||||
}
|
||||
|
||||
|
|
|
@ -35,8 +35,6 @@ public class InfoDAO {
|
|||
* @return {@link CarouselDO}
|
||||
*/
|
||||
public CarouselDO getCarousel() {
|
||||
log.info("\t> 执行 DAO 层 InfoDAO.getCarousel 方法");
|
||||
log.info("\t\t> 从 MySQL 获取数据");
|
||||
String getCarouselSql = infoMapper.getCarousel();
|
||||
CarouselDO getCarousel = null;
|
||||
if (getCarouselSql != null && !"{}".equals(getCarouselSql)) {
|
||||
|
@ -87,14 +85,12 @@ public class InfoDAO {
|
|||
* @return {@link Boolean}
|
||||
*/
|
||||
public boolean setCarousel(CarouselDO carouselDO) {
|
||||
log.info("\t> 执行 DAO 层 InfoDAO.setCarousel 方法");
|
||||
sortCarousel(carouselDO);
|
||||
// 添加id
|
||||
for (int i = 0; i < carouselDO.getData().size(); i++) {
|
||||
carouselDO.getData().get(i).setId(i + 1);
|
||||
}
|
||||
String setCarouselSql = gson.toJson(carouselDO);
|
||||
log.info("\t\t> 从 MySQL 获取数据");
|
||||
return infoMapper.setCarousel(setCarouselSql);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,8 +15,6 @@ public class NewsDAO {
|
|||
private final NewsMapper newsMapper;
|
||||
|
||||
public void addNews(NewsDO newsVO, Long uid) {
|
||||
log.info("\t> 执行 DAO 层 NewsDAO.addNews 方法");
|
||||
log.info("\t\t> 从 MySQL 获取数据");
|
||||
// 添加新闻数据
|
||||
newsMapper.addNews(newsVO);
|
||||
// 添加作者
|
||||
|
|
|
@ -40,29 +40,24 @@ public class PermissionDAO {
|
|||
* @return {@link List<String>}
|
||||
*/
|
||||
public List<String> getPermission(@NotNull Long uid) {
|
||||
log.info("\t> 执行 DAO 层 PermissionDAO.getPermission 方法");
|
||||
List<String> getPermissionForString;
|
||||
String permissionRedisString = roleRedisUtil.getData(BusinessConstants.NONE, uid.toString());
|
||||
if (permissionRedisString == null) {
|
||||
log.info("\t\t> 从 MySQL 获取数据");
|
||||
List<PermissionDO> permissionList = permissionMapper.permissionUserPid(uid);
|
||||
getPermissionForString = new ArrayList<>();
|
||||
forPermissionToBuildString(permissionList, getPermissionForString);
|
||||
// 存入 Redis
|
||||
roleRedisUtil.setData(BusinessConstants.NONE, uid.toString(), gson.toJson(getPermissionForString), 1440);
|
||||
} else {
|
||||
log.info("\t\t> 从 Redis 获取数据");
|
||||
getPermissionForString = gson.fromJson(permissionRedisString, new TypeToken<List<String>>() { }.getType());
|
||||
}
|
||||
return getPermissionForString;
|
||||
}
|
||||
|
||||
public List<String> getAllPermissionBuildString() {
|
||||
log.info("\t> 执行 DAO 层 PermissionDAO.getPermission 方法");
|
||||
List<String> getPermissionForString;
|
||||
String getRedisData = roleRedisUtil.getData(BusinessConstants.ALL_PERMISSION, "string");
|
||||
if (getRedisData == null) {
|
||||
log.info("\t\t> 从 MySQL 获取数据");
|
||||
List<PermissionDO> permissionList = permissionMapper.getAllPermission();
|
||||
permissionList.removeIf(it -> it.getPid() != null);
|
||||
getPermissionForString = new ArrayList<>();
|
||||
|
@ -74,17 +69,14 @@ public class PermissionDAO {
|
|||
gson.toJson(getPermissionForString),
|
||||
1440);
|
||||
} else {
|
||||
log.info("\t\t> 从 Redis 获取数据");
|
||||
getPermissionForString = gson.fromJson(getRedisData, new TypeToken<List<String>>() { }.getType());
|
||||
}
|
||||
return getPermissionForString;
|
||||
}
|
||||
|
||||
public List<PermissionDO> getRootPermission() {
|
||||
log.info("\t> 执行 DAO 层 PermissionDAO.getRootPermission 方法");
|
||||
String getRedisData = roleRedisUtil.getData(BusinessConstants.ALL_PERMISSION, "all");
|
||||
if (getRedisData == null) {
|
||||
log.info("\t\t> 从 MySQL 获取数据");
|
||||
List<PermissionDO> permissionList = permissionMapper.getAllPermission();
|
||||
if (!permissionList.isEmpty()) {
|
||||
List<PermissionDO> getPermissionList = new ArrayList<>();
|
||||
|
@ -99,7 +91,6 @@ public class PermissionDAO {
|
|||
return null;
|
||||
}
|
||||
} else {
|
||||
log.info("\t\t> 从 Redis 获取数据");
|
||||
return gson.fromJson(getRedisData, new TypeToken<List<PermissionDO>>() {
|
||||
}.getType());
|
||||
}
|
||||
|
|
|
@ -23,8 +23,6 @@ public class RoleDAO {
|
|||
private final RoleRedisUtil<String> roleRedisUtil;
|
||||
|
||||
public void addRoleUser(Long uid, Long rid) {
|
||||
log.info("\t> 执行 DAO 层 RoleDAO.addRoleUser 方法");
|
||||
log.info("\t\t> 从 MySQL 获取数据");
|
||||
roleMapper.roleAddUser(uid, rid);
|
||||
roleRedisUtil.setData(
|
||||
BusinessConstants.USER,
|
||||
|
@ -35,20 +33,15 @@ public class RoleDAO {
|
|||
}
|
||||
|
||||
public void delRoleUser(Long uid) {
|
||||
log.info("\t> 执行 DAO 层 RoleDAO.delRoleUser 方法");
|
||||
log.info("\t\t> 从 MySQL 获取数据");
|
||||
roleMapper.roleRemoveUser(uid);
|
||||
roleRedisUtil.delData(BusinessConstants.USER, uid.toString());
|
||||
}
|
||||
|
||||
public RoleDO getRoleById(Long id) {
|
||||
log.info("\t> 执行 DAO 层 RoleDAO.getRoleById 方法");
|
||||
String getRedisData = roleRedisUtil.getData(BusinessConstants.NONE, "all");
|
||||
if (getRedisData == null) {
|
||||
log.info("\t\t> 从 MySQL 获取数据");
|
||||
return roleMapper.getRoleById(id);
|
||||
} else {
|
||||
log.info("\t\t> 从 Redis 获取数据");
|
||||
List<RoleDO> roleList = gson.fromJson(getRedisData, new TypeToken<List<RoleDO>>() {
|
||||
}.getType());
|
||||
for (RoleDO roleDO : roleList) {
|
||||
|
@ -61,23 +54,18 @@ public class RoleDAO {
|
|||
}
|
||||
|
||||
public List<RoleDO> getRole() {
|
||||
log.info("\t> 执行 DAO 层 RoleDAO.getRole 方法");
|
||||
String getRedisData = roleRedisUtil.getData(BusinessConstants.NONE, "all");
|
||||
if (getRedisData == null) {
|
||||
log.info("\t\t> 从 MySQL 获取数据");
|
||||
List<RoleDO> roleList = roleMapper.getRole();
|
||||
roleRedisUtil.setData(BusinessConstants.NONE, "all", gson.toJson(roleList), 1440);
|
||||
return roleList;
|
||||
} else {
|
||||
log.info("\t\t> 从 Redis 获取数据");
|
||||
return gson.fromJson(getRedisData, new TypeToken<List<RoleDO>>() {
|
||||
}.getType());
|
||||
}
|
||||
}
|
||||
|
||||
public void roleAdd(RoleDO roleDO) {
|
||||
log.info("\t> 执行 DAO 层 RoleDAO.roleAdd 方法");
|
||||
log.info("\t\t> 从 MySQL 获取数据");
|
||||
roleMapper.roleAdd(roleDO);
|
||||
List<RoleDO> roleList = roleMapper.getRole();
|
||||
roleRedisUtil.setData(BusinessConstants.NONE, "all", gson.toJson(roleList), 120);
|
||||
|
@ -85,15 +73,11 @@ public class RoleDAO {
|
|||
}
|
||||
|
||||
public RoleDO getRoleNameByUid(Long uid) {
|
||||
log.info("\t> 执行 DAO 层 RoleDAO.getRoleNameByUid 方法");
|
||||
log.info("\t\t> 从 MySQL 获取数据");
|
||||
return roleMapper.getRoleById(getRoleUserByUid(uid).getRid());
|
||||
}
|
||||
|
||||
|
||||
public boolean roleEdit(RoleDO getRole) {
|
||||
log.info("\t> 执行 DAO 层 RoleDAO.roleEdit 方法");
|
||||
log.info("\t\t> 从 MySQL 获取数据");
|
||||
if (roleMapper.roleEdit(getRole)) {
|
||||
List<RoleDO> roleList = roleMapper.getRole();
|
||||
roleRedisUtil.setData(BusinessConstants.NONE, "all", gson.toJson(roleList), 1440);
|
||||
|
@ -104,8 +88,6 @@ public class RoleDAO {
|
|||
}
|
||||
|
||||
public boolean roleDelete(Long id) {
|
||||
log.info("\t> 执行 DAO 层 RoleDAO.roleDelete 方法");
|
||||
log.info("\t\t> 从 MySQL 获取数据");
|
||||
if (roleMapper.roleDelete(id)) {
|
||||
List<RoleDO> roleList = roleMapper.getRole();
|
||||
roleRedisUtil.setData(BusinessConstants.NONE, "all", gson.toJson(roleList), 1440);
|
||||
|
@ -116,15 +98,11 @@ public class RoleDAO {
|
|||
}
|
||||
|
||||
public boolean isExistRoleByRoleName(String roleName) {
|
||||
log.info("\t> 执行 DAO 层 RoleDAO.isExistRoleByRoleName 方法");
|
||||
log.info("\t\t> 从 MySQL 获取数据");
|
||||
RoleDO roleDO = roleMapper.getRoleByRoleName(roleName);
|
||||
return roleDO != null;
|
||||
}
|
||||
|
||||
public boolean roleChangeUser(@NotNull Long uid, Long rid) {
|
||||
log.info("\t> 执行 DAO 层 RoleDAO.roleChangeUser 方法");
|
||||
log.info("\t\t> 从 MySQL 获取数据");
|
||||
if (roleMapper.roleChangeUser(uid, rid)) {
|
||||
roleRedisUtil.setData(
|
||||
BusinessConstants.USER,
|
||||
|
@ -139,13 +117,10 @@ public class RoleDAO {
|
|||
}
|
||||
|
||||
public RoleUserDO getRoleUserByUid(@NotNull Long uid) {
|
||||
log.info("\t> 执行 DAO 层 RoleDAO.getRoleUserByUid 方法");
|
||||
String getRedisData = roleRedisUtil.getData(BusinessConstants.USER, uid.toString());
|
||||
if (getRedisData == null) {
|
||||
log.info("\t\t> 从 MySQL 获取数据");
|
||||
return roleMapper.getRoleUserByUid(uid);
|
||||
} else {
|
||||
log.info("\t\t> 从 Redis 获取数据");
|
||||
return gson.fromJson(getRedisData, RoleUserDO.class);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -33,7 +33,6 @@ public class TagDAO {
|
|||
* @param order 排序
|
||||
*/
|
||||
public ArrayList<TagProjectDO> getTagsProjectList(Integer page, Integer limit, String order) {
|
||||
log.info("[DAO] 请求 getTagsProjectList 接口");
|
||||
// 获取标签列表
|
||||
page = (page - 1) * limit;
|
||||
return (ArrayList<TagProjectDO>) tagMapper.getTagsProjectList(order, limit, page);
|
||||
|
|
|
@ -50,7 +50,6 @@ public class UserDAO {
|
|||
* @author 筱锋xiao_lfeng
|
||||
*/
|
||||
public UserDO getUserInfoByUsername(String username) {
|
||||
log.info("\t> 执行 DAO 层 UserDAO.getUserInfoByUsername 方法");
|
||||
UserDO userDO = null;
|
||||
// 从 Redis 获取数据
|
||||
// TODO: 10000-Redis: 从 Redis 获取数据
|
||||
|
@ -70,15 +69,12 @@ public class UserDAO {
|
|||
* @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;
|
||||
|
@ -96,20 +92,15 @@ public class UserDAO {
|
|||
* @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);
|
||||
}
|
||||
|
||||
|
@ -119,20 +110,14 @@ public class UserDAO {
|
|||
* @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 UserCurrentBackVO userCurrentAll(UserAllCurrentVO userAllCurrentVO) {
|
||||
log.info("\t> 执行 DAO 层 UserDAO.userCurrentAll 方法");
|
||||
log.info("\t\t> 从 MySQL 获取数据");
|
||||
List<UserDO> userCurrentDO = userMapper.getAllUser(userAllCurrentVO);
|
||||
UserCurrentBackVO userCurrentBackVO = new UserCurrentBackVO();
|
||||
userCurrentBackVO.setUsers(new ArrayList<>())
|
||||
|
@ -144,8 +129,6 @@ public class UserDAO {
|
|||
}
|
||||
|
||||
public UserCurrentBackVO userCurrentAllLike(UserAllCurrentVO userAllCurrentVO) {
|
||||
log.info("\t> 执行 DAO 层 UserDAO.userCurrentAllLike 方法");
|
||||
log.info("\t\t> 从 MySQL 获取数据");
|
||||
List<UserDO> userCurrentDO = userMapper.getAllUserBySearch(userAllCurrentVO);
|
||||
UserCurrentBackVO userCurrentBackVO = new UserCurrentBackVO();
|
||||
userCurrentBackVO.setUsers(new ArrayList<>())
|
||||
|
@ -163,14 +146,10 @@ public class UserDAO {
|
|||
* @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);
|
||||
}
|
||||
|
||||
|
@ -181,8 +160,6 @@ public class UserDAO {
|
|||
* @Param username: 用户名
|
||||
**/
|
||||
public Boolean isRepeatUser(String username) {
|
||||
log.info("\t> 执行 DAO 层 isRepeatUser 方法");
|
||||
log.info("\t\t> 从 MySQL 获取数据");
|
||||
return userMapper.getUserInfoByUsername(username) != null;
|
||||
}
|
||||
|
||||
|
@ -205,8 +182,6 @@ public class UserDAO {
|
|||
* @Param userId
|
||||
**/
|
||||
public UserDO getUserById(Long userId) {
|
||||
log.info("\t> 执行 DAO 层 getUserById 方法");
|
||||
log.info("\t\t> 从 MySQL 获取数据");
|
||||
return userMapper.getUserById(userId);
|
||||
}
|
||||
|
||||
|
@ -217,8 +192,6 @@ public class UserDAO {
|
|||
* @Param uid:用户id
|
||||
**/
|
||||
public RoleUserDO getRoleFromUser(Long uid) {
|
||||
log.info("\t> 执行 DAO 层 getRoleFromUser 方法");
|
||||
log.info("\t\t> 从 MySQL 获取数据");
|
||||
return userMapper.getRoleIdByUserId(uid);
|
||||
}
|
||||
|
||||
|
@ -229,8 +202,6 @@ public class UserDAO {
|
|||
* @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;
|
||||
|
@ -240,26 +211,18 @@ public class UserDAO {
|
|||
|
||||
|
||||
public List<UserDO> 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);
|
||||
}
|
||||
|
||||
public Long getUsersCount() {
|
||||
log.info("\t> 执行 DAO 层 getUsersCount 方法");
|
||||
log.info("\t\t> 从 MySQL 获取数据");
|
||||
return userMapper.getUsersCount();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
package com.jsl.oa.exception.library;
|
||||
|
||||
/**
|
||||
* 自定义异常类
|
||||
* <hr/>
|
||||
* 用于表示用户未登录的情况。
|
||||
*
|
||||
* @since v1.2.0
|
||||
* @version v1.2.0
|
||||
* @author xiao_lfeng
|
||||
*/
|
||||
public class NotLoginException extends RuntimeException {
|
||||
public NotLoginException(String message) {
|
||||
super(message);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
package com.jsl.oa.exception.library;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* 自定义异常类
|
||||
* <hr/>
|
||||
* 用于权限拒绝的情况
|
||||
*
|
||||
* @since v1.2.0
|
||||
* @version v1.2.0
|
||||
* @author xiao_lfeng
|
||||
*/
|
||||
@Getter
|
||||
public class PermissionDeniedException extends RuntimeException {
|
||||
private final String needGroup;
|
||||
|
||||
public PermissionDeniedException(String message, String needGroup) {
|
||||
super(message);
|
||||
this.needGroup = needGroup;
|
||||
}
|
||||
}
|
16
src/main/java/com/jsl/oa/exception/library/UserCanntUse.java
Normal file
16
src/main/java/com/jsl/oa/exception/library/UserCanntUse.java
Normal file
|
@ -0,0 +1,16 @@
|
|||
package com.jsl.oa.exception.library;
|
||||
|
||||
/**
|
||||
* 自定义异常类
|
||||
* <hr/>
|
||||
* 用于反馈用户被禁止使用的情况
|
||||
*
|
||||
* @since v1.2.0
|
||||
* @version v1.2.0
|
||||
* @author xiao_lfeng
|
||||
*/
|
||||
public class UserCanntUse extends RuntimeException {
|
||||
public UserCanntUse(String message) {
|
||||
super(message);
|
||||
}
|
||||
}
|
|
@ -1,16 +1,15 @@
|
|||
package com.jsl.oa.model.dodata;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.sql.Date;
|
||||
import java.sql.Timestamp;
|
||||
|
||||
/**
|
||||
* <h1>project 数据表</h1>
|
||||
* <hr/>
|
||||
* 映射 oa_project 数据表内容进入自定义实体类
|
||||
* 映射 oa_project 数据表内容进入自定义实体类, 该实体类用于存储数据表中的数据。
|
||||
*
|
||||
* @author 筱锋xiao_lfeng
|
||||
* @since v1.1.0
|
||||
|
@ -18,24 +17,99 @@ import java.sql.Timestamp;
|
|||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
public class ProjectDO {
|
||||
/**
|
||||
* 主键
|
||||
* <hr/>
|
||||
* 主键,自增
|
||||
*/
|
||||
private Long id;
|
||||
private Long principalId;
|
||||
private String tags;
|
||||
private Integer cycle;
|
||||
/**
|
||||
* 项目名称
|
||||
* <hr/>
|
||||
* 项目名称,最长 255 字符
|
||||
*/
|
||||
private String name;
|
||||
private String file;
|
||||
/**
|
||||
* 项目负责人
|
||||
* <hr/>
|
||||
* 项目负责人,关联 user 表
|
||||
*/
|
||||
private Long principalId;
|
||||
/**
|
||||
* 项目描述
|
||||
* <hr/>
|
||||
* 项目描述,需要存储 json 数据
|
||||
*/
|
||||
private String description;
|
||||
private Integer isDelete;
|
||||
/**
|
||||
* 项目标签
|
||||
* <hr/>
|
||||
* 项目标签,需要存储 json 数据(项目类型:web,大数据等)
|
||||
*/
|
||||
private String tags;
|
||||
/**
|
||||
* 项目周期
|
||||
* <hr/>
|
||||
* 项目周期,单位:天
|
||||
*/
|
||||
private Integer cycle;
|
||||
/**
|
||||
* 项目工作量
|
||||
* <hr/>
|
||||
* 项目工作量,单位:人天
|
||||
*/
|
||||
private Integer workLoad;
|
||||
/**
|
||||
* 项目文件
|
||||
* <hr/>
|
||||
* 项目文件,需要存储 json 数据(文件名:UUID 生成值)。对于 JSON 内部只需要存储 UUID 信息以及加上文件尾缀即可。
|
||||
* <p>
|
||||
* 例如:[UUID].pdf, [UUID].png, [UUID].docx
|
||||
*/
|
||||
private String files;
|
||||
/**
|
||||
* 项目开始时间
|
||||
* <hr/>
|
||||
* 项目开始时间, 格式:yyyy-MM-dd
|
||||
*/
|
||||
private Date beginTime;
|
||||
/**
|
||||
* 项目完成时间
|
||||
* <hr/>
|
||||
* 项目完成时间, 格式:yyyy-MM-dd
|
||||
*/
|
||||
private Date completeTime;
|
||||
/**
|
||||
* 项目截止时间
|
||||
* <hr/>
|
||||
* 项目截止时间, 格式:yyyy-MM-dd
|
||||
* <p>
|
||||
* 项目截止时间为最终的截止时间,即甲方要求的最终结束周期
|
||||
*/
|
||||
private Date deadline;
|
||||
/**
|
||||
* 项目状态
|
||||
* <hr/>
|
||||
* 项目状态(draft: 草稿,progress: 进行,pause: 暂停,abnormal: 异常,complete: 完成)
|
||||
*/
|
||||
private String status;
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "UTC")
|
||||
private Timestamp beginTime;
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "UTC")
|
||||
private Timestamp completeTime;
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "UTC")
|
||||
private Timestamp deadline;
|
||||
/**
|
||||
* 创建时间
|
||||
* <hr/>
|
||||
* 创建时间,格式:1234567890123
|
||||
*/
|
||||
private Timestamp createdAt;
|
||||
/**
|
||||
* 更新时间
|
||||
* <hr/>
|
||||
* 更新时间,格式:1234567890123
|
||||
*/
|
||||
private Timestamp updatedAt;
|
||||
/**
|
||||
* 是否删除
|
||||
* <hr/>
|
||||
* 是否删除(0: 否,1: 是)
|
||||
*/
|
||||
private Boolean isDelete;
|
||||
}
|
||||
|
|
|
@ -9,5 +9,5 @@ public class UserAllCurrentVO {
|
|||
private Long page;
|
||||
private Long limit;
|
||||
private String search;
|
||||
private Long role;
|
||||
private String role;
|
||||
}
|
||||
|
|
|
@ -25,16 +25,10 @@ public class UserCurrentBackVO {
|
|||
@Accessors(chain = true)
|
||||
public static class UserCurrent {
|
||||
private ReturnUser user;
|
||||
private ReturnUserRole role;
|
||||
private String role;
|
||||
private List<String> permission;
|
||||
}
|
||||
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public static class ReturnUserRole {
|
||||
private Long rid;
|
||||
}
|
||||
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public static class ReturnUser {
|
||||
|
|
|
@ -18,16 +18,10 @@ import java.util.List;
|
|||
@Accessors(chain = true)
|
||||
public class UserReturnBackVO {
|
||||
private ReturnUser user;
|
||||
private ReturnUserRole role;
|
||||
private String role;
|
||||
private String token;
|
||||
private List<String> permission;
|
||||
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public static class ReturnUserRole {
|
||||
private Long rid;
|
||||
}
|
||||
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public static class ReturnUser {
|
||||
|
|
|
@ -21,13 +21,6 @@ public interface ProjectService {
|
|||
|
||||
BaseResponse editHeader(HttpServletRequest request, ProjectShowVO projectShowVO, Integer id);
|
||||
|
||||
BaseResponse get(
|
||||
HttpServletRequest request,
|
||||
List<String> tags,
|
||||
List<String> isFinish,
|
||||
Integer page,
|
||||
Integer pageSize);
|
||||
|
||||
BaseResponse getByName(String name);
|
||||
|
||||
BaseResponse projectDelete(HttpServletRequest request, List<Long> id);
|
||||
|
@ -35,12 +28,12 @@ public interface ProjectService {
|
|||
BaseResponse projectAdd(HttpServletRequest request, ProjectInfoVO projectVO);
|
||||
|
||||
BaseResponse workGet(
|
||||
HttpServletRequest request,
|
||||
List<String> tags,
|
||||
List<String> isFinish,
|
||||
Integer is,
|
||||
Integer page,
|
||||
Integer pageSize);
|
||||
HttpServletRequest request,
|
||||
List<String> tags,
|
||||
List<String> isFinish,
|
||||
Integer is,
|
||||
Integer page,
|
||||
Integer pageSize);
|
||||
|
||||
BaseResponse projectWorkAdd(HttpServletRequest request, ProjectWorkVO projectWorkVO);
|
||||
|
||||
|
@ -53,4 +46,15 @@ public interface ProjectService {
|
|||
BaseResponse getWorkById(Integer id);
|
||||
|
||||
BaseResponse projectPrincipalGet();
|
||||
|
||||
/**
|
||||
* 从项目 id 获取项目的详细信息
|
||||
* <hr/>
|
||||
* 根据项目所属 id 获取项目的详细信息,根据用户所属角色组的不同返回不同的内容
|
||||
*
|
||||
* @param request 获取请求体
|
||||
* @param projectId 项目 id
|
||||
* @return 根据用户所属角色组的不同返回不同的内容
|
||||
*/
|
||||
BaseResponse getProjectById(HttpServletRequest request, Long projectId);
|
||||
}
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
package com.jsl.oa.services.impl;
|
||||
|
||||
import com.jsl.oa.annotations.CheckUserAbleToUse;
|
||||
import com.jsl.oa.annotations.UserAbleToUse;
|
||||
import com.jsl.oa.common.constant.BusinessConstants;
|
||||
import com.jsl.oa.dao.PermissionDAO;
|
||||
import com.jsl.oa.dao.RoleDAO;
|
||||
import com.jsl.oa.mapper.RoleMapper;
|
||||
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.*;
|
||||
|
@ -40,7 +40,6 @@ import java.util.regex.Pattern;
|
|||
@RequiredArgsConstructor
|
||||
public class AuthServiceImpl implements AuthService {
|
||||
private final UserMapper userMapper;
|
||||
private final RoleMapper roleMapper;
|
||||
private final RoleDAO roleDAO;
|
||||
private final PermissionDAO permissionDAO;
|
||||
|
||||
|
@ -50,7 +49,6 @@ public class AuthServiceImpl implements AuthService {
|
|||
|
||||
@Override
|
||||
public BaseResponse authRegister(@NotNull UserRegisterVO userRegisterVO) {
|
||||
log.info("\t> 执行 Service 层 AuthService.authRegister 方法");
|
||||
// 检查用户说是否存在
|
||||
UserDO getUserByUsername = userMapper.getUserInfoByUsername(userRegisterVO.getUsername());
|
||||
// 用户名已存在
|
||||
|
@ -87,7 +85,6 @@ public class AuthServiceImpl implements AuthService {
|
|||
|
||||
@Override
|
||||
public BaseResponse authLogin(@NotNull UserLoginVO userLoginVO) {
|
||||
log.info("\t> 执行 Service 层 AuthService.userLogin 方法");
|
||||
// 检查用户是否存在
|
||||
UserDO userDO;
|
||||
if (Pattern.matches("^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\\d{8}$",
|
||||
|
@ -132,7 +129,6 @@ public class AuthServiceImpl implements AuthService {
|
|||
|
||||
@Override
|
||||
public BaseResponse authLoginByEmail(String email, Integer code) {
|
||||
log.info("\t> 执行 Service 层 AuthService.authLoginByEmail 方法");
|
||||
// 获取验证码是否有效
|
||||
Integer redisCode = emailRedisUtil.getData(BusinessConstants.BUSINESS_LOGIN, email);
|
||||
if (redisCode != null) {
|
||||
|
@ -152,7 +148,6 @@ public class AuthServiceImpl implements AuthService {
|
|||
|
||||
@Override
|
||||
public BaseResponse authLoginSendEmailCode(String email) {
|
||||
log.info("\t> 执行 Service 层 AuthService.authLoginSendEmailCode 方法");
|
||||
// 获取用户信息
|
||||
UserDO userDO = userMapper.getUserInfoByEmail(email);
|
||||
if (userDO != null) {
|
||||
|
@ -177,12 +172,11 @@ public class AuthServiceImpl implements AuthService {
|
|||
}
|
||||
|
||||
@Override
|
||||
@CheckUserAbleToUse
|
||||
@UserAbleToUse
|
||||
public BaseResponse authChangePassword(
|
||||
@NotNull UserChangePasswordVO userChangePasswordVO,
|
||||
HttpServletRequest request
|
||||
) {
|
||||
log.info("\t> 执行 Service 层 AuthService.authChangePassword 方法");
|
||||
// 检查新密码输入无误
|
||||
if (!userChangePasswordVO.getNewPassword().equals(userChangePasswordVO.getConfirmPassword())) {
|
||||
return ResultUtil.error(ErrorCode.PASSWORD_NOT_SAME);
|
||||
|
@ -211,9 +205,8 @@ public class AuthServiceImpl implements AuthService {
|
|||
}
|
||||
|
||||
@Override
|
||||
@CheckUserAbleToUse
|
||||
@UserAbleToUse
|
||||
public BaseResponse authLogout(HttpServletRequest request) {
|
||||
log.info("\t> 执行 Service 层 AuthService.authLogout 方法");
|
||||
// 获取用户
|
||||
UserDO userDO = userMapper.getUserById(Processing.getAuthHeaderToUserId(request));
|
||||
// 删除Token
|
||||
|
@ -226,7 +219,6 @@ public class AuthServiceImpl implements AuthService {
|
|||
|
||||
@Override
|
||||
public BaseResponse authForgetPassword(@NotNull UserForgetPasswordVO userForgetPasswordVO) {
|
||||
log.info("\t> 执行 Service 层 AuthService.authForgetPassword 方法");
|
||||
// 获取验证码是否有效
|
||||
Integer redisCode = emailRedisUtil.getData(BusinessConstants.BUSINESS_LOGIN, userForgetPasswordVO.getEmail());
|
||||
if (redisCode != null) {
|
||||
|
@ -283,14 +275,21 @@ public class AuthServiceImpl implements AuthService {
|
|||
} else {
|
||||
getUserRole.setUid(null);
|
||||
}
|
||||
// 获取角色信息
|
||||
RoleDO getRole = roleDAO.getRoleById(getUserRole.getRid());
|
||||
String getRoleString;
|
||||
if (getRole != null) {
|
||||
getRoleString = getRole.getRoleName();
|
||||
} else {
|
||||
getRoleString = "default";
|
||||
}
|
||||
userReturnBackVO.setUser(new UserReturnBackVO.ReturnUser()
|
||||
.setId(userDO.getId())
|
||||
.setJobId(userDO.getJobId())
|
||||
.setUsername(userDO.getUsername())
|
||||
.setEmail(userDO.getEmail())
|
||||
.setPhone(userDO.getPhone()))
|
||||
.setRole(new UserReturnBackVO.ReturnUserRole()
|
||||
.setRid(getUserRole.getRid()))
|
||||
.setRole(getRoleString)
|
||||
.setToken(token)
|
||||
.setPermission(getPermissionForString);
|
||||
return ResultUtil.success("登陆成功", userReturnBackVO);
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package com.jsl.oa.services.impl;
|
||||
|
||||
import com.jsl.oa.annotations.CheckUserHasPermission;
|
||||
import com.jsl.oa.annotations.NeedRoleGroup;
|
||||
import com.jsl.oa.dao.InfoDAO;
|
||||
import com.jsl.oa.dao.RoleDAO;
|
||||
import com.jsl.oa.dao.UserDAO;
|
||||
|
@ -41,9 +41,8 @@ public class InfoServiceImpl implements InfoService {
|
|||
private final RoleDAO roleDAO;
|
||||
|
||||
@Override
|
||||
@CheckUserHasPermission("info.image.add")
|
||||
@NeedRoleGroup("info.image.add")
|
||||
public BaseResponse addHeaderImage(HttpServletRequest request, @NotNull CarouselVO carouselVO) {
|
||||
log.info("\t> 执行 Service 层 InfoService.addHeaderImage 方法");
|
||||
// 获取用户
|
||||
Long userId = Processing.getAuthHeaderToUserId(request);
|
||||
UserDO userDO = userDAO.getUserById(userId);
|
||||
|
@ -75,9 +74,8 @@ public class InfoServiceImpl implements InfoService {
|
|||
}
|
||||
|
||||
@Override
|
||||
@CheckUserHasPermission("info.image.edit")
|
||||
@NeedRoleGroup("info.image.edit")
|
||||
public BaseResponse editHeaderImage(HttpServletRequest request, @NotNull CarouselVO carouselVO) {
|
||||
log.info("\t> 执行 Service 层 InfoService.editHeaderImage 方法");
|
||||
// 获取用户
|
||||
Long userId = Processing.getAuthHeaderToUserId(request);
|
||||
UserDO userDO = userDAO.getUserById(userId);
|
||||
|
@ -112,7 +110,6 @@ public class InfoServiceImpl implements InfoService {
|
|||
|
||||
@Override
|
||||
public BaseResponse getHeaderImage(Integer id) {
|
||||
log.info("\t> 执行 Service 层 InfoService.getHeaderImage 方法");
|
||||
// 获取轮播图信息
|
||||
CarouselDO carouselDO = infoDAO.getCarousel();
|
||||
if (id != null) {
|
||||
|
@ -127,9 +124,8 @@ public class InfoServiceImpl implements InfoService {
|
|||
}
|
||||
|
||||
@Override
|
||||
@CheckUserHasPermission("info.image.del")
|
||||
@NeedRoleGroup("info.image.del")
|
||||
public BaseResponse delHeaderImage(HttpServletRequest request, Integer id) {
|
||||
log.info("\t> 执行 Service 层 InfoService.delHeaderImage 方法");
|
||||
// 用户权限校验
|
||||
if (!Processing.checkUserIsAdmin(request, roleDAO)) {
|
||||
return ResultUtil.error(ErrorCode.NOT_ADMIN);
|
||||
|
@ -150,9 +146,8 @@ public class InfoServiceImpl implements InfoService {
|
|||
}
|
||||
|
||||
@Override
|
||||
@CheckUserHasPermission("info.image.setting.edit")
|
||||
@NeedRoleGroup("info.image.setting.edit")
|
||||
public BaseResponse editSettingHeaderImage(HttpServletRequest request, Boolean showType) {
|
||||
log.info("\t> 执行 Service 层 InfoService.editSettingHeaderImage 方法");
|
||||
// 用户权限校验
|
||||
if (!Processing.checkUserIsAdmin(request, roleDAO)) {
|
||||
return ResultUtil.error(ErrorCode.NOT_ADMIN);
|
||||
|
@ -170,7 +165,6 @@ public class InfoServiceImpl implements InfoService {
|
|||
|
||||
@Override
|
||||
public BaseResponse getHeaderUser(HttpServletRequest request, String order, String orderBy) {
|
||||
log.info("\t> 执行 Service 层 InfoService.getHeaderUser 方法");
|
||||
// 默认无参数情况
|
||||
if (order == null) {
|
||||
order = "asc";
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package com.jsl.oa.services.impl;
|
||||
|
||||
import com.jsl.oa.annotations.CheckUserAbleToUse;
|
||||
import com.jsl.oa.annotations.UserAbleToUse;
|
||||
import com.jsl.oa.services.MailService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
@ -39,9 +39,8 @@ public class MailServiceImpl implements MailService {
|
|||
|
||||
@Override
|
||||
@Async
|
||||
@CheckUserAbleToUse
|
||||
@UserAbleToUse
|
||||
public void sendMail(String sendTo, String subject, String text) {
|
||||
log.info("\t> 执行 Service 层 MailService.sendMail 方法");
|
||||
//发送多媒体邮件
|
||||
try {
|
||||
MimeMessage message = javaMailSender.createMimeMessage();
|
||||
|
@ -63,16 +62,13 @@ public class MailServiceImpl implements MailService {
|
|||
|
||||
@Override
|
||||
@Async
|
||||
@CheckUserAbleToUse
|
||||
public void sendMail(String sendTo, String model) {
|
||||
log.info("\t> 执行 Service 层 MailService.sendMail 方法");
|
||||
}
|
||||
@UserAbleToUse
|
||||
public void sendMail(String sendTo, String model) { }
|
||||
|
||||
@Override
|
||||
@Async
|
||||
@CheckUserAbleToUse
|
||||
@UserAbleToUse
|
||||
public void sendMailAboutUserLogin(String email, Integer code) {
|
||||
log.info("\t> 执行 Service 层 MailService.sendMailAboutUserLogin 方法");
|
||||
// 发送邮件带HTML模块部分
|
||||
try {
|
||||
MimeMessage message = javaMailSender.createMimeMessage();
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package com.jsl.oa.services.impl;
|
||||
import com.jsl.oa.annotations.CheckUserAbleToUse;
|
||||
|
||||
import com.jsl.oa.annotations.UserAbleToUse;
|
||||
import com.jsl.oa.dao.UserDAO;
|
||||
import com.jsl.oa.mapper.MessageMapper;
|
||||
import com.jsl.oa.mapper.ProjectMapper;
|
||||
|
@ -13,6 +14,7 @@ import com.jsl.oa.utils.*;
|
|||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.ArrayList;
|
||||
|
@ -37,7 +39,7 @@ public class MessageServiceImpl implements MessageService {
|
|||
private final ProjectMapper projectMapper;
|
||||
|
||||
@Override
|
||||
@CheckUserAbleToUse
|
||||
@UserAbleToUse
|
||||
public BaseResponse messageDelete(Long mid, HttpServletRequest request) {
|
||||
//获取消息数据
|
||||
MessageDO messageDO = messageMapper.getMessageById(mid);
|
||||
|
@ -55,7 +57,7 @@ public class MessageServiceImpl implements MessageService {
|
|||
|
||||
@SuppressWarnings("checkstyle:Regexp")
|
||||
@Override
|
||||
@CheckUserAbleToUse
|
||||
@UserAbleToUse
|
||||
public BaseResponse messageGet(LocalDateTime beginTime,
|
||||
LocalDateTime endTime,
|
||||
Integer page,
|
||||
|
@ -90,11 +92,11 @@ public class MessageServiceImpl implements MessageService {
|
|||
/**
|
||||
* 添加指派消息
|
||||
*
|
||||
* @param pId 项目id
|
||||
* @param pId 项目id
|
||||
* @param systemId 系统id
|
||||
* @param moddleId 模块id
|
||||
* @param uid 用户id
|
||||
* @param request
|
||||
* @param uid 用户id
|
||||
* @param request 请求
|
||||
*/
|
||||
@Override
|
||||
public void messageAdd(
|
||||
|
@ -129,12 +131,12 @@ public class MessageServiceImpl implements MessageService {
|
|||
/**
|
||||
* 添加审批消息
|
||||
*
|
||||
* @param pId 项目id
|
||||
* @param pId 项目id
|
||||
* @param systemId 系统id
|
||||
* @param moddleId 模块id
|
||||
* @param uid 用户id
|
||||
* @param isPass 是否通过 1:通过 0:未通过
|
||||
* @param request
|
||||
* @param uid 用户id
|
||||
* @param isPass 是否通过 1:通过 0:未通过
|
||||
* @param request 请求
|
||||
*/
|
||||
@Override
|
||||
public void messageAdd(
|
||||
|
@ -163,10 +165,11 @@ public class MessageServiceImpl implements MessageService {
|
|||
|
||||
/**
|
||||
* 添加项目变动消息
|
||||
* @param pId 项目id
|
||||
* @param type 类型 1:上传文档 2:修改状态 3:修改负责人
|
||||
*
|
||||
* @param pId 项目id
|
||||
* @param type 类型 1:上传文档 2:修改状态 3:修改负责人
|
||||
* @param systemId 系统id
|
||||
* @param request
|
||||
* @param request 请求
|
||||
*/
|
||||
@Override
|
||||
public void messageAdd(
|
||||
|
@ -201,11 +204,11 @@ public class MessageServiceImpl implements MessageService {
|
|||
/**
|
||||
* 添加子系统变动消息
|
||||
*
|
||||
* @param pId 项目id
|
||||
* @param pId 项目id
|
||||
* @param systmeId 系统id
|
||||
* @param moddleId 模块id
|
||||
* @param type 类型 1:删除模块 2:修改简介 3:修改周期
|
||||
* @param request
|
||||
* @param type 类型 1:删除模块 2:修改简介 3:修改周期
|
||||
* @param request 请求
|
||||
*/
|
||||
@Override
|
||||
public void messageAdd(
|
||||
|
@ -238,8 +241,8 @@ public class MessageServiceImpl implements MessageService {
|
|||
messageAddVO.setText("项目经理" + senderName + "修改了" + projectName + "项目的"
|
||||
+ systemName + "系统的简介说明");
|
||||
} else if (type == 3) {
|
||||
messageAddVO.setText("项目经理" + senderName + "修改了" + projectName + "项目的"
|
||||
+ systemName + "系统的系统周期/工作量");
|
||||
messageAddVO.setText("项目经理" + senderName + "修改了" + projectName + "项目的"
|
||||
+ systemName + "系统的系统周期/工作量");
|
||||
}
|
||||
messageAddVO.setType("跳转系统页");
|
||||
messageAddVO.setToId(systmeId);
|
||||
|
@ -323,8 +326,8 @@ public class MessageServiceImpl implements MessageService {
|
|||
String systemName = projectMapper.getWorkById(projectWorkDO.getProjectChildId().intValue()).getName();
|
||||
String moddleName = projectWorkDO.getName();
|
||||
messageAddVO.setText("您负责的" + projectName + "项目的" + systemName + "系统的" + moddleName + "模块"
|
||||
+ "还有三天就要到期了,请及时处理");
|
||||
messageAddVO.setType("跳转模块页");
|
||||
+ "还有三天就要到期了,请及时处理");
|
||||
messageAddVO.setType("跳转模块页");
|
||||
messageAddVO.setToId(projectWorkDO.getId().intValue());
|
||||
messageMapper.messageAdd(messageAddVO);
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package com.jsl.oa.services.impl;
|
||||
|
||||
|
||||
import com.jsl.oa.annotations.CheckUserHasPermission;
|
||||
import com.jsl.oa.annotations.NeedRoleGroup;
|
||||
import com.jsl.oa.dao.NewsDAO;
|
||||
import com.jsl.oa.model.dodata.NewsDO;
|
||||
import com.jsl.oa.model.vodata.NewsAddVO;
|
||||
|
@ -35,9 +35,8 @@ public class NewsServiceImpl implements NewsService {
|
|||
private final NewsDAO newsDAO;
|
||||
|
||||
@Override
|
||||
@CheckUserHasPermission("news.add")
|
||||
@NeedRoleGroup("news.add")
|
||||
public BaseResponse newsAdd(NewsAddVO newsAddVO, @NotNull HttpServletRequest request) {
|
||||
log.info("\t> 执行 Service 层 NewsService.newsAdd 方法");
|
||||
// 拷贝新闻数据到实体类
|
||||
NewsDO newsDO = new NewsDO();
|
||||
Processing.copyProperties(newsAddVO, newsDO);
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package com.jsl.oa.services.impl;
|
||||
|
||||
import com.jsl.oa.annotations.CheckUserHasPermission;
|
||||
import com.jsl.oa.annotations.NeedRoleGroup;
|
||||
import com.jsl.oa.dao.PermissionDAO;
|
||||
import com.jsl.oa.dao.RoleDAO;
|
||||
import com.jsl.oa.dao.UserDAO;
|
||||
|
@ -41,17 +41,15 @@ public class PermissionServiceImpl implements PermissionService {
|
|||
private final UserDAO userDAO;
|
||||
|
||||
@Override
|
||||
@CheckUserHasPermission("permission.add")
|
||||
@NeedRoleGroup("permission.add")
|
||||
public BaseResponse permissionAdd(HttpServletRequest request, Long rid, Long pid) {
|
||||
log.info("\t> 执行 Service 层 PermissionService.permissionAdd 方法");
|
||||
permissionMapper.permissionAdd(rid, pid);
|
||||
return ResultUtil.success();
|
||||
}
|
||||
|
||||
@Override
|
||||
@CheckUserHasPermission("permission.user")
|
||||
@NeedRoleGroup("permission.user")
|
||||
public BaseResponse permissionUser(HttpServletRequest request, Long uid) {
|
||||
log.info("\t> 执行 Service 层 PermissionService.permissionUserPid 方法");
|
||||
if (userDAO.isExistUser(uid)) {
|
||||
// 此用户是否为管理员
|
||||
RoleUserDO roleUserDO = roleDAO.getRoleUserByUid(uid);
|
||||
|
@ -70,9 +68,8 @@ public class PermissionServiceImpl implements PermissionService {
|
|||
|
||||
|
||||
@Override
|
||||
@CheckUserHasPermission("permission.get")
|
||||
@NeedRoleGroup("permission.get")
|
||||
public BaseResponse permissionGet(HttpServletRequest request) {
|
||||
log.info("\t> 执行 Service 层 PermissionService.permissionGet 方法");
|
||||
//获取所有权限数据
|
||||
List<PermissionDO> permissionDOList = permissionMapper.getAllPermission();
|
||||
//将数据按父子类封装
|
||||
|
@ -82,9 +79,8 @@ public class PermissionServiceImpl implements PermissionService {
|
|||
}
|
||||
|
||||
@Override
|
||||
@CheckUserHasPermission("permission.edit")
|
||||
@NeedRoleGroup("permission.edit")
|
||||
public BaseResponse permissionEdit(PermissionEditVO permissionEditVo, HttpServletRequest request) {
|
||||
log.info("\t> 执行 Service 层 PermissionService.permissionEdit 方法");
|
||||
//根据id获取对应permission数据
|
||||
PermissionDO permissionDO = permissionMapper.getPermissionById(permissionEditVo.getId());
|
||||
if (permissionDO == null) {
|
||||
|
@ -100,9 +96,8 @@ public class PermissionServiceImpl implements PermissionService {
|
|||
}
|
||||
|
||||
@Override
|
||||
@CheckUserHasPermission("permission.delete")
|
||||
@NeedRoleGroup("permission.delete")
|
||||
public BaseResponse permissionDelete(HttpServletRequest request, Long pid) {
|
||||
log.info("\t> 执行 Service 层 PermissionService.permissionDelete 方法");
|
||||
//删除权限
|
||||
if (!permissionMapper.deletePermission(pid)) {
|
||||
return ResultUtil.error(ErrorCode.DATABASE_DELETE_ERROR);
|
||||
|
|
|
@ -3,7 +3,7 @@ package com.jsl.oa.services.impl;
|
|||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.jsl.oa.annotations.CheckUserHasPermission;
|
||||
import com.jsl.oa.annotations.NeedRoleGroup;
|
||||
import com.jsl.oa.dao.ProjectDAO;
|
||||
import com.jsl.oa.dao.RoleDAO;
|
||||
import com.jsl.oa.dao.UserDAO;
|
||||
|
@ -54,7 +54,6 @@ public class ProjectServiceImpl implements ProjectService {
|
|||
|
||||
@Override
|
||||
public BaseResponse projectAdd(HttpServletRequest request, ProjectInfoVO projectAdd) {
|
||||
log.info("\t> 执行 Service 层 ProjectService.projectAdd 方法");
|
||||
if (projectAdd.getDescription().isEmpty()) {
|
||||
projectAdd.setDescription("{}");
|
||||
} else {
|
||||
|
@ -81,7 +80,6 @@ public class ProjectServiceImpl implements ProjectService {
|
|||
|
||||
@Override
|
||||
public BaseResponse projectWorkAdd(HttpServletRequest request, ProjectWorkVO projectWorkVO) {
|
||||
log.info("\t> 执行 Service 层 ProjectService.projectWorkAdd 方法");
|
||||
//获取用户id
|
||||
Long userId = Processing.getAuthHeaderToUserId(request);
|
||||
//是否是增加子系统
|
||||
|
@ -106,7 +104,6 @@ public class ProjectServiceImpl implements ProjectService {
|
|||
|
||||
@Override
|
||||
public BaseResponse tGet(List<String> tags, List<String> isFinish, Integer page, Integer pageSize) {
|
||||
log.info("\t> 执行 Service 层 ProjectService.tGet 方法");
|
||||
|
||||
List<ProjectDO> projectDOList = projectDAO.tget(isFinish, tags);
|
||||
|
||||
|
@ -136,13 +133,13 @@ public class ProjectServiceImpl implements ProjectService {
|
|||
|
||||
ProjectDO projectDO = projectDAO.getProjectById(projectId);
|
||||
|
||||
if (projectDO.getFile() == null || projectDO.getFile().equals("{}")) {
|
||||
if (projectDO.getFiles() == null || projectDO.getFiles().equals("{}")) {
|
||||
return ResultUtil.success(null);
|
||||
}
|
||||
|
||||
// 将文件内容转换为 JSON 数组
|
||||
try {
|
||||
Object fileJson = new ObjectMapper().readValue(projectDO.getFile(), Object.class);
|
||||
Object fileJson = new ObjectMapper().readValue(projectDO.getFiles(), Object.class);
|
||||
return ResultUtil.success(fileJson);
|
||||
} catch (JsonProcessingException e) {
|
||||
return ResultUtil.error(ErrorCode.PROJECT_FILE_JSON_ERROR);
|
||||
|
@ -183,9 +180,24 @@ public class ProjectServiceImpl implements ProjectService {
|
|||
return ResultUtil.success(userMapper.getPrincipal());
|
||||
}
|
||||
|
||||
@Override
|
||||
public BaseResponse getProjectById(HttpServletRequest request, Long projectId) {
|
||||
// 对项目 id 进行数据库校验
|
||||
ProjectDO getProject = projectDAO.getProjectById(projectId);
|
||||
if (getProject == null) {
|
||||
return ResultUtil.error(ErrorCode.PROJECT_NOT_EXIST);
|
||||
}
|
||||
// 检查项目是否被删除
|
||||
if (getProject.getIsDelete()) {
|
||||
return ResultUtil.error("项目已删除", ErrorCode.PROJECT_NOT_EXIST);
|
||||
}
|
||||
// 对项目具体信息进行检查
|
||||
// TODO: [10001] 需要检查普通用户是否有权限可以看到这一篇项目内容
|
||||
return ResultUtil.success(getProject);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BaseResponse projectEdit(HttpServletRequest request, @NotNull ProjectEditVO projectEdit, Long projectId) {
|
||||
log.info("\t> 执行 Service 层 ProjectService.projectEdit 方法");
|
||||
|
||||
|
||||
//判断用户是否为老师 或者 项目负责人
|
||||
|
@ -220,9 +232,8 @@ public class ProjectServiceImpl implements ProjectService {
|
|||
}
|
||||
|
||||
@Override
|
||||
@CheckUserHasPermission("info.project.add")
|
||||
@NeedRoleGroup("info.project.add")
|
||||
public BaseResponse addHeader(HttpServletRequest request, ProjectShowVO projectShowVO) {
|
||||
log.info("\t> 执行 Service 层 InfoService.addHeader 方法");
|
||||
// 获取用户
|
||||
Long userId = Processing.getAuthHeaderToUserId(request);
|
||||
UserDO userDO = userDAO.getUserById(userId);
|
||||
|
@ -247,9 +258,8 @@ public class ProjectServiceImpl implements ProjectService {
|
|||
}
|
||||
|
||||
@Override
|
||||
@CheckUserHasPermission("info.project.del")
|
||||
@NeedRoleGroup("info.project.del")
|
||||
public BaseResponse delHeader(Integer id, HttpServletRequest request) {
|
||||
log.info("\t> 执行 Service 层 InfoService.delHeader 方法");
|
||||
// 获取展示信息
|
||||
ProjectShowDO projectShowDO = projectDAO.getHeader();
|
||||
// 删除指定展示id
|
||||
|
@ -266,9 +276,8 @@ public class ProjectServiceImpl implements ProjectService {
|
|||
}
|
||||
|
||||
@Override
|
||||
@CheckUserHasPermission("info.project.edit")
|
||||
@NeedRoleGroup("info.project.edit")
|
||||
public BaseResponse editHeader(HttpServletRequest request, ProjectShowVO projectShowVO, Integer id) {
|
||||
log.info("\t> 执行 Service 层 InfoService.editHeader 方法");
|
||||
// 获取用户
|
||||
Long userId = Processing.getAuthHeaderToUserId(request);
|
||||
UserDO userDO = userDAO.getUserById(userId);
|
||||
|
@ -294,56 +303,6 @@ public class ProjectServiceImpl implements ProjectService {
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public BaseResponse get(
|
||||
HttpServletRequest request,
|
||||
List<String> tags,
|
||||
List<String> isFinish,
|
||||
Integer page,
|
||||
Integer pageSize
|
||||
) {
|
||||
log.info("\t> 执行 Service 层 ProjectService.get 方法");
|
||||
|
||||
//获取用户
|
||||
Long userId = Processing.getAuthHeaderToUserId(request);
|
||||
//根据标签查询
|
||||
if (tags != null && !tags.isEmpty()) {
|
||||
List<ProjectDO> projectDOList = projectDAO.get(userId, tags, isFinish);
|
||||
|
||||
List<ProjectSimpleVO> projectSimpleVOList = new ArrayList<>();
|
||||
for (ProjectDO projectDO : projectDOList) {
|
||||
ProjectSimpleVO projectSimpleVO1 = new ProjectSimpleVO();
|
||||
Processing.projectTosimply(projectSimpleVO1, projectDO, userDAO, objectMapper);
|
||||
projectSimpleVOList.add(projectSimpleVO1);
|
||||
}
|
||||
//分页返回
|
||||
int start = (page - 1) * pageSize;
|
||||
int end = start + pageSize;
|
||||
List<ProjectSimpleVO> pageData = projectSimpleVOList.subList(start,
|
||||
Math.min(end, projectSimpleVOList.size()));
|
||||
return ResultUtil.success(pageData);
|
||||
}
|
||||
|
||||
//根据状态查询
|
||||
if (isFinish != null && !isFinish.isEmpty()) {
|
||||
List<ProjectDO> projectDOList = projectDAO.get(userId, tags, isFinish);
|
||||
List<ProjectSimpleVO> projectSimpleVOList = new ArrayList<>();
|
||||
for (ProjectDO projectDO : projectDOList) {
|
||||
ProjectSimpleVO projectSimpleVO1 = new ProjectSimpleVO();
|
||||
Processing.projectTosimply(projectSimpleVO1, projectDO, userDAO, objectMapper);
|
||||
projectSimpleVOList.add(projectSimpleVO1);
|
||||
}
|
||||
//分页返回
|
||||
int start = (page - 1) * pageSize;
|
||||
int end = start + pageSize;
|
||||
List<ProjectSimpleVO> pageData = projectSimpleVOList.subList(start,
|
||||
Math.min(end, projectSimpleVOList.size()));
|
||||
return ResultUtil.success(pageData);
|
||||
}
|
||||
return ResultUtil.success(projectMapper.get(userId));
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public BaseResponse workGet(
|
||||
HttpServletRequest request,
|
||||
|
@ -353,7 +312,6 @@ public class ProjectServiceImpl implements ProjectService {
|
|||
Integer page,
|
||||
Integer pageSize
|
||||
) {
|
||||
log.info("\t> 执行 Service 层 ProjectService.workGet 方法");
|
||||
//获取用户
|
||||
Long userId = Processing.getAuthHeaderToUserId(request);
|
||||
|
||||
|
@ -374,10 +332,8 @@ public class ProjectServiceImpl implements ProjectService {
|
|||
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public BaseResponse getByName(String name) {
|
||||
log.info("\t> 执行 Service 层 ProjectService.getByName 方法");
|
||||
if (projectDAO.getByName(name) == null) {
|
||||
return ResultUtil.error(ErrorCode.PROJECT_NOT_EXIST);
|
||||
} else {
|
||||
|
@ -387,7 +343,6 @@ public class ProjectServiceImpl implements ProjectService {
|
|||
|
||||
@Override
|
||||
public BaseResponse projectDelete(HttpServletRequest request, List<Long> id) {
|
||||
log.info("\t> 执行 Service 层 ProjectService.projectDelete 方法");
|
||||
|
||||
//判断用户是否为老师 或者 项目负责人
|
||||
if (!Processing.checkUserIsTeacher(request, roleDAO)) {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
package com.jsl.oa.services.impl;
|
||||
|
||||
import com.jsl.oa.annotations.CheckUserHasPermission;
|
||||
import com.jsl.oa.annotations.NeedRoleGroup;
|
||||
import com.jsl.oa.dao.RoleDAO;
|
||||
import com.jsl.oa.dao.UserDAO;
|
||||
import com.jsl.oa.exception.ClassCopyException;
|
||||
|
@ -42,9 +42,8 @@ public class RoleServiceImpl implements RoleService {
|
|||
private final UserDAO userDAO;
|
||||
|
||||
@Override
|
||||
@CheckUserHasPermission("role.add")
|
||||
@NeedRoleGroup("role.add")
|
||||
public BaseResponse roleAddUser(HttpServletRequest request, Long uid, Long rid) {
|
||||
log.info("\t> 执行 Service 层 RoleService.addRoleUser 方法");
|
||||
if (Processing.checkUserIsAdmin(request, roleDAO)) {
|
||||
roleDAO.addRoleUser(uid, rid);
|
||||
return ResultUtil.success();
|
||||
|
@ -56,7 +55,6 @@ public class RoleServiceImpl implements RoleService {
|
|||
@Override
|
||||
|
||||
public BaseResponse roleRemoveUser(HttpServletRequest request, Long uid) {
|
||||
log.info("\t> 执行 Service 层 RoleService.delRoleUser 方法");
|
||||
if (Processing.checkUserIsAdmin(request, roleDAO)) {
|
||||
roleDAO.delRoleUser(uid);
|
||||
return ResultUtil.success();
|
||||
|
@ -67,7 +65,6 @@ public class RoleServiceImpl implements RoleService {
|
|||
|
||||
@Override
|
||||
public BaseResponse roleChangeUser(HttpServletRequest request, Long uid, Long rid) {
|
||||
log.info("\t> 执行 Service 层 RoleService.roleChangeUser 方法");
|
||||
//检测用户是否存在
|
||||
if (!userDAO.isExistUser(uid)) {
|
||||
return ResultUtil.error(ErrorCode.USER_NOT_EXIST);
|
||||
|
@ -90,7 +87,6 @@ public class RoleServiceImpl implements RoleService {
|
|||
|
||||
@Override
|
||||
public BaseResponse roleGet(HttpServletRequest request, String id) {
|
||||
log.info("\t> 执行 Service 层 RoleService.roleGet 方法");
|
||||
// 检查用户权限
|
||||
if (!Processing.checkUserIsAdmin(request, roleDAO)) {
|
||||
return ResultUtil.error(ErrorCode.NOT_ADMIN);
|
||||
|
@ -117,7 +113,6 @@ public class RoleServiceImpl implements RoleService {
|
|||
|
||||
@Override
|
||||
public BaseResponse roleEdit(HttpServletRequest request, RoleEditVO roleEditVO) {
|
||||
log.info("\t> 执行 Service 层 RoleService.roleEdit 方法");
|
||||
// 检查用户权限
|
||||
if (!Processing.checkUserIsAdmin(request, roleDAO)) {
|
||||
return ResultUtil.error(ErrorCode.NOT_ADMIN);
|
||||
|
@ -141,7 +136,6 @@ public class RoleServiceImpl implements RoleService {
|
|||
|
||||
@Override
|
||||
public BaseResponse roleDelete(HttpServletRequest request, Long id) {
|
||||
log.info("\t> 执行 Service 层 RoleService.roleDelete 方法");
|
||||
// 检查用户权限
|
||||
if (!Processing.checkUserIsAdmin(request, roleDAO)) {
|
||||
return ResultUtil.error(ErrorCode.NOT_ADMIN);
|
||||
|
@ -163,7 +157,6 @@ public class RoleServiceImpl implements RoleService {
|
|||
|
||||
@Override
|
||||
public BaseResponse addRole(HttpServletRequest request, RoleAddVo roleAddVO) throws ClassCopyException {
|
||||
log.info("\t> 执行 Service 层 RoleService.addRole 方法");
|
||||
// 检查用户权限
|
||||
if (!Processing.checkUserIsAdmin(request, roleDAO)) {
|
||||
return ResultUtil.error(ErrorCode.NOT_ADMIN);
|
||||
|
|
|
@ -37,7 +37,6 @@ public class TagServiceImpl implements TagService {
|
|||
*/
|
||||
@Override
|
||||
public BaseResponse getTagsProjectList(Integer page, Integer limit, String order) {
|
||||
log.info("[Service] 请求 getTagsProjectList 接口");
|
||||
// 获取标签列表
|
||||
ArrayList<TagProjectDO> getTagList = tagDAO.getTagsProjectList(page, limit, order);
|
||||
return ResultUtil.success(getTagList);
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package com.jsl.oa.services.impl;
|
||||
|
||||
import com.jsl.oa.annotations.CheckUserAbleToUse;
|
||||
import com.jsl.oa.annotations.CheckUserHasPermission;
|
||||
import com.jsl.oa.annotations.NeedRoleGroup;
|
||||
import com.jsl.oa.annotations.UserAbleToUse;
|
||||
import com.jsl.oa.dao.PermissionDAO;
|
||||
import com.jsl.oa.dao.RoleDAO;
|
||||
import com.jsl.oa.dao.UserDAO;
|
||||
|
@ -52,7 +52,6 @@ public class UserServiceImpl implements UserService {
|
|||
|
||||
@Override
|
||||
public BaseResponse userDelete(HttpServletRequest request, Long id) {
|
||||
log.info("\t> 执行 Service 层 UserService.userDelete 方法");
|
||||
//判断用户是否存在
|
||||
if (userDAO.isExistUser(id)) {
|
||||
if (!Processing.checkUserIsAdmin(request, roleDAO)) {
|
||||
|
@ -72,7 +71,6 @@ public class UserServiceImpl implements UserService {
|
|||
|
||||
@Override
|
||||
public BaseResponse userLock(HttpServletRequest request, Long id, Long isLock) {
|
||||
log.info("\t> 执行 Service 层 UserService.userLock 方法");
|
||||
if (!Processing.checkUserIsAdmin(request, roleDAO)) {
|
||||
return ResultUtil.error(ErrorCode.NOT_ADMIN);
|
||||
}
|
||||
|
@ -87,7 +85,6 @@ public class UserServiceImpl implements UserService {
|
|||
|
||||
@Override
|
||||
public BaseResponse userEditProfile(@NotNull UserEditProfileVO userEditProfileVO) {
|
||||
log.info("\t> 执行 Service 层 UserService.userEditProfile 方法");
|
||||
if (userDAO.isExistUser(userEditProfileVO.getId())) {
|
||||
userDAO.userEditProfile(userEditProfileVO);
|
||||
return ResultUtil.success("修改成功");
|
||||
|
@ -97,9 +94,8 @@ public class UserServiceImpl implements UserService {
|
|||
}
|
||||
|
||||
@Override
|
||||
@CheckUserHasPermission("user.current.all")
|
||||
@NeedRoleGroup("user.current.all")
|
||||
public BaseResponse userCurrentAll(HttpServletRequest request, @NotNull UserAllCurrentVO userAllCurrentVO) {
|
||||
log.info("\t> 执行 Service 层 UserService.userCurrentAll 方法");
|
||||
// 检查数据
|
||||
if (userAllCurrentVO.getPage() == null || userAllCurrentVO.getPage() < 1) {
|
||||
userAllCurrentVO.setPage(1L);
|
||||
|
@ -126,20 +122,19 @@ public class UserServiceImpl implements UserService {
|
|||
}
|
||||
// 检查是否存在 Role 筛选
|
||||
if (userAllCurrentVO.getRole() != null) {
|
||||
userCurrentBackVO.getUsers().removeIf(it -> !userAllCurrentVO.getRole().equals(it.getRole().getRid()));
|
||||
userCurrentBackVO.getUsers().removeIf(it -> !userAllCurrentVO.getRole().equals(it.getRole()));
|
||||
}
|
||||
return ResultUtil.success(userCurrentBackVO);
|
||||
}
|
||||
|
||||
@SuppressWarnings("checkstyle:NestedIfDepth")
|
||||
@Override
|
||||
@CheckUserAbleToUse
|
||||
@UserAbleToUse
|
||||
public BaseResponse userCurrent(HttpServletRequest request,
|
||||
String id,
|
||||
String username,
|
||||
String email,
|
||||
String phone) {
|
||||
log.info("\t> 执行 Service 层 UserService.userCurrent 方法");
|
||||
if (id == null && username == null && email == null && phone == null) {
|
||||
// Token获取信息
|
||||
UserDO userDO = userDAO.getUserById(Processing.getAuthHeaderToUserId(request));
|
||||
|
@ -193,7 +188,6 @@ public class UserServiceImpl implements UserService {
|
|||
|
||||
@Override
|
||||
public BaseResponse userAdd(UserAddVO userAddVo, HttpServletRequest request) {
|
||||
log.info("\t> 执行 Service 层 UserService.userAdd 方法");
|
||||
// 检测用户是否为管理员
|
||||
if (!Processing.checkUserIsAdmin(request, roleDAO)) {
|
||||
return ResultUtil.error(ErrorCode.NOT_ADMIN);
|
||||
|
@ -231,7 +225,6 @@ public class UserServiceImpl implements UserService {
|
|||
|
||||
@Override
|
||||
public BaseResponse userEdit(UserEditVO userEditVO, HttpServletRequest request) {
|
||||
log.info("\t> 执行 Service 层 userEdit 方法");
|
||||
// 检测用户是否为管理员
|
||||
if (!Processing.checkUserIsAdmin(request, roleDAO)) {
|
||||
return ResultUtil.error(ErrorCode.NOT_ADMIN);
|
||||
|
@ -265,13 +258,11 @@ public class UserServiceImpl implements UserService {
|
|||
|
||||
@Override
|
||||
public BaseResponse userProfileGet(HttpServletRequest request) {
|
||||
log.info("\t> 执行 Service 层 UserService.userProfileGet 方法");
|
||||
|
||||
// 获取用户Id
|
||||
UserDO userDO = userDAO.getUserById(Processing.getAuthHeaderToUserId(request));
|
||||
UserProfileVo userProfileVo = new UserProfileVo();
|
||||
Processing.copyProperties(userDO, userProfileVo);
|
||||
userProfileVo.setRole(roleDAO.getRoleNameByUid(userDO.getId()).getDisplayName());
|
||||
userProfileVo.setRole(roleDAO.getRoleNameByUid(userDO.getId()).getRoleName());
|
||||
userProfileVo.setSex(Processing.getSex(userDO.getSex()));
|
||||
return ResultUtil.success(userProfileVo);
|
||||
}
|
||||
|
|
|
@ -2,7 +2,9 @@ package com.jsl.oa.utils;
|
|||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import lombok.Getter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
@Slf4j
|
||||
@Getter
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
public class BaseResponse {
|
||||
|
@ -16,12 +18,6 @@ public class BaseResponse {
|
|||
this.code = code;
|
||||
this.message = message;
|
||||
this.data = data;
|
||||
}
|
||||
|
||||
public BaseResponse(String output, Integer code, String message) {
|
||||
this.output = output;
|
||||
this.code = code;
|
||||
this.message = message;
|
||||
this.data = null;
|
||||
log.info("============================================================");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -298,30 +298,37 @@ public class Processing {
|
|||
// 获取权限列表信息
|
||||
getPermissionForString = permissionDAO.getPermission(userDO.getId());
|
||||
}
|
||||
userCurrent.setUser(new UserCurrentBackVO.ReturnUser().
|
||||
setId(userDO.getId()).
|
||||
setJobId(userDO.getJobId()).
|
||||
setUsername(userDO.getUsername()).
|
||||
setAddress(userDO.getAddress()).
|
||||
setPhone(userDO.getPhone()).
|
||||
setEmail(userDO.getEmail()).
|
||||
setAge(userDO.getAge()).
|
||||
setSignature(userDO.getSignature()).
|
||||
setAvatar(userDO.getAvatar()).
|
||||
setNickname(userDO.getNickname()).
|
||||
setSex(userDO.getSex()).
|
||||
setEnabled(userDO.getEnabled()).
|
||||
setAccountNoExpired(userDO.getAccountNoExpired()).
|
||||
setCredentialsNoExpired(userDO.getCredentialsNoExpired()).
|
||||
setRecommend(userDO.getRecommend()).
|
||||
setAccountNoLocked(userDO.getAccountNoLocked()).
|
||||
setDescription(userDO.getDescription()).
|
||||
setCreatedAt(userDO.getCreatedAt()).
|
||||
setUpdatedAt(userDO.getUpdatedAt()).
|
||||
setIsDelete(userDO.getIsDelete())).
|
||||
setRole(new UserCurrentBackVO.ReturnUserRole().
|
||||
setRid(getUserRole.getRid())).
|
||||
setPermission(getPermissionForString);
|
||||
RoleDO getRole = roleDAO.getRoleById(getUserRole.getRid());
|
||||
String getRoleString;
|
||||
if (getRole != null) {
|
||||
getRoleString = getRole.getRoleName();
|
||||
} else {
|
||||
getRoleString = "default";
|
||||
}
|
||||
userCurrent
|
||||
.setUser(new UserCurrentBackVO.ReturnUser()
|
||||
.setId(userDO.getId())
|
||||
.setJobId(userDO.getJobId())
|
||||
.setUsername(userDO.getUsername())
|
||||
.setAddress(userDO.getAddress())
|
||||
.setPhone(userDO.getPhone())
|
||||
.setEmail(userDO.getEmail())
|
||||
.setAge(userDO.getAge())
|
||||
.setSignature(userDO.getSignature())
|
||||
.setAvatar(userDO.getAvatar())
|
||||
.setNickname(userDO.getNickname())
|
||||
.setSex(userDO.getSex())
|
||||
.setEnabled(userDO.getEnabled())
|
||||
.setAccountNoExpired(userDO.getAccountNoExpired())
|
||||
.setCredentialsNoExpired(userDO.getCredentialsNoExpired())
|
||||
.setRecommend(userDO.getRecommend())
|
||||
.setAccountNoLocked(userDO.getAccountNoLocked())
|
||||
.setDescription(userDO.getDescription())
|
||||
.setCreatedAt(userDO.getCreatedAt())
|
||||
.setUpdatedAt(userDO.getUpdatedAt())
|
||||
.setIsDelete(userDO.getIsDelete()))
|
||||
.setRole(getRoleString)
|
||||
.setPermission(getPermissionForString);
|
||||
return userCurrent;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,75 +1,100 @@
|
|||
package com.jsl.oa.utils;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.jetbrains.annotations.Contract;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
/**
|
||||
* <h1>结果工具类</h1>
|
||||
* <hr/>
|
||||
* 用于返回结果
|
||||
*
|
||||
* @author xiao_lfeng
|
||||
* @version v1.1.0
|
||||
* @since v1.1.0
|
||||
* @author xiao_lfeng
|
||||
*/
|
||||
@Slf4j
|
||||
public class ResultUtil {
|
||||
|
||||
@Contract(" -> new")
|
||||
public static @NotNull BaseResponse success() {
|
||||
log.info("成功: Success[200] {}", "操作成功");
|
||||
log.info("==================================================");
|
||||
log.info("成功: Success[200] 操作成功 - 不带数据");
|
||||
return new BaseResponse("Success", 200, "操作成功", null);
|
||||
}
|
||||
|
||||
@Contract("_ -> new")
|
||||
public static @NotNull BaseResponse success(String message) {
|
||||
log.info("成功: Success[200] {}", message);
|
||||
log.info("==================================================");
|
||||
log.info("成功: Success[200] {} - 不带数据", message);
|
||||
return new BaseResponse("Success", 200, message, null);
|
||||
}
|
||||
|
||||
@Contract(value = "_ -> new", pure = true)
|
||||
public static @NotNull BaseResponse success(Object data) {
|
||||
log.info("成功: Success[200] {}", "操作成功");
|
||||
log.info("==================================================");
|
||||
log.info("成功: Success[200] 操作成功 - 带数据");
|
||||
return new BaseResponse("Success", 200, "操作成功", data);
|
||||
}
|
||||
|
||||
@Contract(value = "_, _ -> new", pure = true)
|
||||
public static @NotNull BaseResponse success(String message, Object data) {
|
||||
log.info("成功: Success[200] {}", message);
|
||||
log.info("==================================================");
|
||||
log.info("成功: Success[200] {} - 带数据", message);
|
||||
return new BaseResponse("Success", 200, message, data);
|
||||
}
|
||||
|
||||
@Contract("_ -> new")
|
||||
public static @NotNull BaseResponse error(@NotNull String errorMessage, @NotNull ErrorCode errorCode) {
|
||||
log.warn("失败: 错误码[" + errorCode.getCode() + "] {} - {} - {}",
|
||||
errorCode.getOutput(),
|
||||
errorCode.getMessage(),
|
||||
errorMessage
|
||||
);
|
||||
HashMap<String, String> map = new HashMap<>();
|
||||
map.put("errorMessage", errorMessage);
|
||||
return new BaseResponse(errorCode.getOutput(), errorCode.getCode(), errorCode.getMessage(), map);
|
||||
}
|
||||
|
||||
public static @NotNull BaseResponse error(@NotNull ErrorCode errorCode) {
|
||||
log.warn("失败: 错误码[" + errorCode.getCode() + "] {} - {}", errorCode.getOutput(), errorCode.getMessage());
|
||||
log.info("==================================================");
|
||||
return new BaseResponse(errorCode.getOutput(), errorCode.getCode(), errorCode.getMessage());
|
||||
logBack(errorCode.getCode(), errorCode.getOutput(), errorCode.getMessage(), null);
|
||||
HashMap<String, String> map = new HashMap<>();
|
||||
map.put("errorMessage", errorCode.getMessage());
|
||||
return new BaseResponse(errorCode.getOutput(), errorCode.getCode(), errorCode.getMessage(), map);
|
||||
}
|
||||
|
||||
@Contract("_, _ -> new")
|
||||
public static @NotNull BaseResponse error(@NotNull ErrorCode errorCode, Object data) {
|
||||
log.warn("失败: 错误码[" + errorCode.getCode() + "] {} - {}", errorCode.getOutput(), errorCode.getMessage());
|
||||
log.info("==================================================");
|
||||
return new BaseResponse(errorCode.getOutput(), errorCode.getCode(), errorCode.getMessage(), data);
|
||||
logBack(errorCode.getCode(), errorCode.getOutput(), errorCode.getMessage(), data);
|
||||
HashMap<String, Object> map = new HashMap<>();
|
||||
map.put("errorMessage", errorCode.getMessage());
|
||||
map.put("errorData", data);
|
||||
return new BaseResponse(errorCode.getOutput(), errorCode.getCode(), errorCode.getMessage(), map);
|
||||
}
|
||||
|
||||
@Contract(value = "_, _, _, _ -> new", pure = true)
|
||||
public static @NotNull BaseResponse error(String output, Integer code, String message, Object data) {
|
||||
log.warn("失败: 错误码[" + code + "] {} - {}", output, message);
|
||||
log.info("==================================================");
|
||||
return new BaseResponse(output, code, message, data);
|
||||
logBack(code, output, message, data);
|
||||
HashMap<String, Object> map = new HashMap<>();
|
||||
map.put("errorMessage", message);
|
||||
map.put("errorData", data);
|
||||
return new BaseResponse(output, code, message, map);
|
||||
}
|
||||
|
||||
public static @NotNull ResponseEntity<BaseResponse> error(String output, Integer code, String message) {
|
||||
log.warn("失败: 错误码[" + code + "] {} - {}", output, message);
|
||||
log.info("==================================================");
|
||||
logBack(code, output, message, null);
|
||||
HashMap<String, Object> map = new HashMap<>();
|
||||
map.put("errorMessage", message);
|
||||
return ResponseEntity.status(500)
|
||||
.body(new BaseResponse(output, code, message));
|
||||
.body(new BaseResponse(output, code, message, map));
|
||||
}
|
||||
|
||||
/**
|
||||
* <h1>日志记录</h1>
|
||||
* <hr/>
|
||||
* 用户返回错误相关的日志内容
|
||||
*
|
||||
* @param code 错误码
|
||||
* @param output 英文输出状态信息
|
||||
* @param message 中文解释消息
|
||||
* @param data 是否有数据
|
||||
*/
|
||||
private static void logBack(Integer code, String output, String message, Object data) {
|
||||
if (data != null) {
|
||||
log.warn("失败: 错误码[{}] {} - {} - 带数据", code, output, message);
|
||||
} else {
|
||||
log.warn("失败: 错误码[{}] {} - {} - 不带数据", code, output, message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user