diff --git a/src/main/java/com/jsl/oa/JslOrganizeInternalOaRunnerApplication.java b/src/main/java/com/jsl/oa/JslOrganizeInternalOaRunnerApplication.java deleted file mode 100644 index 8028d1c..0000000 --- a/src/main/java/com/jsl/oa/JslOrganizeInternalOaRunnerApplication.java +++ /dev/null @@ -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; - -/** - *

启动类

- *
- * 用于启动项目 - * - * @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; - - - /** - *

获取安全密钥

- *
- * 从数据库中获取安全密钥 - */ - @Override - public void afterSingletonsInstantiated() { - // 获取数据库中的 SecurityKey - try { - SafeConstants.SECRET_KEY = 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.SECRET_KEY = key; - } - } -} diff --git a/src/main/java/com/jsl/oa/annotations/CheckUserAbleToUse.java b/src/main/java/com/jsl/oa/annotations/CheckUserAbleToUse.java deleted file mode 100644 index 508fc24..0000000 --- a/src/main/java/com/jsl/oa/annotations/CheckUserAbleToUse.java +++ /dev/null @@ -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; - -/** - *

检查用户是否可用

- *
- * 用于检查用户是否可用 - * - * @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 { - /** - *

是否启用

- *
- * 用于指定是否启用
- * 请注意,禁用后任何用户权限校验不校验用户是否启用 - * - * @return {@link Boolean} - */ - boolean isCheckEnable() default true; - - /** - *

是否删除

- *
- * 用于指定是否删除
- * 请注意,禁用后任何用户权限校验不校验用户是否删除 - * - * @return {@link Boolean} - */ - boolean isCheckDelete() default true; - - /** - *

是否锁定

- *
- * 用于指定是否锁定
- * 请注意,禁用后任何用户权限校验不校验用户是否锁定 - * - * @return {@link Boolean} - */ - boolean isCheckLock() default true; - - /** - *

是否过期

- *
- * 用于指定是否过期
- * 请注意,禁用后任何用户权限校验不校验用户是否过期 - * - * @return {@link Boolean} - */ - boolean isCheckExpire() default true; -} diff --git a/src/main/java/com/jsl/oa/annotations/CheckUserHasPermission.java b/src/main/java/com/jsl/oa/annotations/NeedPermission.java similarity index 57% rename from src/main/java/com/jsl/oa/annotations/CheckUserHasPermission.java rename to src/main/java/com/jsl/oa/annotations/NeedPermission.java index 824f40e..b4966f8 100644 --- a/src/main/java/com/jsl/oa/annotations/CheckUserHasPermission.java +++ b/src/main/java/com/jsl/oa/annotations/NeedPermission.java @@ -14,7 +14,7 @@ import java.lang.annotation.*; @Documented @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) -public @interface CheckUserHasPermission { +public @interface NeedPermission { /** *

权限名称

*
@@ -23,14 +23,4 @@ public @interface CheckUserHasPermission { * @return {@link String} */ String value() default ""; - - /** - *

是否检查

- *
- * 用于指定是否检查
- * 请注意,该方法只会禁止检查权限,但是不会禁止检查用户是否允许继续执行 - * @since v1.1.0 - * @return {@link Boolean} - */ - boolean isCheck() default true; } diff --git a/src/main/java/com/jsl/oa/annotations/UserAbleToUse.java b/src/main/java/com/jsl/oa/annotations/UserAbleToUse.java new file mode 100644 index 0000000..1e7a847 --- /dev/null +++ b/src/main/java/com/jsl/oa/annotations/UserAbleToUse.java @@ -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; + +/** + *

检查用户是否可用

+ *
+ * 用于检查用户是否可用 + * + * @version v1.1.0 + * @since v1.1.0 + * @author xiao_lfeng + */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +public @interface UserAbleToUse { } diff --git a/src/main/java/com/jsl/oa/aspect/AnnotationsAspect.java b/src/main/java/com/jsl/oa/aspect/AnnotationsAspect.java deleted file mode 100644 index 8cbbae6..0000000 --- a/src/main/java/com/jsl/oa/aspect/AnnotationsAspect.java +++ /dev/null @@ -1,207 +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.dao.UserDAO; -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; - -/** - *

注解切面

- *
- * 用于注解的切面 - * - * @author xiao_lfeng - * @version v1.1.0 - * @since v1.1.0 - */ -@Slf4j -@Aspect -@Component -@RequiredArgsConstructor -public class AnnotationsAspect { - private final RoleDAO roleDAO; - private final UserDAO userDAO; - private final PermissionDAO permissionDAO; - - /** - *

检查用户是否有权限

- *
- * 检查用户是否有权限 - * - * @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, userDAO.userMapper); - if (checkUserAbleToNext != null) { - return checkUserAbleToNext; - } else { - if (permissionCheck) { - // 检查用户权限 - List getPermission = permissionDAO.getPermission(userId); - // 匹配权限 - if (getPermission.contains(permissionName)) { - return pjp.proceed(); - } else { - log.info("\t> 用户权限不足,检查是否是管理员"); - // 检查用户是管理员 - RoleUserDO roleUserDO = roleDAO.roleMapper - .getRoleUserByUid(Processing.getAuthHeaderToUserId(request)); - if (roleUserDO == null) { - return ResultUtil.error(ErrorCode.NOT_ADMIN); - } - RoleDO roleDO = roleDAO.roleMapper.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 = userDAO.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; - } -} diff --git a/src/main/java/com/jsl/oa/aspect/AuthControllerAspect.java b/src/main/java/com/jsl/oa/aspect/AuthControllerAspect.java deleted file mode 100755 index c1d9fac..0000000 --- a/src/main/java/com/jsl/oa/aspect/AuthControllerAspect.java +++ /dev/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; - -/** - *

用户控制器切面

- *
- * 用于用户控制器的切面 - * - * @author xiao_lfeng - * @version v1.1.0 - * @since v1.0.0 - */ -@Slf4j -@Aspect -@Component -@RequiredArgsConstructor -public class AuthControllerAspect { - private final TokenRedisUtil tokenRedisUtil; - - /** - *

用户控制器切面

- *
- * 用于用户控制器的切面 - * - * @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); - } - } - - /** - *

Token检查切面

- *
- * 用于检查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); - } - - /** - *

时间戳检查

- *
- * 用于检查时间戳是否合法,合法时间范围正负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; - } -} diff --git a/src/main/java/com/jsl/oa/aspect/BusinessAop.java b/src/main/java/com/jsl/oa/aspect/BusinessAop.java new file mode 100644 index 0000000..da8fecc --- /dev/null +++ b/src/main/java/com/jsl/oa/aspect/BusinessAop.java @@ -0,0 +1,102 @@ +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; + +/** + * 业务切面 + *
+ * 对业务进行切入,进行对内容操作的预处理 + * + * @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()); + if (result != null) { + log.debug("\t> 传出信息:{}", result); + } + return result; + } +} diff --git a/src/main/java/com/jsl/oa/aspect/CheckUserAbleToUseAspect.java b/src/main/java/com/jsl/oa/aspect/CheckUserAbleToUseAspect.java new file mode 100644 index 0000000..4447410 --- /dev/null +++ b/src/main/java/com/jsl/oa/aspect/CheckUserAbleToUseAspect.java @@ -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; + +/** + * 检查用户权限切面 + *
+ * 检查用户能否正常使用,在用户使用之前进行可用性检查 + * + * @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.NeedPermission)") + 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("无法获取信息"); + } + } +} diff --git a/src/main/java/com/jsl/oa/aspect/CheckUserPermissionAspect.java b/src/main/java/com/jsl/oa/aspect/CheckUserPermissionAspect.java new file mode 100644 index 0000000..f17128d --- /dev/null +++ b/src/main/java/com/jsl/oa/aspect/CheckUserPermissionAspect.java @@ -0,0 +1,84 @@ +package com.jsl.oa.aspect; + +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.jsl.oa.annotations.NeedPermission; +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; + +import java.util.List; + +/** + * 检查用户权限切面 + *
+ * 检查访问的用户是否包含正确的访问权限,若用户有正确的访问权限则允许访问,若没有指定的权限将会返回错误的权限信息。 + * + * @author xiao_lfeng + * @version v1.2.0 + * @since v1.2.0 + */ +@Slf4j +@Aspect +@Component +@RequiredArgsConstructor +public class CheckUserPermissionAspect { + + private final RoleDAO roleDAO; + private final Gson gson; + + /** + * 检查权限 + *
+ * 检查注解中填写的权限,只有当接口符合注解中的权限信息,才会实际进入业务,否则将会被拦截 + * + * @param pjp {@link ProceedingJoinPoint} + * @return {@link Object} + */ + @Around("@annotation(com.jsl.oa.annotations.NeedPermission)") + 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(); + NeedPermission checkAccountPermission = signature.getMethod().getAnnotation(NeedPermission.class); + String getRoleAtAnnotation = checkAccountPermission.value(); + + // 获取用户所在权限组 + RoleDO getUserRole = roleDAO.getRoleByUserId(getUserId); + if (getUserRole != null) { + List permissions = gson.fromJson(getUserRole.getPermissions(), new TypeToken>() { + }.getType()); + if (permissions != null) { + for (String it : permissions) { + if (it.equals(getRoleAtAnnotation)) { + return pjp.proceed(); + } + } + } + } + throw new PermissionDeniedException("权限不匹配", getRoleAtAnnotation); + } else { + throw new RuntimeException("无法获取信息"); + } + } +} diff --git a/src/main/java/com/jsl/oa/common/constant/ReviewConstants.java b/src/main/java/com/jsl/oa/common/constant/ReviewConstants.java new file mode 100644 index 0000000..3468ef4 --- /dev/null +++ b/src/main/java/com/jsl/oa/common/constant/ReviewConstants.java @@ -0,0 +1,29 @@ +package com.jsl.oa.common.constant; + + +/** + *

Review常量类

+ *
+ * 用于存放审核信息的审批状态常量与类别常量 + * + * @version v1.1.0 + * @since v1.1.0 + * @author zrx_hhh + */ +public class ReviewConstants { + +// 审核状态 0:未通过;1:已通过;2:未审批 + public static final short NOT_APPROVED = 0; + + public static final short APPROVED = 1; + + public static final short PENDING = 2; + +// 审核类型 0:子系统;1:子模块 + public static final short SUBSYSTEM = 0; + + public static final short SUBMODULE = 1; + +} + + diff --git a/src/main/java/com/jsl/oa/common/constant/SafeConstants.java b/src/main/java/com/jsl/oa/common/constant/SafeConstants.java index a9071d1..a712abe 100644 --- a/src/main/java/com/jsl/oa/common/constant/SafeConstants.java +++ b/src/main/java/com/jsl/oa/common/constant/SafeConstants.java @@ -1,5 +1,12 @@ package com.jsl.oa.common.constant; +import lombok.Getter; +import lombok.Setter; + public class SafeConstants { - public static String SECRET_KEY; + + @Getter + @Setter + private static String secretKey; + } diff --git a/src/main/java/com/jsl/oa/config/filter/JwtFilter.java b/src/main/java/com/jsl/oa/config/filter/JwtFilter.java index 8e48ce3..1d5c70e 100755 --- a/src/main/java/com/jsl/oa/config/filter/JwtFilter.java +++ b/src/main/java/com/jsl/oa/config/filter/JwtFilter.java @@ -46,7 +46,7 @@ public class JwtFilter extends BasicHttpAuthenticationFilter { } else { // 解析Bearer后面的令牌 token = token.replace("Bearer ", ""); - log.info("请求令牌:" + token); + log.info("[FILTER] 请求令牌:" + token); return JwtUtil.verify(token); } } diff --git a/src/main/java/com/jsl/oa/config/filter/TimestampFilter.java b/src/main/java/com/jsl/oa/config/filter/TimestampFilter.java new file mode 100644 index 0000000..4bcb93e --- /dev/null +++ b/src/main/java/com/jsl/oa/config/filter/TimestampFilter.java @@ -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; + +/** + * 时间戳过滤器 + *
+ * 对前端发送的时间戳进行检查,当检查通过后将会进入通过过滤器,若检查不通过将会被当前拦截器拦截并返回 {@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成功"))); + } + } +} diff --git a/src/main/java/com/jsl/oa/config/shiro/ShiroConfiguration.java b/src/main/java/com/jsl/oa/config/shiro/ShiroConfiguration.java index 3a11cb0..98d2ef8 100755 --- a/src/main/java/com/jsl/oa/config/shiro/ShiroConfiguration.java +++ b/src/main/java/com/jsl/oa/config/shiro/ShiroConfiguration.java @@ -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 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 setFilterChain() { Map 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; } diff --git a/src/main/java/com/jsl/oa/config/startup/PermissionList.java b/src/main/java/com/jsl/oa/config/startup/PermissionList.java new file mode 100644 index 0000000..c671696 --- /dev/null +++ b/src/main/java/com/jsl/oa/config/startup/PermissionList.java @@ -0,0 +1,40 @@ +package com.jsl.oa.config.startup; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +import java.util.ArrayList; + +@Getter +public class PermissionList { + @Getter + @RequiredArgsConstructor + public static class PermissionVO { + private final String name; + private final String desc; + } + private final ArrayList permissionList = new ArrayList<>(); + private final ArrayList permissionPrincipal = new ArrayList<>(); + private final ArrayList permissionDeveloper = new ArrayList<>(); + + + public PermissionList() { + permissionList.add(new PermissionVO("auth:logout", "账户登出")); + permissionList.add(new PermissionVO("auth:change_password", "修改密码")); + permissionList.add(new PermissionVO("info:get_header_image", "获取头部图片")); + permissionList.add(new PermissionVO("info:edit_header_image", "编辑头部图片")); + permissionList.add(new PermissionVO("info:delete_header_image", "删除头部图片")); + + permissionPrincipal.add(new PermissionVO("auth:logout", "账户登出")); + permissionPrincipal.add(new PermissionVO("auth:change_password", "修改密码")); + permissionPrincipal.add(new PermissionVO("info:get_header_image", "获取头部图片")); + permissionPrincipal.add(new PermissionVO("info:edit_header_image", "编辑头部图片")); + permissionPrincipal.add(new PermissionVO("info:delete_header_image", "删除头部图片")); + + permissionDeveloper.add(new PermissionVO("auth:logout", "账户登出")); + permissionDeveloper.add(new PermissionVO("auth:change_password", "修改密码")); + permissionDeveloper.add(new PermissionVO("info:get_header_image", "获取头部图片")); + permissionDeveloper.add(new PermissionVO("info:edit_header_image", "编辑头部图片")); + permissionDeveloper.add(new PermissionVO("info:delete_header_image", "删除头部图片")); + } +} diff --git a/src/main/java/com/jsl/oa/config/startup/PrepareData.java b/src/main/java/com/jsl/oa/config/startup/PrepareData.java new file mode 100644 index 0000000..42381cc --- /dev/null +++ b/src/main/java/com/jsl/oa/config/startup/PrepareData.java @@ -0,0 +1,94 @@ +package com.jsl.oa.config.startup; + +import com.google.gson.Gson; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.core.io.Resource; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.dao.DataAccessException; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.util.FileCopyUtils; + +import java.io.IOException; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; + +@Slf4j +@RequiredArgsConstructor +public class PrepareData { + private final JdbcTemplate jdbcTemplate; + + /** + * 检查角色 + *
+ * 检查检查指定的角色是否存在,如果不存在则创建 + */ + 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 + ); + } + } + + /** + * 检查数据库是否完整 + *
+ * 检查数据库是否完整,若数据库保持完整则不进行任何操作,若数据库不完整将会创建对应的数据表 + * @param tableName 数据表名字 + */ + public void checkDatabase(String tableName) { + try { + jdbcTemplate.queryForObject( + "SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_NAME = ?", + String.class, + tableName + ); + } catch (DataAccessException e) { + log.debug("[Preparation] 创建数据表 {}", tableName); + // 读取文件 + PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); + // 读取 resources/mysql 目录下的所有 SQL 文件 + Resource resource = resolver.getResource("classpath:/mysql/" + tableName + ".sql"); + // 创建数据表 + try { + String sql = FileCopyUtils + .copyToString(new InputStreamReader(resource.getInputStream(), StandardCharsets.UTF_8)); + // 分割 SQL 语句并执行 + jdbcTemplate.execute("USE organize_oa"); + String[] sqlStatements = sql.split(";"); + for (String statement : sqlStatements) { + if (!statement.trim().isEmpty()) { + jdbcTemplate.execute(statement.trim()); + } + } + } catch (IOException ex) { + throw new RuntimeException(ex); + } + } + } + + public void checkPermission(String roleName, ArrayList permissions) { + ArrayList newPermissions = new ArrayList<>(); + permissions.forEach(it -> newPermissions.add(it.getName())); + Gson gson = new Gson(); + String getPermissionString = gson.toJson(newPermissions); + log.debug("[Preparation] 更新角色 {} 权限", roleName); + jdbcTemplate.update( + "UPDATE organize_oa.oa_role SET permissions = ? WHERE role_name = ?", + getPermissionString, + roleName + ); + } +} diff --git a/src/main/java/com/jsl/oa/config/startup/StartupConfiguration.java b/src/main/java/com/jsl/oa/config/startup/StartupConfiguration.java new file mode 100644 index 0000000..d154921 --- /dev/null +++ b/src/main/java/com/jsl/oa/config/startup/StartupConfiguration.java @@ -0,0 +1,287 @@ +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; + +/** + * 系统启动时进行的一些初始化操作 + *
+ * 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 final PermissionList getPermission = new PermissionList(); + private PrepareData prepareData; + + @Bean + @Order(1) + public CommandLineRunner startUpPreparation() { + return args -> { + log.info(">==========================================================="); + log.info("[Preparation] 系统进行准备检查"); + prepareData = new PrepareData(jdbcTemplate); + }; + } + + /** + * 对数据库进行完整性检查 + *
+ * 对数据库进行完整性检查,检查数据库是否出现缺失数据表的情况,若出现缺失数据表的情况将会对数据表进行创建,若数据保持完整将不进行任何操作 + */ + @Bean + @Order(2) + public CommandLineRunner checkDatabaseExist() { + return args -> { + log.info("[Preparation] 系统进行数据库完整性检查"); + // 数据表的检查 + prepareData.checkDatabase("oa_config"); + prepareData.checkDatabase("oa_user"); + prepareData.checkDatabase("oa_role"); + prepareData.checkDatabase("oa_permissions"); + prepareData.checkDatabase("oa_news"); + prepareData.checkDatabase("oa_project_tags"); + prepareData.checkDatabase("oa_project"); + prepareData.checkDatabase("oa_project_child"); + prepareData.checkDatabase("oa_project_modules"); + prepareData.checkDatabase("oa_review"); + prepareData.checkDatabase("oa_message"); + prepareData.checkDatabase("oa_news_user"); + prepareData.checkDatabase("oa_project_daily"); + prepareData.checkDatabase("oa_role_user"); + prepareData.checkDatabase("oa_user_tags"); + }; + } + + @Bean + @Order(3) + public CommandLineRunner permissionDataPreparation() { + return args -> { + log.info("[Preparation] 系统进行权限表完整性检查"); + getPermission.getPermissionList().forEach(permissionVO -> { + try { + jdbcTemplate.queryForObject( + "SELECT id FROM organize_oa.oa_permissions WHERE name = ?", + Long.class, + permissionVO.getName() + ); + } catch (DataAccessException e) { + log.debug("[Preparation] 缺失 {} 权限,正在创建", permissionVO.getName()); + jdbcTemplate.update( + "INSERT INTO organize_oa.oa_permissions (name, description) VALUES (?,?)", + permissionVO.getName(), + permissionVO.getDesc() + ); + } + }); + }; + } + + /** + * 对数据表进行完整性检查 + *
+ * 对数据表进行完整性检查,检查数据表是否有数据缺失等信息 + */ + @Bean + @Order(4) + public CommandLineRunner roleDataPreparation() { + return args -> { + log.info("[Preparation] 系统进行角色表完整性检查"); + // 检查角色信息是否完整 + prepareData.checkRole("console", "超级管理员"); + prepareData.checkRole("principal", "负责人"); + prepareData.checkRole("developer", "开发者"); + + // 对权限的检查 + prepareData.checkPermission("console", getPermission.getPermissionList()); + prepareData.checkPermission("principal", getPermission.getPermissionPrincipal()); + prepareData.checkPermission("developer", getPermission.getPermissionDeveloper()); + }; + } + + /** + * 检查默认管理员账户 + *
+ * 为程序进行检查默认管理员程序,检查默认管理员是否存在,若管理员存在且权限正确则检查通过,若检查失败或该用户不存在将会创建一个超级管理员 + * 账户。 + */ + @Bean + @Order(5) + 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(6) + 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 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("") + ); + } + }; + } + + /** + * 准备安全密钥 + *
+ * 准备安全密钥,用于加密解密等操作 + */ + @Bean + @Order(7) + 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 getData = gson.fromJson( + getSecurityKey, + new TypeToken>() { + }.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("===========================================================>"); + }; + } +} diff --git a/src/main/java/com/jsl/oa/controllers/AuthController.java b/src/main/java/com/jsl/oa/controllers/AuthController.java index c26aa60..cd9d9b9 100755 --- a/src/main/java/com/jsl/oa/controllers/AuthController.java +++ b/src/main/java/com/jsl/oa/controllers/AuthController.java @@ -1,5 +1,6 @@ package com.jsl.oa.controllers; +import com.jsl.oa.annotations.NeedPermission; import com.jsl.oa.model.vodata.UserChangePasswordVO; import com.jsl.oa.model.vodata.UserForgetPasswordVO; import com.jsl.oa.model.vodata.UserLoginVO; @@ -55,7 +56,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 +79,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 +98,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 +122,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 { @@ -151,8 +147,8 @@ public class AuthController { * @since v1.1.0 */ @GetMapping("/auth/logout") + @NeedPermission("auth:logout") public BaseResponse authLogout(HttpServletRequest request) { - log.info("请求接口[GET]: /auth/logout"); return authService.authLogout(request); } @@ -168,12 +164,12 @@ public class AuthController { * @since v1.1.0 */ @PutMapping("/auth/password") + @NeedPermission("auth:change_password") public BaseResponse authChangePassword( @RequestBody @Validated UserChangePasswordVO userChangePasswordVO, @NotNull BindingResult bindingResult, HttpServletRequest request ) { - log.info("请求接口[PUT]: /auth/password"); // 判断是否有参数错误 if (bindingResult.hasErrors()) { return ResultUtil.error(ErrorCode.REQUEST_BODY_ERROR, Processing.getValidatedErrorList(bindingResult)); @@ -191,7 +187,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)); diff --git a/src/main/java/com/jsl/oa/controllers/IndexController.java b/src/main/java/com/jsl/oa/controllers/IndexController.java index 41fe309..2228948 100644 --- a/src/main/java/com/jsl/oa/controllers/IndexController.java +++ b/src/main/java/com/jsl/oa/controllers/IndexController.java @@ -35,7 +35,6 @@ public class IndexController { */ @RequestMapping("/") public BaseResponse index() { - log.info("请求接口[GET]: /"); HashMap newMap = new HashMap<>(); newMap.put("timestamp", "构建时间:" + timestamp); return ResultUtil.success("欢迎使用JSL-OA系统,服务器处于正常状态", newMap); diff --git a/src/main/java/com/jsl/oa/controllers/InfoController.java b/src/main/java/com/jsl/oa/controllers/InfoController.java index ec0afec..4dcf610 100755 --- a/src/main/java/com/jsl/oa/controllers/InfoController.java +++ b/src/main/java/com/jsl/oa/controllers/InfoController.java @@ -1,5 +1,6 @@ package com.jsl.oa.controllers; +import com.jsl.oa.annotations.NeedPermission; import com.jsl.oa.model.vodata.business.info.CarouselVO; import com.jsl.oa.services.InfoService; import com.jsl.oa.utils.BaseResponse; @@ -41,8 +42,8 @@ public class InfoController { * @return 图片信息 */ @GetMapping("/info/header-image/get") + @NeedPermission("info:get_header_image") public BaseResponse infoGetHeaderImage(@RequestParam(required = false) Integer id) { - log.info("请求接口[GET]: /info/header-image/get"); return infoService.getHeaderImage(id); } @@ -55,12 +56,12 @@ public class InfoController { * @return 编辑结果 */ @PutMapping("/info/header-image/edit") + @NeedPermission("info:edit_header_image") public BaseResponse infoEditHeaderImage( @RequestBody @Validated CarouselVO carouselVO, HttpServletRequest request, @NotNull BindingResult bindingResult ) { - log.info("请求接口[PUT]: /info/header-image/edit"); // 参数校验 if (bindingResult.hasErrors()) { log.warn("参数校验失败: {}", Processing.getValidatedErrorList(bindingResult)); @@ -81,8 +82,8 @@ public class InfoController { * @return 删除结果 */ @DeleteMapping("/info/header-image/del") + @NeedPermission("info:delete_header_image") public BaseResponse infoDelHeaderImage(@RequestParam Integer id, HttpServletRequest request) { - log.info("请求接口[DELETE]: /info/header-image/del"); return infoService.delHeaderImage(request, id); } @@ -100,7 +101,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 +118,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 +135,6 @@ public class InfoController { @RequestParam String orderBy, HttpServletRequest request ) { - log.info("请求接口[GET]: /info/header-user/get"); return infoService.getHeaderUser(request, order, orderBy); } } diff --git a/src/main/java/com/jsl/oa/controllers/MessageController.java b/src/main/java/com/jsl/oa/controllers/MessageController.java index bf8b3a8..464e4b2 100644 --- a/src/main/java/com/jsl/oa/controllers/MessageController.java +++ b/src/main/java/com/jsl/oa/controllers/MessageController.java @@ -14,7 +14,7 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; -import java.time.LocalDate; +import java.time.LocalDateTime; /** *

消息控制器

@@ -59,12 +59,12 @@ public class MessageController { * @return 消息列表 */ @GetMapping("/message/get") - public BaseResponse messageGet(@RequestParam(defaultValue = "1") Long page, - @RequestParam(defaultValue = "10") Long pageSize, - HttpServletRequest request, - @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate begin, - @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate end) { - log.info("请求接口[GET]:/message/get"); + public BaseResponse messageGet( + @RequestParam(required = false, defaultValue = "1") Integer page, + @RequestParam(required = false, defaultValue = "10") Integer pageSize, + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime begin, + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime end, + HttpServletRequest request) { String token = request.getHeader("Authorization").replace("Bearer ", ""); Long uid = JwtUtil.getUserId(token); if (uid == null) { @@ -74,33 +74,17 @@ public class MessageController { } } - /** - * 获取所有消息列表 - * - * @param page 页码 - * @param pageSize 每页条数 - * @param request 请求对象 - * @param begin 开始日期 - * @param end 结束日期 - * @param uid 用户id - * @return 消息列表 - */ - @GetMapping("/message/get/all") - public BaseResponse messageGetAll(@RequestParam(defaultValue = "1") Long page, - @RequestParam(defaultValue = "10") Long pageSize, - HttpServletRequest request, - @RequestParam Long uid, - @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate begin, - @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate end) { - log.info("请求接口[GET]:/message/get/all"); + @GetMapping("/message/get/id") + public BaseResponse messageGetById( + @RequestParam Long id, + HttpServletRequest request) { String token = request.getHeader("Authorization").replace("Bearer ", ""); - Long loginId = JwtUtil.getUserId(token); - if (loginId == null) { + Long uid = JwtUtil.getUserId(token); + if (uid == null) { return ResultUtil.error(ErrorCode.USER_NOT_EXIST); } else { - return messageService.messageGetAll(request, begin, end, page, pageSize, loginId, uid); + return messageService.messageGetById(id, uid); } } - } diff --git a/src/main/java/com/jsl/oa/controllers/ModuleController.java b/src/main/java/com/jsl/oa/controllers/ModuleController.java index 0e9c914..ccb27ba 100644 --- a/src/main/java/com/jsl/oa/controllers/ModuleController.java +++ b/src/main/java/com/jsl/oa/controllers/ModuleController.java @@ -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); } diff --git a/src/main/java/com/jsl/oa/controllers/NewsController.java b/src/main/java/com/jsl/oa/controllers/NewsController.java index 17f7992..46a24a6 100644 --- a/src/main/java/com/jsl/oa/controllers/NewsController.java +++ b/src/main/java/com/jsl/oa/controllers/NewsController.java @@ -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)); diff --git a/src/main/java/com/jsl/oa/controllers/PermissionController.java b/src/main/java/com/jsl/oa/controllers/PermissionController.java index 2c003b4..1a4de33 100755 --- a/src/main/java/com/jsl/oa/controllers/PermissionController.java +++ b/src/main/java/com/jsl/oa/controllers/PermissionController.java @@ -1,16 +1,14 @@ package com.jsl.oa.controllers; -import com.jsl.oa.model.vodata.PermissionEditVO; import com.jsl.oa.services.PermissionService; 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.springframework.validation.BindingResult; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; @@ -30,25 +28,6 @@ public class PermissionController { */ private final PermissionService permissionService; - /** - * 添加新的权限。 - * - * @param request HTTP请求对象。 - * @param rid 角色ID。 - * @param pid 权限ID。 - * @return {@link BaseResponse} 对象,包含操作结果。 - */ - @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); - } else { - return permissionService.permissionAdd(request, rid, pid); - } - } - /** * 获取当前用户的权限信息。 * @@ -58,7 +37,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,43 +53,6 @@ public class PermissionController { */ @GetMapping("/permission/get") public BaseResponse permissionGet(HttpServletRequest request) { - log.info("请求接口[GET]: /permission/get"); return permissionService.permissionGet(request); } - - /** - * 编辑权限信息。 - * - * @param permissionEditVo {@link PermissionEditVO} 对象,包含更新后的权限信息。 - * @param bindingResult Binding结果对象,包含任何验证错误。 - * @param request HTTP请求对象。 - * @return {@link BaseResponse} 对象,包含操作结果。 - */ - @PutMapping("/permission/edit") - public BaseResponse permissionEdit(@RequestBody @Validated PermissionEditVO permissionEditVo, BindingResult bindingResult, HttpServletRequest request) { - log.info("请求接口[PUT]: /permission/edit"); - // 判断是否有参数错误 - if (bindingResult.hasErrors()) { - return ResultUtil.error(ErrorCode.REQUEST_BODY_ERROR, Processing.getValidatedErrorList(bindingResult)); - } - return permissionService.permissionEdit(permissionEditVo, request); - } - - /** - * 删除权限。 - * - * @param pid 权限ID。 - * @param request HTTP请求对象。 - * @return {@link BaseResponse} 对象,包含操作结果。 - */ - @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); - } else { - return permissionService.permissionDelete(request, pid); - } - } } diff --git a/src/main/java/com/jsl/oa/controllers/ProjectController.java b/src/main/java/com/jsl/oa/controllers/ProjectController.java index 1e537f4..2205185 100755 --- a/src/main/java/com/jsl/oa/controllers/ProjectController.java +++ b/src/main/java/com/jsl/oa/controllers/ProjectController.java @@ -1,8 +1,7 @@ package com.jsl.oa.controllers; -import com.jsl.oa.model.vodata.ProjectCuttingAddVO; -import com.jsl.oa.model.vodata.ProjectCuttingEditVO; import com.jsl.oa.model.vodata.ProjectEditVO; +import com.jsl.oa.model.vodata.ProjectInfoVO; import com.jsl.oa.model.vodata.ProjectWorkVO; import com.jsl.oa.model.vodata.business.info.ProjectShowVO; import com.jsl.oa.services.ProjectService; @@ -47,21 +46,12 @@ 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} - */ - @GetMapping("/project/get/id") - public BaseResponse projectGetById(@RequestParam Integer id) { - return projectService.getById(id); - } /** - * @param id 获取项目 id + * @param id 要查询的 id * @return {@link BaseResponse} */ @GetMapping("/project/getwork/id") @@ -69,52 +59,66 @@ public class ProjectController { return projectService.getWorkById(id); } + /** + * @param id 要查询项目的 id + * @return {@link BaseResponse} + */ + @GetMapping("/project/get/id") + public BaseResponse projectGetById(@RequestParam Integer id) { + return projectService.getById(id); + } + /** * 游客获取项目 * * @return {@link BaseResponse} */ @GetMapping("/project/get/custom") - public BaseResponse projectGetCustom(@RequestParam(required = false) Integer id, - @RequestParam(required = false) List tags, - @RequestParam(required = false) List isFinish, - @RequestParam(required = false, defaultValue = "1") Integer page, - @RequestParam(required = false, defaultValue = "10") Integer pageSize) { - log.info("请求接口[GET]: /project/all/get"); - return projectService.tget(id, tags, isFinish, page, pageSize); + public BaseResponse projectGetCustom( + @RequestParam(required = false) List tags, + @RequestParam(required = false) List isFinish, + @RequestParam(required = false, defaultValue = "1") Integer page, + @RequestParam(required = false, defaultValue = "10") Integer pageSize + ) { + return projectService.tGet(tags, isFinish, page, pageSize); } /** - * 我负责的界面的获取项目 + * 根据项目 id 获取项目详细信息 + *
+ * 根据项目 id 获取项目的详细信息,在地址后面有 projectId 的 path 部分需要补充完整(不可缺少) * + * @param projectId 项目 id + * @param request 请求 * @return {@link BaseResponse} */ - @GetMapping("/project/get") - public BaseResponse projectGet(@RequestParam(required = false) Integer listAll, - @RequestParam(required = false) List tags, - @RequestParam(required = false) List 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(listAll, 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)); } /** - * 我管理的查询 + * 我管理的页面的项目查询 * * @return {@link BaseResponse} */ - @GetMapping("/project/work/get") - public BaseResponse projectWorkGet(@RequestParam(required = false) Integer listAll, - @RequestParam(required = false) List tags, - @RequestParam(required = false) List 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"); - return projectService.workget(listAll, request, tags, isFinish, is, page, pageSize); + @GetMapping("/project/child/get") + public BaseResponse projectWorkGet( + @RequestParam(required = false) List tags, + @RequestParam(required = false) List 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); } /** @@ -126,7 +130,6 @@ public class ProjectController { */ @GetMapping("/project/header") public BaseResponse projectGetByName(@RequestParam String name) { - log.info("请求接口[GET]: /project/header"); return projectService.getByName(name); } @@ -140,8 +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)); @@ -160,8 +166,12 @@ public class ProjectController { * @return {@link BaseResponse} */ @PutMapping("/project/header/edit/{projectId}") - public BaseResponse projectEditById(@RequestParam Long projectId, HttpServletRequest request, @RequestBody @Validated ProjectEditVO projectEdit, @NotNull BindingResult bindingResult) { - 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)); @@ -177,13 +187,39 @@ 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)); } - return projectService.projecWorktAdd(request, projectWorkVO); + return projectService.projectWorkAdd(request, projectWorkVO); + } + + + /** + * 项目添加 + * + * @param request 请求 + * @param projectInfoVO 项目信息 + * @param bindingResult 参数校验 + * @return {@link BaseResponse} + */ + + @PostMapping("/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)); + } + return ResultUtil.success(projectService.projectAdd(request, projectInfoVO)); } /** @@ -196,39 +232,6 @@ public class ProjectController { return projectService.projectPrincipalGet(); } - /** - * 用户获取所分到的项目模块 - * - * @param uid 用户 id - * @return {@link BaseResponse} - */ - @GetMapping("/project/cut/user") - public BaseResponse projectGetUserInCutting(@RequestParam Long uid) { - log.info("请求接口[GET]: /project/cut/user"); - // 判断是否有参数错误 - if (uid == null) { - return ResultUtil.error(ErrorCode.PARAMETER_ERROR); - } - return projectService.projectGetUserInCutting(uid); - } - - /** - * 给某用户分配项目模块 - * - * @param uid 用户 id - * @param pid 项目 id - * @return {@link BaseResponse} - */ - @PostMapping("/project/cut/user/add") - public BaseResponse projectAddUserForCutting(HttpServletRequest request, @RequestParam Long uid, @RequestParam Long pid) { - log.info("请求接口[Post]: /project/cut/user/add"); - // 判断是否有参数错误 - if (uid == null || pid == null) { - return ResultUtil.error(ErrorCode.PARAMETER_ERROR); - } - return projectService.projectAddUserForCutting(request, uid, pid); - } - /** * 删除某项目记录 * @@ -237,57 +240,14 @@ public class ProjectController { */ @DeleteMapping("/project/delete") public BaseResponse projectDelete(HttpServletRequest request, @RequestParam List id) { - log.info("请求接口[Delete]: /project/delete"); if (id == null) { return ResultUtil.error(ErrorCode.PARAMETER_ERROR); } return projectService.projectDelete(request, id); } - /** - * 项目轮播图 - * - * @param request 请求 - * @param projectCuttingAddVO 项目轮播图信息 - * @param bindingResult 参数校验 - * @return {@link BaseResponse} - */ - @PostMapping("/project/cut/add") - public BaseResponse projectCuttingAdd(HttpServletRequest request, @RequestBody @Validated ProjectCuttingAddVO projectCuttingAddVO, @NotNull BindingResult bindingResult) { - log.info("请求接口[Post]: /project/cut/add"); - // 判断是否有参数错误 - if (bindingResult.hasErrors()) { - return ResultUtil.error(ErrorCode.REQUEST_BODY_ERROR, Processing.getValidatedErrorList(bindingResult)); - } - return projectService.addProjectCutting(request, projectCuttingAddVO); - } - - - @PutMapping("/project/cut/edit") - public BaseResponse projectCuttingEdit(HttpServletRequest request, @RequestBody @Validated ProjectCuttingEditVO projectCuttingEditVO, @NotNull BindingResult bindingResult) { - log.info("请求接口[Put]: /project/cut/edit"); - // 判断是否有参数错误 - if (bindingResult.hasErrors()) { - return ResultUtil.error(ErrorCode.REQUEST_BODY_ERROR, Processing.getValidatedErrorList(bindingResult)); - } - return projectService.editProjectCutting(request, projectCuttingEditVO); - } - - @PutMapping("/project/cut/user/to") - public BaseResponse projectToOtherUserForCutting(HttpServletRequest request, @RequestParam Long oldUid - , @RequestParam Long pid, @RequestParam Long newUid) { - log.info("请求接口[Put]: /project/cut/user/to"); - // 判断是否有参数错误 - if (oldUid == null || pid == null || newUid == null) { - return ResultUtil.error(ErrorCode.REQUEST_BODY_ERROR); - } - return projectService.projectToOtherUserForCutting(request, oldUid, pid, newUid); - } - - @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); diff --git a/src/main/java/com/jsl/oa/controllers/ReviewController.java b/src/main/java/com/jsl/oa/controllers/ReviewController.java new file mode 100644 index 0000000..563249d --- /dev/null +++ b/src/main/java/com/jsl/oa/controllers/ReviewController.java @@ -0,0 +1,105 @@ +package com.jsl.oa.controllers; + +import com.jsl.oa.model.vodata.ReviewAddVO; +import com.jsl.oa.model.vodata.ReviewUpdateResultVO; +import com.jsl.oa.services.ReviewService; +import com.jsl.oa.utils.BaseResponse; +import com.jsl.oa.utils.ErrorCode; +import com.jsl.oa.utils.ResultUtil; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletRequest; +import javax.validation.constraints.NotNull; + +/** + * 审核控制器 + * + * @author xiangZr-hhh + * @version 1.1.0 + * @since 1.1.0 + */ +@Slf4j +@RestController +@RequiredArgsConstructor +public class ReviewController { + + // 审核服务 + private final ReviewService reviewService; + + /** + * @Description: 获取审核记录列表 + * @Date: 2024/4/11 + * @Param request: + **/ + @GetMapping("/review/getReviewRecords") + public BaseResponse getUserReviewRecords( + @RequestParam Integer page, + @RequestParam Integer pageSize, + HttpServletRequest request) { + log.info("请求接口[GET]: /review/getMyReview"); + return reviewService.getUserReview(page, pageSize, request); + } + + + /** + * @Description: 获取我的审核数据 + * @Date: 2024/4/12 + * @Param request: + **/ + @GetMapping("/review/getMyReview") + public BaseResponse getMyReview(@RequestParam Integer page, + @RequestParam Integer pageSize, + HttpServletRequest request) { + return reviewService.getUserPendingApprovalReview(page, pageSize, request); + } + + + /** + * @Description: 新增审核申请 + * @Date: 2024/4/12 + * @Param null: + **/ + @PostMapping("/review/add") + public BaseResponse addReview(@RequestBody @Validated ReviewAddVO reviewAddVO, + @NotNull BindingResult bindingResult, + HttpServletRequest request) { + log.info("请求接口[POST]: /review/add"); + + if (bindingResult.hasErrors()) { + return ResultUtil.error(ErrorCode.REQUEST_BODY_ERROR); + } + + return reviewService.addReview(reviewAddVO, request); + } + + + @PutMapping("/review/updateReview") + public BaseResponse updateReview(@RequestBody @Validated ReviewUpdateResultVO reviewUpdateResultVOVO, + @NotNull BindingResult bindingResult, + HttpServletRequest request) { + log.info("请求接口[PUT]: /review/updateReview"); + + if (bindingResult.hasErrors()) { + return ResultUtil.error(ErrorCode.REQUEST_BODY_ERROR); + } + + return reviewService.updateReviewResult(reviewUpdateResultVOVO, request); + } + + + @GetMapping("/review/search") + public BaseResponse searchReview(String content, + Short statue, + HttpServletRequest request, + @RequestParam Integer page, + @RequestParam Integer pageSize) { + log.info("请求接口[GET]: /review/search"); + return reviewService.searchReview(content, statue, request, page, pageSize); + } +} + + diff --git a/src/main/java/com/jsl/oa/controllers/RoleController.java b/src/main/java/com/jsl/oa/controllers/RoleController.java index 43fe0bc..1d9b3fb 100755 --- a/src/main/java/com/jsl/oa/controllers/RoleController.java +++ b/src/main/java/com/jsl/oa/controllers/RoleController.java @@ -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); } @@ -58,8 +57,11 @@ public class RoleController { * @return {@link BaseResponse} */ @PutMapping("/role/edit") - public BaseResponse roleEdit(HttpServletRequest request, @RequestBody @Validated RoleEditVO roleEditVO, @NotNull BindingResult bindingResult) { - log.info("请求接口[PUT]: /role/edit"); + public BaseResponse roleEdit( + @RequestBody @Validated RoleEditVO roleEditVO, + @NotNull BindingResult bindingResult, + HttpServletRequest request + ) { // 判断是否有参数错误 if (bindingResult.hasErrors()) { return ResultUtil.error(ErrorCode.REQUEST_BODY_ERROR, Processing.getValidatedErrorList(bindingResult)); @@ -78,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); @@ -89,11 +90,10 @@ public class RoleController { /** * 用户权限授予 * - * @return + * @return baseResponse */ @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); @@ -104,11 +104,10 @@ public class RoleController { /** * 用户权限删除 * - * @return + * @return baseResponse */ @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); @@ -116,16 +115,17 @@ public class RoleController { return roleService.roleRemoveUser(request, uid); } - /** - * @Description: 添加用户权限 - * @Date: 2024/1/19 - * @Param request: - * @Param uid: - **/ + *

角色添加

+ *
+ * 角色添加接口 + */ @PostMapping("role/add") - public BaseResponse addRole(HttpServletRequest request, @RequestBody @Validated RoleAddVo roleAddVO, @NotNull BindingResult bindingResult) throws ClassCopyException { - log.info("请求接口[POST]: /role/add"); + public BaseResponse addRole( + @RequestBody @Validated RoleAddVo roleAddVO, + @NotNull BindingResult bindingResult, + HttpServletRequest request + ) throws ClassCopyException { // 判断是否有参数错误 if (bindingResult.hasErrors()) { return ResultUtil.error(ErrorCode.REQUEST_BODY_ERROR, Processing.getValidatedErrorList(bindingResult)); @@ -133,17 +133,13 @@ public class RoleController { return roleService.addRole(request, roleAddVO); } - /** - * @Description: 改变用户角色权限信息 - * @Date: 2024/1/20 - * @Param request: - * @Param uid: 用户id - * @Param rid: 角色id - **/ + *

角色用户修改

+ *
+ * 角色用户修改接口 + */ @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); diff --git a/src/main/java/com/jsl/oa/controllers/TagController.java b/src/main/java/com/jsl/oa/controllers/TagController.java index bbc7a62..b65d4e3 100644 --- a/src/main/java/com/jsl/oa/controllers/TagController.java +++ b/src/main/java/com/jsl/oa/controllers/TagController.java @@ -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"; diff --git a/src/main/java/com/jsl/oa/controllers/UserController.java b/src/main/java/com/jsl/oa/controllers/UserController.java index c53b4f7..e5dbd21 100644 --- a/src/main/java/com/jsl/oa/controllers/UserController.java +++ b/src/main/java/com/jsl/oa/controllers/UserController.java @@ -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); @@ -77,8 +75,10 @@ public class UserController { * @return {@link BaseResponse} */ @PutMapping("/user/profile/edit") - public BaseResponse userEditProfile(@RequestBody @Validated UserEditProfileVO userEditProfileVO, BindingResult bindingResult) { - log.info("请求接口[PUT]: /user/profile/edit"); + public BaseResponse userEditProfile( + @RequestBody @Validated UserEditProfileVO userEditProfileVO, + BindingResult bindingResult + ) { // 判断是否有参数错误 if (bindingResult.hasErrors()) { return ResultUtil.error(ErrorCode.REQUEST_BODY_ERROR, Processing.getValidatedErrorList(bindingResult)); @@ -100,8 +100,13 @@ public class UserController { * @return {@link BaseResponse} */ @GetMapping("/user/current") - public BaseResponse userCurrent(HttpServletRequest request, @RequestParam @Nullable String id, @RequestParam @Nullable String username, @RequestParam @Nullable String email, @RequestParam @Nullable String phone) { - log.info("请求接口[GET]: /user/current"); + public BaseResponse userCurrent( + @RequestParam @Nullable String id, + @RequestParam @Nullable String username, + @RequestParam @Nullable String email, + @RequestParam @Nullable String phone, + @NotNull HttpServletRequest request + ) { // 检查数据是否有问题 if (id != null && !id.isEmpty()) { if (!Pattern.matches("^[0-9]+$", id)) { @@ -119,7 +124,10 @@ public class UserController { } } if (phone != null && !phone.isEmpty()) { - 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}$", phone)) { + 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}$", + phone + )) { return ResultUtil.error(ErrorCode.PARAMETER_ERROR, "手机格式不正确"); } } @@ -136,9 +144,11 @@ public class UserController { * @return {@link BaseResponse} */ @PostMapping("/user/current/all") - public BaseResponse userCurrentAll(@RequestBody @Validated UserAllCurrentVO userAllCurrentVO, - HttpServletRequest request, @NotNull BindingResult bindingResult) { - log.info("请求接口[POST]: /user/current/all"); + public BaseResponse userCurrentAll( + @RequestBody @Validated UserAllCurrentVO userAllCurrentVO, + @NotNull BindingResult bindingResult, + HttpServletRequest request + ) { // 判断是否有参数错误 if (bindingResult.hasErrors()) { return ResultUtil.error(ErrorCode.REQUEST_BODY_ERROR, Processing.getValidatedErrorList(bindingResult)); @@ -154,8 +164,11 @@ public class UserController { * @Param bindingResult: **/ @PostMapping("/user/add") - public BaseResponse userAdd(@RequestBody @Validated UserAddVO userAddVo, BindingResult bindingResult, HttpServletRequest request) { - log.info("请求接口[POST]: /user/add"); + public BaseResponse userAdd( + @RequestBody @Validated UserAddVO userAddVo, + BindingResult bindingResult, + HttpServletRequest request + ) { // 判断是否有参数错误 if (bindingResult.hasErrors()) { return ResultUtil.error(ErrorCode.REQUEST_BODY_ERROR, Processing.getValidatedErrorList(bindingResult)); @@ -170,8 +183,11 @@ public class UserController { * @Param bindingResult: **/ @PutMapping("/user/edit") - public BaseResponse userEdit(@RequestBody @Validated UserEditVO userEditVO, BindingResult bindingResult, HttpServletRequest request) { - log.info("请求接口[PUT]: /user/edit"); + public BaseResponse userEdit( + @RequestBody @Validated UserEditVO userEditVO, + BindingResult bindingResult, + HttpServletRequest request + ) { // 判断是否有参数错误 if (bindingResult.hasErrors()) { return ResultUtil.error(ErrorCode.REQUEST_BODY_ERROR, Processing.getValidatedErrorList(bindingResult)); @@ -182,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); } diff --git a/src/main/java/com/jsl/oa/dao/InfoDAO.java b/src/main/java/com/jsl/oa/dao/InfoDAO.java index 39e6840..a63c279 100644 --- a/src/main/java/com/jsl/oa/dao/InfoDAO.java +++ b/src/main/java/com/jsl/oa/dao/InfoDAO.java @@ -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); } } diff --git a/src/main/java/com/jsl/oa/dao/NewsDAO.java b/src/main/java/com/jsl/oa/dao/NewsDAO.java index e2550ae..d461d52 100644 --- a/src/main/java/com/jsl/oa/dao/NewsDAO.java +++ b/src/main/java/com/jsl/oa/dao/NewsDAO.java @@ -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); // 添加作者 diff --git a/src/main/java/com/jsl/oa/dao/PermissionDAO.java b/src/main/java/com/jsl/oa/dao/PermissionDAO.java index b1b4bf3..e03b62a 100644 --- a/src/main/java/com/jsl/oa/dao/PermissionDAO.java +++ b/src/main/java/com/jsl/oa/dao/PermissionDAO.java @@ -4,7 +4,9 @@ import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import com.jsl.oa.common.constant.BusinessConstants; import com.jsl.oa.mapper.PermissionMapper; +import com.jsl.oa.mapper.RoleMapper; import com.jsl.oa.model.dodata.PermissionDO; +import com.jsl.oa.model.dodata.RoleDO; import com.jsl.oa.utils.redis.RoleRedisUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -30,6 +32,7 @@ public class PermissionDAO { private final PermissionMapper permissionMapper; private final RoleRedisUtil roleRedisUtil; private final Gson gson; + private final RoleMapper roleMapper; /** *

获取用户权限信息

@@ -40,145 +43,41 @@ public class PermissionDAO { * @return {@link List} */ public List getPermission(@NotNull Long uid) { - log.info("\t> 执行 DAO 层 PermissionDAO.getPermission 方法"); + // 查询用户所在角色组 + RoleDO getRole = roleMapper.getRoleByUserId(uid); List getPermissionForString; String permissionRedisString = roleRedisUtil.getData(BusinessConstants.NONE, uid.toString()); if (permissionRedisString == null) { - log.info("\t\t> 从 MySQL 获取数据"); - List permissionList = permissionMapper.permissionUserPid(uid); - getPermissionForString = new ArrayList<>(); - forPermissionToBuildString(permissionList, getPermissionForString); + String permissionList = permissionMapper.getPermissionByRole(getRole.getRoleName()); + getPermissionForString = gson.fromJson(permissionList, new TypeToken>() { }.getType()); // 存入 Redis roleRedisUtil.setData(BusinessConstants.NONE, uid.toString(), gson.toJson(getPermissionForString), 1440); } else { - log.info("\t\t> 从 Redis 获取数据"); - getPermissionForString = gson.fromJson(permissionRedisString, new TypeToken>() {}.getType()); + getPermissionForString = gson.fromJson(permissionRedisString, new TypeToken>() { }.getType()); } return getPermissionForString; } public List getAllPermissionBuildString() { - log.info("\t> 执行 DAO 层 PermissionDAO.getPermission 方法"); - List getPermissionForString; + List getPermission; String getRedisData = roleRedisUtil.getData(BusinessConstants.ALL_PERMISSION, "string"); if (getRedisData == null) { - log.info("\t\t> 从 MySQL 获取数据"); + getPermission = new ArrayList<>(); List permissionList = permissionMapper.getAllPermission(); - permissionList.removeIf(it -> it.getPid() != null); - getPermissionForString = new ArrayList<>(); - forPermissionToBuildString(permissionList, getPermissionForString); + permissionList.forEach(it -> getPermission.add(it.getName())); // 存入 Redis - roleRedisUtil.setData(BusinessConstants.ALL_PERMISSION, "string", gson.toJson(getPermissionForString), 1440); + roleRedisUtil.setData( + BusinessConstants.ALL_PERMISSION, + "string", + gson.toJson(permissionList), + 1440); } else { - log.info("\t\t> 从 Redis 获取数据"); - getPermissionForString = gson.fromJson(getRedisData, new TypeToken>() {}.getType()); + getPermission = gson.fromJson(getRedisData, new TypeToken>() { }.getType()); } - return getPermissionForString; + return getPermission; } - public List getRootPermission() { - log.info("\t> 执行 DAO 层 PermissionDAO.getRootPermission 方法"); - String getRedisData = roleRedisUtil.getData(BusinessConstants.ALL_PERMISSION, "all"); - if (getRedisData == null) { - log.info("\t\t> 从 MySQL 获取数据"); - List permissionList = permissionMapper.getAllPermission(); - if (!permissionList.isEmpty()) { - List getPermissionList = new ArrayList<>(); - for (PermissionDO permission : permissionList) { - if (permission.getPid() == null) { - getPermissionList.add(permission); - } - } - roleRedisUtil.setData(BusinessConstants.ALL_PERMISSION, "all", gson.toJson(getPermissionList), 1440); - return getPermissionList; - } else { - return null; - } - } else { - log.info("\t\t> 从 Redis 获取数据"); - return gson.fromJson(getRedisData, new TypeToken>() { - }.getType()); - } - } - - /** - *

获取全部权限信息

- *
- * 获取全部权限信息 - * - * @param permissionList 权限信息 - * @param getPermissionForString 存储权限信息 - */ - private void forPermissionToBuildString(@NotNull List permissionList, List getPermissionForString) { - for (PermissionDO permission : permissionList) { - // 寻找是否存在父亲 - StringBuilder permissionString = new StringBuilder(); - if (permission.getPid() != null) { - // 存在父亲 - this.getFatherPermission(permissionString, permission.getPid()); - } else { - // 不存在父亲 - permissionString.append(permission.getName()); - } - // 寻找子类 - this.getChildPermission(permissionString, permission.getId(), getPermissionForString); - getPermissionForString.add(permissionString.toString()); - } - } - - /** - *

获取子类权限信息

- *
- * 通过父类 ID 获取子类权限信息
- * 递归调用 - * - * @param permissionString 父类权限信息 - * @param id 父类 ID - * @param getPermissionForString 存储权限信息 - */ - private void getChildPermission(StringBuilder permissionString, Long id, List getPermissionForString) { - // 获取子类权限信息 - List permissionList = permissionMapper.getChildPermission(id); - // 判断是否存在子类 - if (!permissionList.isEmpty()) { - // 存在子类 - for (PermissionDO permission : permissionList) { - StringBuilder childPermissionString = new StringBuilder(permissionString); - // 遍历数据检查是否依旧存在子类 - List childPermissionList = permissionMapper.getChildPermission(permission.getId()); - if (!childPermissionList.isEmpty()) { - // 存在子类 - permissionString.append(".").append(permission.getName()); - this.getChildPermission(permissionString, permission.getId(), getPermissionForString); - } else { - // 不存在子类 - permissionString.append(".").append(permission.getName()); - getPermissionForString.add(permissionString.toString()); - } - permissionString = childPermissionString; - } - } - } - - /** - *

获取父类权限信息

- *
- * 通过子类 ID 获取父类权限信息
- * 递归调用 - * - * @param permissionString 父类权限信息 - * @param pid 父类 ID - */ - public void getFatherPermission(StringBuilder permissionString, Long pid) { - // 获取权限信息 - PermissionDO permissionDO = permissionMapper.getPermissionById(pid); - // 判断是否存在父亲 - if (permissionDO.getPid() != null) { - // 存在父亲 - this.getFatherPermission(permissionString, permissionDO.getPid()); - } else { - // 不存在父亲 - permissionString.append(permissionDO.getCode()); - } + public List getAllPermission() { + return permissionMapper.getAllPermission(); } } diff --git a/src/main/java/com/jsl/oa/dao/ProjectDAO.java b/src/main/java/com/jsl/oa/dao/ProjectDAO.java index 1c24af8..80a6007 100644 --- a/src/main/java/com/jsl/oa/dao/ProjectDAO.java +++ b/src/main/java/com/jsl/oa/dao/ProjectDAO.java @@ -1,11 +1,9 @@ package com.jsl.oa.dao; - import com.google.gson.Gson; import com.jsl.oa.mapper.ProjectMapper; -import com.jsl.oa.model.dodata.ProjectCuttingDO; +import com.jsl.oa.model.dodata.ProjectChildDO; import com.jsl.oa.model.dodata.ProjectDO; -import com.jsl.oa.model.dodata.ProjectUserDO; -import com.jsl.oa.model.dodata.ProjectWorkDO; +import com.jsl.oa.model.dodata.ProjectModuleDO; import com.jsl.oa.model.dodata.info.ProjectShowDO; import com.jsl.oa.model.vodata.ProjectEditVO; import com.jsl.oa.model.vodata.ProjectInfoVO; @@ -34,12 +32,11 @@ public class ProjectDAO { log.info("\t> 执行 DAO 层 ProjectDAO.projectAdd 方法"); log.info("\t\t> 从 MySQL 获取数据"); - projectMapper.projectAdd(projectAdd); } public void projectWorkAdd(ProjectWorkVO projectWorkVO) { - log.info("\t> 执行 DAO 层 ProjectDAO.projecWorktAdd 方法"); + log.info("\t> 执行 DAO 层 ProjectDAO.projectWorkAdd 方法"); log.info("\t\t> 从 MySQL 获取数据"); projectMapper.projectWorkAdd(projectWorkVO); } @@ -61,18 +58,6 @@ public class ProjectDAO { return projectMapper.getProjectById(id) != null; } - public List projectGetUserInCutting(Long uid) { - log.info("\t> 执行 DAO 层 ProjectDAO.projectGetUserInCutting 方法"); - log.info("\t\t> 从 MySQL 获取数据"); - return projectMapper.projectGetUserInCutting(uid); - } - - public void projectAddUserForCutting(Long uid, Long pid) { - log.info("\t> 执行 DAO 层 ProjectDAO.projectAddUserForCutting 方法"); - log.info("\t\t> 从 MySQL 获取数据"); - projectMapper.projectAddUserInCutting(uid, pid); - } - public ProjectShowDO getHeader() { log.info("\t> 执行 DAO 层 ProjectDAO.getHeader 方法"); log.info("\t\t> 从 MySQL 获取数据"); @@ -102,11 +87,13 @@ public class ProjectDAO { for (int i = 0; i < projectShowDO.getData().size(); i++) { for (int j = 0; j < projectShowDO.getData().size(); j++) { if ("desc".equals(projectShowDO.getOrder())) { - if (projectShowDO.getData().get(i).getDisplayOrder() > projectShowDO.getData().get(j).getDisplayOrder()) { + if (projectShowDO.getData().get(i).getDisplayOrder() + > projectShowDO.getData().get(j).getDisplayOrder()) { Collections.swap(projectShowDO.getData(), i, j); } } else { - if (projectShowDO.getData().get(i).getDisplayOrder() < projectShowDO.getData().get(j).getDisplayOrder()) { + if (projectShowDO.getData().get(i).getDisplayOrder() + < projectShowDO.getData().get(j).getDisplayOrder()) { Collections.swap(projectShowDO.getData(), i, j); } } @@ -129,7 +116,7 @@ public class ProjectDAO { return projectMapper.getProjectById(id); } - public List get(Long userId, Integer listAll, List tags, List isFinish) { + public List get(Long userId, List tags, List isFinish) { log.info("\t> 执行 DAO 层 ProjectDAO.get 方法"); log.info("\t\t> 从 MySQL 获取数据"); if (tags != null && !tags.isEmpty()) { @@ -142,15 +129,12 @@ public class ProjectDAO { return projectMapper.getByIsfinish(userId, isFinish); } - if (listAll == 0) { - return projectMapper.get(userId); - } else { - return projectMapper.get1(userId); - } + return projectMapper.get(userId); + } - public List workget(Long userId, Integer listAll, List tags, List isFinish, Integer is) { - log.info("\t> 执行 DAO 层 ProjectDAO.workget 方法"); + public List workget(Long userId, List tags, List isFinish, Integer is) { + log.info("\t> 执行 DAO 层 ProjectDAO.workGet 方法"); log.info("\t\t> 从 MySQL 获取数据"); if (tags != null && !tags.isEmpty()) { return projectMapper.workgetByTags(userId, tags, is, isFinish); @@ -159,12 +143,8 @@ public class ProjectDAO { if (isFinish != null && !isFinish.isEmpty()) { return projectMapper.workgetByIsfinish(userId, isFinish, is); } + return projectMapper.workget(userId, is); - if (listAll == 0) { - return projectMapper.workget(userId, is); - } else { - return projectMapper.workget1(userId, is); - } } public ProjectDO getByName(String name) { @@ -179,46 +159,12 @@ public class ProjectDAO { return projectMapper.deleteProject(id); } - public void projectCuttingAdd(ProjectCuttingDO projectCuttingDO) { - log.info("\t> 执行 DAO 层 ProjectDAO.projectCuttingAdd 方法"); - log.info("\t\t> 从 MySQL 获取数据"); - projectMapper.projectCuttingAdd(projectCuttingDO); - } - public boolean isExistProjectById(Long id) { log.info("\t> 执行 DAO 层 ProjectDAO.isExistProjectById 方法"); log.info("\t\t> 从 MySQL 获取数据"); return projectMapper.getProjectById(id) != null; } - public boolean updateProjectCutting(ProjectCuttingDO projectCuttingDO) { - log.info("\t> 执行 DAO 层 ProjectDAO.updateProjectCutting 方法"); - log.info("\t\t> 从 MySQL 获取数据"); - return projectMapper.projectCuttingUpdate(projectCuttingDO); - } - - public boolean isExistProjectCutting(Long id) { - log.info("\t> 执行 DAO 层 ProjectDAO.isExistProjectCutting 方法"); - log.info("\t\t> 从 MySQL 获取数据"); - return projectMapper.getProjectCuttingById(id) != null; - } - - public boolean isExistProjectUser(Long pid, Long uid) { - log.info("\t> 执行 DAO 层 ProjectDAO.isExistProjectUse 方法"); - log.info("\t\t> 从 MySQL 获取数据"); - return projectMapper.getProjectUserByPidAndUid(pid, uid) != null; - } - - public boolean updateUserForProjectUserByPidAndUid(Long pid, Long oldUid, Long newUid) { - log.info("\t> 执行 DAO 层 ProjectDAO.updateUserForProjectUserByPidAndUid 方法"); - log.info("\t\t> 从 MySQL 获取数据"); - ProjectUserDO projectUserDO = projectMapper.getProjectUserByPidAndUid(pid, oldUid); - if (projectUserDO == null) { - return false; - } - log.info("\t\t> 从 MySQL 更新数据"); - return projectMapper.updateUserForProjectUser(newUid, projectUserDO.getId()); - } public boolean isPrincipalUser(Long uid, Long projectId) { log.info("\t> 执行 DAO 层 ProjectDAO.isPrincipalUser 方法"); @@ -228,7 +174,7 @@ public class ProjectDAO { } - public List tget(Integer id, List isFinish, List tags) { + public List tget(List isFinish, List tags) { log.info("DAO层tget"); if (tags != null && !tags.isEmpty()) { @@ -238,13 +184,29 @@ public class ProjectDAO { if (isFinish != null && !isFinish.isEmpty()) { return projectMapper.tgetByIsfinish(isFinish); } - - return projectMapper.tget(id); + return projectMapper.getAllProject(); } - public ProjectWorkDO getProjectWorkerById(Long id) { + public ProjectModuleDO getProjectWorkerById(Long id) { return projectMapper.getProjectWorkById(id); } + public List getProjectByPrincipalUser(Long uid) { + log.info("\t> 执行 DAO 层 ProjectDAO.getProjectFromUser 方法"); + log.info("\t\t> 从 MySQL 获取数据"); + return projectMapper.getAllProjectByUserId(uid); + } + + public List getAllProjectChildByUId(Long uid) { + log.info("\t> 执行 DAO 层 ProjectDAO.getAllProjectChildByUId 方法"); + log.info("\t\t> 从 MySQL 获取数据"); + return projectMapper.getAllChildProjectByUserId(uid); + } + + public List getAllModuleByUId(Long uid) { + log.info("\t> 执行 DAO 层 ProjectDAO.getAllModuleByUId 方法"); + log.info("\t\t> 从 MySQL 获取数据"); + return projectMapper.getAllModuleByUserId(uid); + } } diff --git a/src/main/java/com/jsl/oa/dao/ReviewDAO.java b/src/main/java/com/jsl/oa/dao/ReviewDAO.java new file mode 100644 index 0000000..012825b --- /dev/null +++ b/src/main/java/com/jsl/oa/dao/ReviewDAO.java @@ -0,0 +1,90 @@ +package com.jsl.oa.dao; + + +import com.jsl.oa.mapper.ProjectMapper; +import com.jsl.oa.mapper.ReviewMapper; +import com.jsl.oa.model.dodata.ReviewDO; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * ReviewDAO + *
+ * 用于处理审核相关的请求, 包括获取审核列表、编辑审核信息等 + * + * @author zrx_hhh + * @version v1.0.0 + * @since v1.0.0-SNAPSHOT + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class ReviewDAO { + + private final ReviewMapper reviewMapper; + private final ProjectMapper projectMapper; + + + public List selectAllReviewFromProject(Long projectId) { + return reviewMapper.selectAllReviewFromProject(projectId); + } + + public List selectApprovedResultReviewFromProject(Long projectId, + short result) { + return reviewMapper.selectApprovedResultReviewFromProject(projectId, + result); + } + + public List selectReviewFromSubsystem(Long subsystemId) { + return reviewMapper.selectReviewFromSubsystem(subsystemId); + } + + public List selectApprovedResultReviewsFromSubsystem(Long subsystemId, + short result) { + return reviewMapper.selectApprovedResultReviewsFromSubsystem(subsystemId, + result); + } + + public List selectReviewFromSubmodule(Long submoduleId) { + return reviewMapper.selectReviewFromSubmodule(submoduleId); + } + + public List selectApprovedResultReviewsFromSubModule(Long id, + short result) { + return reviewMapper.selectApprovedResultReviewFromModule(id, + result); + } + + + public void addReview(ReviewDO reviewDO) { + reviewMapper.addReview(reviewDO); + } + + public ReviewDO selectReviewById(Long id) { + return reviewMapper.selectReviewById(id); + } + + public void updateReview(ReviewDO reviewDO) { + reviewMapper.updateReview(reviewDO); + } + + + public String getNameByModule(Integer subId) { + + if (subId != null) { + return projectMapper.getModuleById(subId).getName(); + } + + if (subId == null) { + return "无"; + } + + return ""; + } + +} + + diff --git a/src/main/java/com/jsl/oa/dao/RoleDAO.java b/src/main/java/com/jsl/oa/dao/RoleDAO.java index aaf6a18..b4fe0b1 100644 --- a/src/main/java/com/jsl/oa/dao/RoleDAO.java +++ b/src/main/java/com/jsl/oa/dao/RoleDAO.java @@ -18,32 +18,30 @@ import java.util.List; @Component @RequiredArgsConstructor public class RoleDAO { - public final RoleMapper roleMapper; + private final RoleMapper roleMapper; private final Gson gson; private final RoleRedisUtil 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, uid.toString(), gson.toJson(roleMapper.getRoleUserByUid(uid)), 120); + roleRedisUtil.setData( + BusinessConstants.USER, + uid.toString(), + gson.toJson(roleMapper.getRoleUserByUid(uid)), + 120 + ); } 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 roleList = gson.fromJson(getRedisData, new TypeToken>() { }.getType()); for (RoleDO roleDO : roleList) { @@ -56,40 +54,25 @@ public class RoleDAO { } public List getRole() { - log.info("\t> 执行 DAO 层 RoleDAO.getRole 方法"); String getRedisData = roleRedisUtil.getData(BusinessConstants.NONE, "all"); if (getRedisData == null) { - log.info("\t\t> 从 MySQL 获取数据"); List 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>() { }.getType()); } } public void roleAdd(RoleDO roleDO) { - log.info("\t> 执行 DAO 层 RoleDAO.roleAdd 方法"); - log.info("\t\t> 从 MySQL 获取数据"); roleMapper.roleAdd(roleDO); List roleList = roleMapper.getRole(); roleRedisUtil.setData(BusinessConstants.NONE, "all", gson.toJson(roleList), 120); } - public RoleDO getRoleNameByUid(Long uid) { - log.info("\t> 执行 DAO 层 RoleDAO.getRoleNameByUid 方法"); - log.info("\t\t> 从 MySQL 获取数据"); - RoleDO roleDO = roleMapper.getRoleById(getRoleUserByUid(uid).getRid()); - return roleDO; - } - - public boolean roleEdit(RoleDO getRole) { - log.info("\t> 执行 DAO 层 RoleDAO.roleEdit 方法"); - log.info("\t\t> 从 MySQL 获取数据"); if (roleMapper.roleEdit(getRole)) { List roleList = roleMapper.getRole(); roleRedisUtil.setData(BusinessConstants.NONE, "all", gson.toJson(roleList), 1440); @@ -100,8 +83,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 roleList = roleMapper.getRole(); roleRedisUtil.setData(BusinessConstants.NONE, "all", gson.toJson(roleList), 1440); @@ -112,17 +93,18 @@ 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, uid.toString(), gson.toJson(roleMapper.getRoleUserByUid(uid)), 120); + roleRedisUtil.setData( + BusinessConstants.USER, + uid.toString(), + gson.toJson(roleMapper.getRoleUserByUid(uid)), + 120 + ); return true; } else { return false; @@ -130,14 +112,25 @@ 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); } } + + /** + * 根据角色名获取角色信息 + * + * @param roleName 角色名 + * @return 角色信息 + */ + public RoleDO getRoleByRoleName(String roleName) { + return roleMapper.getRoleByRoleName(roleName); + } + + public RoleDO getRoleByUserId(Long uid) { + return roleMapper.getRoleByUserId(uid); + } } diff --git a/src/main/java/com/jsl/oa/dao/TagDAO.java b/src/main/java/com/jsl/oa/dao/TagDAO.java index dba1861..c3b8e42 100644 --- a/src/main/java/com/jsl/oa/dao/TagDAO.java +++ b/src/main/java/com/jsl/oa/dao/TagDAO.java @@ -33,7 +33,6 @@ public class TagDAO { * @param order 排序 */ public ArrayList getTagsProjectList(Integer page, Integer limit, String order) { - log.info("[DAO] 请求 getTagsProjectList 接口"); // 获取标签列表 page = (page - 1) * limit; return (ArrayList) tagMapper.getTagsProjectList(order, limit, page); diff --git a/src/main/java/com/jsl/oa/dao/UserDAO.java b/src/main/java/com/jsl/oa/dao/UserDAO.java index 5ea8f50..a686cc7 100755 --- a/src/main/java/com/jsl/oa/dao/UserDAO.java +++ b/src/main/java/com/jsl/oa/dao/UserDAO.java @@ -34,7 +34,7 @@ import java.util.List; @RequiredArgsConstructor public class UserDAO { - public final UserMapper userMapper; + private final UserMapper userMapper; private final RoleDAO roleDAO; private final PermissionDAO permissionDAO; private final Gson gson; @@ -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,37 +110,31 @@ 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 userCurrentDO = userMapper.getAllUser(userAllCurrentVO); UserCurrentBackVO userCurrentBackVO = new UserCurrentBackVO(); userCurrentBackVO.setUsers(new ArrayList<>()) - .setCount(userMapper.getUsersCount()); - userCurrentDO.forEach(it -> userCurrentBackVO.getUsers().add(Processing.returnUserInfo(it, roleDAO, permissionDAO))); + .setCount(userMapper.getUsersCount()); + userCurrentDO.forEach(it -> userCurrentBackVO.getUsers() + .add(Processing.returnUserInfo(it, roleDAO, gson))); return userCurrentBackVO; } public UserCurrentBackVO userCurrentAllLike(UserAllCurrentVO userAllCurrentVO) { - log.info("\t> 执行 DAO 层 UserDAO.userCurrentAllLike 方法"); - log.info("\t\t> 从 MySQL 获取数据"); List userCurrentDO = userMapper.getAllUserBySearch(userAllCurrentVO); UserCurrentBackVO userCurrentBackVO = new UserCurrentBackVO(); userCurrentBackVO.setUsers(new ArrayList<>()) - .setCount(userMapper.getUsersCount()); - userCurrentDO.forEach(it -> userCurrentBackVO.getUsers().add(Processing.returnUserInfo(it, roleDAO, permissionDAO))); + .setCount(userMapper.getUsersCount()); + userCurrentDO.forEach(it -> userCurrentBackVO.getUsers() + .add(Processing.returnUserInfo(it, roleDAO, gson))); return userCurrentBackVO; } @@ -161,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); } @@ -179,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; } @@ -203,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); } @@ -215,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); } @@ -227,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; @@ -237,27 +210,19 @@ public class UserDAO { } - public List getRecommendUser(){ - log.info("\t> 执行 DAO 层 getRecommendUser 方法"); - log.info("\t\t> 从 MySQL 获取数据"); + public List getRecommendUser() { 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(); } } diff --git a/src/main/java/com/jsl/oa/exception/ProcessException.java b/src/main/java/com/jsl/oa/exception/ProcessException.java index bf35028..8fc0aee 100755 --- a/src/main/java/com/jsl/oa/exception/ProcessException.java +++ b/src/main/java/com/jsl/oa/exception/ProcessException.java @@ -1,5 +1,6 @@ package com.jsl.oa.exception; +import com.jsl.oa.exception.library.PermissionDeniedException; import com.jsl.oa.utils.BaseResponse; import com.jsl.oa.utils.ErrorCode; import com.jsl.oa.utils.ResultUtil; @@ -53,7 +54,8 @@ public class ProcessException { } @ExceptionHandler(value = MissingServletRequestParameterException.class) - public ResponseEntity businessMissingServletRequestParameterException(MissingServletRequestParameterException e) { + public ResponseEntity businessMissingServletRequestParameterException( + MissingServletRequestParameterException e) { log.error(e.getMessage(), e); return ResponseEntity .status(400) @@ -97,8 +99,15 @@ public class ProcessException { * @return {@link ResponseEntity} */ @ExceptionHandler(value = MethodArgumentTypeMismatchException.class) - public ResponseEntity businessMethodArgumentTypeMismatchException(@NotNull MethodArgumentTypeMismatchException e) { + public ResponseEntity businessMethodArgumentTypeMismatchException( + @NotNull MethodArgumentTypeMismatchException e) { log.error(e.getMessage(), e); return ResultUtil.error("ServerInternalError", 50002, "服务器内部错误"); } + + @ExceptionHandler(value = PermissionDeniedException.class) + public BaseResponse businessPermissionDeniedException(PermissionDeniedException e) { + log.warn("[EXCEPTION] 无权限操作,需要权限: {}", e.getNeedPermission()); + return ResultUtil.error("需要权限: " + e.getNeedPermission(), ErrorCode.PERMISSION_NOT_EXIST); + } } diff --git a/src/main/java/com/jsl/oa/exception/library/NotLoginException.java b/src/main/java/com/jsl/oa/exception/library/NotLoginException.java new file mode 100644 index 0000000..f1d95af --- /dev/null +++ b/src/main/java/com/jsl/oa/exception/library/NotLoginException.java @@ -0,0 +1,16 @@ +package com.jsl.oa.exception.library; + +/** + * 自定义异常类 + *
+ * 用于表示用户未登录的情况。 + * + * @since v1.2.0 + * @version v1.2.0 + * @author xiao_lfeng + */ +public class NotLoginException extends RuntimeException { + public NotLoginException(String message) { + super(message); + } +} diff --git a/src/main/java/com/jsl/oa/exception/library/PermissionDeniedException.java b/src/main/java/com/jsl/oa/exception/library/PermissionDeniedException.java new file mode 100644 index 0000000..a049c86 --- /dev/null +++ b/src/main/java/com/jsl/oa/exception/library/PermissionDeniedException.java @@ -0,0 +1,22 @@ +package com.jsl.oa.exception.library; + +import lombok.Getter; + +/** + * 自定义异常类 + *
+ * 用于权限拒绝的情况 + * + * @since v1.2.0 + * @version v1.2.0 + * @author xiao_lfeng + */ +@Getter +public class PermissionDeniedException extends RuntimeException { + private final String needPermission; + + public PermissionDeniedException(String message, String needPermission) { + super(message); + this.needPermission = needPermission; + } +} diff --git a/src/main/java/com/jsl/oa/exception/library/UserCanntUse.java b/src/main/java/com/jsl/oa/exception/library/UserCanntUse.java new file mode 100644 index 0000000..987f796 --- /dev/null +++ b/src/main/java/com/jsl/oa/exception/library/UserCanntUse.java @@ -0,0 +1,16 @@ +package com.jsl.oa.exception.library; + +/** + * 自定义异常类 + *
+ * 用于反馈用户被禁止使用的情况 + * + * @since v1.2.0 + * @version v1.2.0 + * @author xiao_lfeng + */ +public class UserCanntUse extends RuntimeException { + public UserCanntUse(String message) { + super(message); + } +} diff --git a/src/main/java/com/jsl/oa/mapper/MessageMapper.java b/src/main/java/com/jsl/oa/mapper/MessageMapper.java index 25896f9..be5fd13 100644 --- a/src/main/java/com/jsl/oa/mapper/MessageMapper.java +++ b/src/main/java/com/jsl/oa/mapper/MessageMapper.java @@ -1,11 +1,13 @@ package com.jsl.oa.mapper; import com.jsl.oa.model.dodata.MessageDO; +import com.jsl.oa.model.vodata.MessageAddVO; +import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update; -import java.time.LocalDate; +import java.time.LocalDateTime; import java.util.List; @@ -13,17 +15,18 @@ import java.util.List; public interface MessageMapper { @Update("UPDATE organize_oa.oa_message " - + "SET `read` = 1, deleted_at = CURRENT_TIMESTAMP " + + "SET `is_delete` = 1, deleted_at = CURRENT_TIMESTAMP " + "WHERE id = #{mid}") boolean deleteMessage(Long mid); @Select("SELECT * FROM organize_oa.oa_message where id = #{mid}") MessageDO getMessageById(Long mid); - @Select("select count(*) from organize_oa.oa_message where uid = #{uid}") - Long count(Long uid); + @Select("select * from organize_oa.oa_message where uid = #{uid} and is_delete = 0 " + + "and created_at between #{begin} and #{end}") + List page(LocalDateTime begin, LocalDateTime end, Long uid); - @Select("select * from organize_oa.oa_message where uid = #{uid}") - //and created_at between #{begin} and #{end} limit #{start},#{pageSize}") - List page(LocalDate begin, LocalDate end, Long uid, Long start, Long pageSize); + @Insert("insert into organize_oa.oa_message (uid, title, text, sid) " + + "values(#{uid},#{title},#{text},#{sid})") + void messageAdd(MessageAddVO messageAddVO); } diff --git a/src/main/java/com/jsl/oa/mapper/ModuleMapper.java b/src/main/java/com/jsl/oa/mapper/ModuleMapper.java index ae8caf6..4e5eee1 100644 --- a/src/main/java/com/jsl/oa/mapper/ModuleMapper.java +++ b/src/main/java/com/jsl/oa/mapper/ModuleMapper.java @@ -1,6 +1,6 @@ package com.jsl.oa.mapper; -import com.jsl.oa.model.dodata.ProjectWorkDO; +import com.jsl.oa.model.dodata.ProjectModuleDO; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select; @@ -12,9 +12,9 @@ public interface ModuleMapper { - List getByProjectId(Integer projectId, Long userId,int is); + List getByProjectId(Integer projectId, Long userId, int is); - List getBySysId(Integer sysId, Long userId,int is); + List getBySysId(Integer sysId, Long userId, int is); @Select("select principal_id from organize_oa.oa_project where id=#{projectId}") Long getPidByProjectid(Integer projectId); @@ -26,7 +26,7 @@ public interface ModuleMapper { void deleteMoudule(Long id); @Select("select * from organize_oa.oa_project_work where pid=#{id} and is_delete=0 and type=1 ") - List getAllMoudleByPid(Long id); + List getAllMoudleByPid(Long id); @Select("select principal_id from organize_oa.oa_project where id=(select project_id " + "from organize_oa.oa_project_work where oa_project_work.id = #{sysId})") diff --git a/src/main/java/com/jsl/oa/mapper/PermissionMapper.java b/src/main/java/com/jsl/oa/mapper/PermissionMapper.java index fd8604c..0587844 100644 --- a/src/main/java/com/jsl/oa/mapper/PermissionMapper.java +++ b/src/main/java/com/jsl/oa/mapper/PermissionMapper.java @@ -1,44 +1,17 @@ package com.jsl.oa.mapper; import com.jsl.oa.model.dodata.PermissionDO; -import com.jsl.oa.model.dodata.RolePermissionDO; -import org.apache.ibatis.annotations.*; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Select; import java.util.List; @Mapper public interface PermissionMapper { - @Insert("INSERT INTO organize_oa.oa_role_permissions(rid, pid) VALUE (#{rid},#{pid})") - void permissionAdd(Long rid, Long pid); - - @Select("SELECT * FROM organize_oa.oa_permissions WHERE id IN " + - "(SELECT pid FROM organize_oa.oa_role_permissions WHERE rid IN " + - "(SELECT rid FROM organize_oa.oa_role_user WHERE uid = #{uid}))") - List permissionUserPid(Long uid); - - @Select("SELECT * FROM organize_oa.oa_permissions where id=#{id}") - PermissionDO getPermissionById(Long id); - - @Select("SELECT * FROM organize_oa.oa_role_permissions where pid=#{pid}") - RolePermissionDO rolePermissionGetByPid(Long pid); - @Select("SELECT * FROM organize_oa.oa_permissions") List getAllPermission(); - @Update("UPDATE organize_oa.oa_permissions SET pid = #{pid}, name = #{name}, code = #{code}, " + - "type = #{type} WHERE id = #{id}") - boolean updatePermission(PermissionDO permissionDO); - - @Delete("DELETE FROM organize_oa.oa_permissions where id=#{pid}") - boolean deletePermission(Long pid); - - @Select("SELECT * FROM organize_oa.oa_permissions WHERE id IN (#{permissionList})") - List permissionGet(String permissionList); - - @Select("SELECT * FROM organize_oa.oa_permissions WHERE id = #{pid}") - PermissionDO getPermissionByPid(Long pid); - - @Select("SELECT * FROM organize_oa.oa_permissions WHERE pid = #{id}") - List getChildPermission(Long id); + @Select("SELECT permissions FROM organize_oa.oa_role WHERE role_name = #{roleName}") + String getPermissionByRole(String roleName); } diff --git a/src/main/java/com/jsl/oa/mapper/ProjectMapper.java b/src/main/java/com/jsl/oa/mapper/ProjectMapper.java index 5ba62c1..d365d14 100644 --- a/src/main/java/com/jsl/oa/mapper/ProjectMapper.java +++ b/src/main/java/com/jsl/oa/mapper/ProjectMapper.java @@ -1,9 +1,7 @@ package com.jsl.oa.mapper; - -import com.jsl.oa.model.dodata.ProjectCuttingDO; +import com.jsl.oa.model.dodata.ProjectChildDO; import com.jsl.oa.model.dodata.ProjectDO; -import com.jsl.oa.model.dodata.ProjectUserDO; -import com.jsl.oa.model.dodata.ProjectWorkDO; +import com.jsl.oa.model.dodata.ProjectModuleDO; import com.jsl.oa.model.vodata.ProjectInfoVO; import com.jsl.oa.model.vodata.ProjectWorkSimpleVO; import com.jsl.oa.model.vodata.ProjectWorkVO; @@ -12,22 +10,23 @@ import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update; +import java.time.LocalDateTime; import java.util.List; @Mapper public interface ProjectMapper { - @Insert("insert into organize_oa.oa_project " + - "(name, description, principal_id, cycle,file,complete_time," + - "deadline,status,is_finish,tags,work_load) " + - "value (#{name},#{description},#{principalId},#{cycle},#{file}" + - ",#{completeTime},#{deadline},#{status},#{isFinish},#{tags},#{workLoad})") + @Insert("insert into organize_oa.oa_project " + + "(name, description, principal_id, cycle,files,complete_time," + + "dead_line,status,tags,work_load) " + + "value (#{name},#{description},#{principalId},#{cycle},#{files}" + + ",#{completeTime},#{deadLine},#{status},#{tags},#{workLoad})") void projectAdd(ProjectInfoVO projectAdd); - @Insert("insert into organize_oa.oa_project_work (project_id, pid, name, principal_id," + - " work_load, description, cycle, complete_time, type, is_finish,status) " + - "value (#{projectId},#{pid},#{name},#{principalId},#{workLoad}," + - "#{description},#{cycle},#{completeTime},#{type},#{isFinish},#{status})") + @Insert("insert into organize_oa.oa_project_work (project_id, pid, name, principal_id," + + " work_load, description, cycle, complete_time, type, is_finish,status) " + + "value (#{projectId},#{pid},#{name},#{principalId},#{workLoad}," + + "#{description},#{cycle},#{completeTime},#{type},#{isFinish},#{status})") void projectWorkAdd(ProjectWorkVO projectWorkVO); void projectEdit(ProjectDO projectEdit); @@ -38,12 +37,8 @@ public interface ProjectMapper { @Select("select * from organize_oa.oa_project where id=#{id}") ProjectDO tgetProjectById(Integer id); - @Select("select * from organize_oa.oa_project_work where principal_id=#{uid}") - //"(select id from organize_oa.oa_project_work where id in)") - List projectGetUserInCutting(Long uid); - - @Insert("update organize_oa.oa_project_work set principal_id =#{uid} where id=#{pid}") - void projectAddUserInCutting(Long uid, Long pid); + @Select("select * from organize_oa.oa_project where is_delete=false") + List getAllProject(); @Select("select data from organize_oa.oa_config where value='project_show'") String getHeader(); @@ -51,18 +46,15 @@ public interface ProjectMapper { @Insert("insert into organize_oa.oa_config(value, data, created_at)value ('project_show',null,NOW())") void insertProjectShow(); - @Update("UPDATE organize_oa.oa_config SET data = #{setProjectShow}, updated_at = CURRENT_TIMESTAMP WHERE value = 'project_show'") + @Update("UPDATE organize_oa.oa_config SET data = #{setProjectShow}," + + " updated_at = CURRENT_TIMESTAMP WHERE value = 'project_show'") boolean setProjectShow(String setProjectShow); - //@Select("select * from organize_oa.oa_project where json_extract(tags,'$.tags')" + - //"like concat('%',#{tags},'%')") + List getByIsfinish(Long userId, List isFinish); - //@Select("select * from organize_oa.oa_project where is_finish=#{isFinish} and is_delete=false and principal_id=#{userId}") - List getByIsfinish(Long userId, List isFinish); + List getByTags(Long userId, List tags, List isFinish); - List getByTags(Long userId, List tags, List isFinish); - - @Select("select * from organize_oa.oa_project where is_delete=false and status=1 and principal_id=#{userId}") + @Select("select * from organize_oa.oa_project where is_delete=false and principal_id=#{userId}") List get(Long userId); @Select("select * from organize_oa.oa_project where status =1 and principal_id=#{userId}") @@ -74,29 +66,9 @@ public interface ProjectMapper { @Update("UPDATE organize_oa.oa_project SET is_delete = 1 where id=#{id}") boolean deleteProject(Long id); - @Insert("INSERT INTO organize_oa.oa_project_cutting (pid, name, tag, real_time) " + - "VALUES (#{pid}, #{name}, #{tag}, #{realTime})") - void projectCuttingAdd(ProjectCuttingDO projectCuttingDO); + List workgetByIsfinish(Long userId, List isFinish, Integer is); - @Update("UPDATE organize_oa.oa_project_cutting SET name = #{name}, " + - "tag = #{tag}, engineering = #{engineering}, estimated_time = #{estimatedTime}, " + - "real_time = #{realTime}, updated_at = CURRENT_TIMESTAMP WHERE id = #{id}") - boolean projectCuttingUpdate(ProjectCuttingDO projectCuttingDO); - - @Select("SELECT * FROM organize_oa.oa_project_cutting WHERE id = #{id}") - ProjectCuttingDO getProjectCuttingById(Long id); - - @Select("SELECT * FROM organize_oa.oa_project_user WHERE pid = #{pid} AND uid = #{uid}") - ProjectUserDO getProjectUserByPidAndUid(Long pid, Long uid); - - @Update("UPDATE organize_oa.oa_project_user SET uid = #{uid} , updated_at = CURRENT_TIMESTAMP WHERE id = #{id}") - boolean updateUserForProjectUser(Long uid, Long id); - - - //@Select("select * from organize_oa.oa_project_work where is_finish=#{isFinish} and is_delete=false and principal_id =#{userId}") - List workgetByIsfinish(Long userId, List isFinish, Integer is); - - List workgetByTags(Long userId, List tags, Integer is, List isFinish); + List workgetByTags(Long userId, List tags, Integer is, List isFinish); //@Select("select * from organize_oa.oa_project where id in(select project_id from " + //"organize_oa.oa_project_work where is_delete=false and status =1 and principal_id=#{userId} and type=0)") @@ -108,19 +80,57 @@ public interface ProjectMapper { List tget(Integer id); - List tgetByIsfinish(List isFinish); + List tgetByIsfinish(List isFinish); - List tgetBytags(List tags, List isFinish); + List tgetBytags(List tags, List isFinish); - @Select("select * from organize_oa.oa_project_work where id=#{id}") + @Select("select * from organize_oa.oa_project_child where id=#{id}") ProjectWorkSimpleVO getWorkById(Integer id); + @Select("select * from organize_oa.oa_project_modules where id=#{id}") + ProjectModuleDO getModuleById(Integer id); + @Select("select principal_id from organize_oa.oa_project_work where id=#{pid}") Long getPirIdbyWorkid(Long pid); - @Select("select principal_id from organize_oa.oa_project_work where id=#{id}") + @Select("select principal_id from organize_oa.oa_project_modules where project_child_id=#{id} " + + "AND is_delete = 0") Long getPid(Integer id); - @Select("select * from organize_oa.oa_project_work where id=#{id}") - ProjectWorkDO getProjectWorkById(Long id); + @Select("select * from organize_oa.oa_project_work where id=#{id} " + + "AND is_delete = 0") + ProjectModuleDO getProjectWorkById(Long id); + + @Select("select principal_id from organize_oa.oa_project_child where project_id=#{id}") + List getMemberByProjectId(Integer id); + + @Select("select principal_id from organize_oa.oa_project_modules where project_child_id=#{id}") + List getMemberBySystemId(Integer id); + + @Select("select * from organize_oa.oa_project_modules " + + "where DATE(deadline) = DATE(#{threeDayLater}) and status = 0") + List getProjectWorkByTime(LocalDateTime threeDayLater); + + + @Select("select * from organize_oa.oa_project_modules " + + "where is_delete = 0 and principal_id = #{uid}") + List getAllModuleByUserId(Long uid); + + @Select("select * from organize_oa.oa_project_child " + + "where project_id = #{pid} and is_delete = 0 ") + List getAllChildProjectByUserId(Long uid); + + @Select("select * from organize_oa.oa_project " + + "where is_delete = 0 and principal_id = #{uid}") + List getAllProjectByUserId(Long uid); + + + @Select("select * from organize_oa.oa_project_child where " + + "DATE (created_at) = DATE (#{threeDaysLater}) ") + List getProjectChildByTime(LocalDateTime threeDaysLater); + + + @Select("select * from organize_oa.oa_project_child where " + + "id = #{id} and is_delete = 0") + ProjectChildDO getProjectChildById(Integer id); } diff --git a/src/main/java/com/jsl/oa/mapper/ReviewMapper.java b/src/main/java/com/jsl/oa/mapper/ReviewMapper.java new file mode 100644 index 0000000..0561dda --- /dev/null +++ b/src/main/java/com/jsl/oa/mapper/ReviewMapper.java @@ -0,0 +1,46 @@ +package com.jsl.oa.mapper; + +import com.jsl.oa.model.dodata.ReviewDO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Select; + +import java.util.List; + +@Mapper +public interface ReviewMapper { + + @Select("SELECT * FROM organize_oa.oa_review WHERE project_id = #{projectId} " + + "AND is_delete = 0") + List selectAllReviewFromProject(Long projectId); + + @Select("SELECT * FROM organize_oa.oa_review WHERE project_id = #{projectId} " + + "AND is_delete = 0 AND review_result = #{result}") + List selectApprovedResultReviewFromProject(Long projectId, short result); + + @Select("SELECT * FROM organize_oa.oa_review WHERE " + + "project_child_id = #{childId} AND is_delete = 0") + List selectReviewFromSubsystem(Long childId); + + @Select("SELECT * FROM organize_oa.oa_review WHERE " + + "project_child_id = #{childId} " + + "AND is_delete = 0 AND review_result = #{result}") + List selectApprovedResultReviewsFromSubsystem(Long childId, short result); + + @Select("SELECT * FROM organize_oa.oa_review WHERE " + + "project_module_id = #{moduleId} AND is_delete = 0") + List selectReviewFromSubmodule(Long moduleId); + + @Select("SELECT * FROM organize_oa.oa_review WHERE review_result = #{result} and " + + "project_module_id = #{moduleId} AND is_delete = 0") + List selectApprovedResultReviewFromModule(Long moduleId, short result); + + @Select("SELECT * FROM organize_oa.oa_review WHERE id = #{id} AND is_delete = 0") + ReviewDO selectReviewById(Long id); + + void updateReview(ReviewDO reviewDO); + + void addReview(ReviewDO reviewDO); + + @Select("SELECT * FROM organize_oa.oa_review WHERE name = #{name} AND is_delete = 0") + List selectReviewByName(String name); +} diff --git a/src/main/java/com/jsl/oa/mapper/RoleMapper.java b/src/main/java/com/jsl/oa/mapper/RoleMapper.java index e35b10b..5bee028 100644 --- a/src/main/java/com/jsl/oa/mapper/RoleMapper.java +++ b/src/main/java/com/jsl/oa/mapper/RoleMapper.java @@ -30,7 +30,8 @@ public interface RoleMapper { @Select("SELECT * FROM organize_oa.oa_role ORDER BY id DESC") List getRole(); - @Update("UPDATE organize_oa.oa_role SET role_name=#{roleName},display_name=#{displayName},updated_at=CURRENT_TIMESTAMP WHERE id=#{id}") + @Update("UPDATE organize_oa.oa_role " + + "SET role_name=#{roleName},display_name=#{displayName},updated_at=CURRENT_TIMESTAMP WHERE id=#{id}") boolean roleEdit(RoleDO getRole); @Update("UPDATE organize_oa.oa_role_user SET rid = #{rid},updated_at = current_timestamp WHERE uid = #{uid}") @@ -39,8 +40,6 @@ public interface RoleMapper { @Delete("DELETE FROM organize_oa.oa_role WHERE id=#{id}") boolean roleDelete(Long id); - - - - + @Select("SELECT * FROM organize_oa.oa_role WHERE id = (SELECT rid FROM organize_oa.oa_role_user WHERE uid=#{uid})") + RoleDO getRoleByUserId(Long uid); } diff --git a/src/main/java/com/jsl/oa/mapper/UserMapper.java b/src/main/java/com/jsl/oa/mapper/UserMapper.java index c5913ab..413867d 100755 --- a/src/main/java/com/jsl/oa/mapper/UserMapper.java +++ b/src/main/java/com/jsl/oa/mapper/UserMapper.java @@ -29,16 +29,18 @@ public interface UserMapper { @Select("SELECT * FROM organize_oa.oa_user WHERE job_id = #{jobId}") UserDO getUserByUserNum(String jobId); - @Insert("INSERT INTO organize_oa.oa_user " + - "(job_id, username, password, address, phone, email, age, sex) " + - "VALUES (#{jobId}, #{username}, #{password}, #{address}, #{phone}, #{email}, #{age}, #{sex})") + @Insert("INSERT INTO organize_oa.oa_user " + + "(job_id, username, password, address, phone, email, age, sex) " + + "VALUES (#{jobId}, #{username}, #{password}, #{address}, #{phone}, #{email}, #{age}, #{sex})") boolean insertUser(UserDO userDO); @Update("UPDATE organize_oa.oa_user SET is_delete = true ,updated_at = CURRENT_TIMESTAMP WHERE id = #{id}") void userDelete(Long id); - @Update("UPDATE organize_oa.oa_user SET account_no_locked = #{isLock} ,updated_at = CURRENT_TIMESTAMP WHERE id = #{id} ") - void userLock(Long id,Long isLock); + @Update("UPDATE organize_oa.oa_user " + + "SET account_no_locked = #{isLock} " + + ", updated_at = CURRENT_TIMESTAMP WHERE id = #{id} ") + void userLock(Long id, Long isLock); @Select("SELECT * FROM organize_oa.oa_user WHERE id = #{id}") UserDO getUserById(Long id); @@ -60,11 +62,11 @@ public interface UserMapper { @Select("SELECT * FROM organize_oa.oa_user ORDER BY `id` DESC LIMIT #{page},#{limit}") List getAllUser(UserAllCurrentVO userAllCurrentVO); - @Select("SELECT * FROM organize_oa.oa_user " + - "WHERE username LIKE CONCAT('%',#{search},'%') " + - "OR email LIKE CONCAT('%',#{search},'%') " + - "OR phone LIKE CONCAT('%',#{search},'%') " + - "ORDER BY `id` LIMIT #{page},#{limit}") + @Select("SELECT * FROM organize_oa.oa_user " + + "WHERE username LIKE CONCAT('%',#{search},'%') " + + "OR email LIKE CONCAT('%',#{search},'%') " + + "OR phone LIKE CONCAT('%',#{search},'%') " + + "ORDER BY `id` LIMIT #{page},#{limit}") List getAllUserBySearch(UserAllCurrentVO userAllCurrentVO); @Select("SELECT * FROM organize_oa.oa_role_user WHERE uid = #{userId}") @@ -77,11 +79,12 @@ public interface UserMapper { List getRecommendUser(); - @Update("UPDATE organize_oa.oa_user " + - "SET address = #{address}, phone = #{phone}, email = #{email}, age = #{age}, " + - "signature = #{signature}, sex = #{sex}, avatar = #{avatar}, nickname = #{nickname}, " + - "description = #{description} ,updated_at = current_timestamp " + - "WHERE id = #{id}") + @Update("UPDATE organize_oa.oa_user " + + "SET address = #{address}, phone = #{phone}, email = #{email}, age = #{age}, " + + "signature = #{signature}, sex = #{sex}, " + + "avatar = #{avatar}, nickname = #{nickname}, " + + "description = #{description} ,updated_at = current_timestamp " + + "WHERE id = #{id}") void updateUser(UserDO userDO); @Select("SELECT * FROM organize_oa.oa_user WHERE email = #{email}") @@ -96,7 +99,8 @@ public interface UserMapper { @Select("SELECT COUNT(*) FROM organize_oa.oa_user") Long getUsersCount(); - @Select("select oa_user.id,oa_user.username,oa_role.role_name from organize_oa.oa_user join organize_oa.oa_role_user " + - "on oa_user.id = oa_role_user.uid join organize_oa.oa_role on oa_role_user.rid = oa_role.id") + @Select("select oa_user.id,oa_user.username," + + "oa_role.role_name from organize_oa.oa_user join organize_oa.oa_role_user " + + "on oa_user.id = oa_role_user.uid join organize_oa.oa_role on oa_role_user.rid = oa_role.id") List getPrincipal(); } diff --git a/src/main/java/com/jsl/oa/model/dodata/MessageDO.java b/src/main/java/com/jsl/oa/model/dodata/MessageDO.java index 0921bd5..c6f2ffd 100644 --- a/src/main/java/com/jsl/oa/model/dodata/MessageDO.java +++ b/src/main/java/com/jsl/oa/model/dodata/MessageDO.java @@ -22,9 +22,12 @@ public class MessageDO { private Long id; private Long uid; + private Long sid; private String title; private String text; - private Short read; + private Integer isDelete; + private String type; + private Long toId; private Timestamp createdAt; private Timestamp deletedAt; diff --git a/src/main/java/com/jsl/oa/model/dodata/PageBeanDO.java b/src/main/java/com/jsl/oa/model/dodata/PageBeanDO.java index c114063..37a22fe 100644 --- a/src/main/java/com/jsl/oa/model/dodata/PageBeanDO.java +++ b/src/main/java/com/jsl/oa/model/dodata/PageBeanDO.java @@ -14,7 +14,9 @@ import java.util.List; * @since v1.1.0 * @version v1.1.0 * @author 176yunxuan + * @param */ + @Data @NoArgsConstructor @AllArgsConstructor diff --git a/src/main/java/com/jsl/oa/model/dodata/PermissionDO.java b/src/main/java/com/jsl/oa/model/dodata/PermissionDO.java index 433dd35..f2d119f 100755 --- a/src/main/java/com/jsl/oa/model/dodata/PermissionDO.java +++ b/src/main/java/com/jsl/oa/model/dodata/PermissionDO.java @@ -19,10 +19,12 @@ import java.sql.Timestamp; @Accessors(chain = true) @JsonInclude(JsonInclude.Include.NON_NULL) public class PermissionDO { + // 主键 private Long id; - private Long pid; + // 权限名称 private String name; - private String code; - private Short type; - private Timestamp deletedAt; + // 权限描述 + private String description; + // 创建时间 + private Timestamp createdAt; } diff --git a/src/main/java/com/jsl/oa/model/dodata/ProjectCuttingDO.java b/src/main/java/com/jsl/oa/model/dodata/ProjectChildDO.java old mode 100755 new mode 100644 similarity index 70% rename from src/main/java/com/jsl/oa/model/dodata/ProjectCuttingDO.java rename to src/main/java/com/jsl/oa/model/dodata/ProjectChildDO.java index b79a8f7..2be895e --- a/src/main/java/com/jsl/oa/model/dodata/ProjectCuttingDO.java +++ b/src/main/java/com/jsl/oa/model/dodata/ProjectChildDO.java @@ -18,19 +18,17 @@ import java.sql.Timestamp; @Data @Accessors(chain = true) @JsonInclude(JsonInclude.Include.NON_NULL) -public class ProjectCuttingDO { +public class ProjectChildDO { private Long id; private Long principalId; private Long projectId; - private Long pid; - private Long workLoad; - private Long cycle; + private Integer workLoad; + private Integer cycle; private String name; private String description; - private Integer is_delete; - private Integer is_finish; - private Integer status; - private boolean type; - private Timestamp beginTime; + private Integer isDelete; + private String files; + private Timestamp createdAt; private Timestamp completeTime; + private Timestamp updatedAt; } diff --git a/src/main/java/com/jsl/oa/model/dodata/ProjectDO.java b/src/main/java/com/jsl/oa/model/dodata/ProjectDO.java index 172ab0d..b83fd08 100755 --- a/src/main/java/com/jsl/oa/model/dodata/ProjectDO.java +++ b/src/main/java/com/jsl/oa/model/dodata/ProjectDO.java @@ -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; /** *

project 数据表

*
- * 映射 oa_project 数据表内容进入自定义实体类 + * 映射 oa_project 数据表内容进入自定义实体类, 该实体类用于存储数据表中的数据。 * * @author 筱锋xiao_lfeng * @since v1.1.0 @@ -18,25 +17,99 @@ import java.sql.Timestamp; */ @Data @Accessors(chain = true) -@JsonInclude(JsonInclude.Include.NON_NULL) public class ProjectDO { + /** + * 主键 + *
+ * 主键,自增 + */ private Long id; - private Long principalId; - private String tags; - private Long cycle; + /** + * 项目名称 + *
+ * 项目名称,最长 255 字符 + */ private String name; - private String file; + /** + * 项目负责人 + *
+ * 项目负责人,关联 user 表 + */ + private Long principalId; + /** + * 项目描述 + *
+ * 项目描述,需要存储 json 数据 + */ private String description; - private Integer isDelete; - private Integer isFinish; - private Long workLoad; - private Integer 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; + /** + * 项目标签 + *
+ * 项目标签,需要存储 json 数据(项目类型:web,大数据等) + */ + private String tags; + /** + * 项目周期 + *
+ * 项目周期,单位:天 + */ + private Integer cycle; + /** + * 项目工作量 + *
+ * 项目工作量,单位:人天 + */ + private Integer workLoad; + /** + * 项目文件 + *
+ * 项目文件,需要存储 json 数据(文件名:UUID 生成值)。对于 JSON 内部只需要存储 UUID 信息以及加上文件尾缀即可。 + *

+ * 例如:[UUID].pdf, [UUID].png, [UUID].docx + */ + private String files; + /** + * 项目开始时间 + *


+ * 项目开始时间, 格式:yyyy-MM-dd + */ + private Date beginTime; + /** + * 项目完成时间 + *
+ * 项目完成时间, 格式:yyyy-MM-dd + */ + private Date completeTime; + /** + * 项目截止时间 + *
+ * 项目截止时间, 格式:yyyy-MM-dd + *

+ * 项目截止时间为最终的截止时间,即甲方要求的最终结束周期 + */ + private Date deadline; + /** + * 项目状态 + *


+ * 项目状态(draft: 草稿,progress: 进行,pause: 暂停,abnormal: 异常,complete: 完成) + */ + private String status; + /** + * 创建时间 + *
+ * 创建时间,格式:1234567890123 + */ + private Timestamp createdAt; + /** + * 更新时间 + *
+ * 更新时间,格式:1234567890123 + */ + private Timestamp updatedAt; + /** + * 是否删除 + *
+ * 是否删除(0: 否,1: 是) + */ + private Boolean isDelete; } diff --git a/src/main/java/com/jsl/oa/model/dodata/ProjectWorkDO.java b/src/main/java/com/jsl/oa/model/dodata/ProjectModuleDO.java similarity index 67% rename from src/main/java/com/jsl/oa/model/dodata/ProjectWorkDO.java rename to src/main/java/com/jsl/oa/model/dodata/ProjectModuleDO.java index b707532..d42f39f 100644 --- a/src/main/java/com/jsl/oa/model/dodata/ProjectWorkDO.java +++ b/src/main/java/com/jsl/oa/model/dodata/ProjectModuleDO.java @@ -9,19 +9,15 @@ import java.sql.Timestamp; @Data @Accessors(chain = true) @JsonInclude(JsonInclude.Include.NON_NULL) -public class ProjectWorkDO { +public class ProjectModuleDO { private Long id; - private Long pid; - private Long projectId; + private Long projectChildId; private Long principalId; - private Integer cycle; private Integer workLoad; - private Integer type; - private String name; private String description; + private String name; private Integer isDelete; - private Integer isFinish; - private boolean status; - private Timestamp beginTime; + private Timestamp createdAt; + private Timestamp updatedAt; private Timestamp completeTime; } diff --git a/src/main/java/com/jsl/oa/model/dodata/ReviewDO.java b/src/main/java/com/jsl/oa/model/dodata/ReviewDO.java new file mode 100644 index 0000000..2280e81 --- /dev/null +++ b/src/main/java/com/jsl/oa/model/dodata/ReviewDO.java @@ -0,0 +1,52 @@ +package com.jsl.oa.model.dodata; + + +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.Date; + +/** + *

oa_review 数据表

+ *
+ * 映射 oa_permission 数据表内容进入自定义实体类 + * + * @author 筱锋xiao_lfeng + * @since v1.1.0 + * @version v1.1.0 + */ +@Data +@Accessors(chain = true) +@JsonInclude(JsonInclude.Include.NON_NULL) +public class ReviewDO { + //主键 + private Long id; + //申请名称 + private String name; + //申请理由 + private String content; + //申请者用户id + private Long senderId; + //审核者用户id + private Long recipientId; + //审核类别(0:子系统;1:子模块) + private Short category; + //申请的项目id + private Long projectId; + //申请的子系统id + private Long projectChildId; + //申请的子模块id + private Long projectModuleId; + //申请时间 + private Date applicationTime; + //审核时间 + private Date reviewTime; + //审核结果(0:未通过;1:通过;2:未审批) + private Short reviewResult; + //是否删除(0:未删除;1:已删除) + private String isDelete; + +} + + diff --git a/src/main/java/com/jsl/oa/model/dodata/RoleDO.java b/src/main/java/com/jsl/oa/model/dodata/RoleDO.java index 0d752d9..fc4a67f 100755 --- a/src/main/java/com/jsl/oa/model/dodata/RoleDO.java +++ b/src/main/java/com/jsl/oa/model/dodata/RoleDO.java @@ -12,14 +12,21 @@ import java.sql.Timestamp; * * @author 筱锋xiao_lfeng * @since v1.1.0 - * @version v1.1.0 + * @version v1.2.0 */ @Data @Accessors(chain = true) public class RoleDO { + // 角色id private Long id; + // 角色名称 private String roleName; + // 中文描述 private String displayName; + // 用户组权限 + private String permissions; + // 创建时间 private Timestamp createdAt; + // 修改时间 private Timestamp updatedAt; } diff --git a/src/main/java/com/jsl/oa/model/dodata/RolePermissionDO.java b/src/main/java/com/jsl/oa/model/dodata/RolePermissionDO.java deleted file mode 100755 index f3376fb..0000000 --- a/src/main/java/com/jsl/oa/model/dodata/RolePermissionDO.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.jsl.oa.model.dodata; - -import com.fasterxml.jackson.annotation.JsonInclude; -import lombok.Data; -import lombok.experimental.Accessors; - -import java.sql.Timestamp; - -/** - *

role 数据表

- *
- * 映射 oa_role 数据表内容进入自定义实体类 - * - * @author 筱锋xiao_lfeng - * @since v1.1.0 - * @version v1.1.0 - */ -@Data -@Accessors(chain = true) -@JsonInclude(JsonInclude.Include.NON_NULL) -public class RolePermissionDO { - private Long rid; - private Long pid; - private Timestamp createdAt; -} diff --git a/src/main/java/com/jsl/oa/model/vodata/MessageAddVO.java b/src/main/java/com/jsl/oa/model/vodata/MessageAddVO.java new file mode 100644 index 0000000..8229db4 --- /dev/null +++ b/src/main/java/com/jsl/oa/model/vodata/MessageAddVO.java @@ -0,0 +1,18 @@ +package com.jsl.oa.model.vodata; +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.Data; +import lombok.experimental.Accessors; + + +@Data +@Accessors(chain = true) +@JsonInclude(JsonInclude.Include.NON_NULL) +public class MessageAddVO { + private String text; + private String title; + private Long uid; + private Long sid; + private String type; + private Long toId; + +} diff --git a/src/main/java/com/jsl/oa/model/vodata/MessageGetVO.java b/src/main/java/com/jsl/oa/model/vodata/MessageGetVO.java new file mode 100644 index 0000000..c54ffb8 --- /dev/null +++ b/src/main/java/com/jsl/oa/model/vodata/MessageGetVO.java @@ -0,0 +1,20 @@ +package com.jsl.oa.model.vodata; + +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.Data; +import lombok.experimental.Accessors; +import java.sql.Timestamp; + +@Data +@Accessors(chain = true) +@JsonInclude(JsonInclude.Include.NON_NULL) +public class MessageGetVO { + private Long id; + private String text; + private String title; + private Timestamp createdAt; + private String senderName; + private String type; + private Long toId; + +} diff --git a/src/main/java/com/jsl/oa/model/vodata/PermissionContentVO.java b/src/main/java/com/jsl/oa/model/vodata/PermissionContentVO.java new file mode 100644 index 0000000..5b5bddd --- /dev/null +++ b/src/main/java/com/jsl/oa/model/vodata/PermissionContentVO.java @@ -0,0 +1,14 @@ +package com.jsl.oa.model.vodata; + +import lombok.Data; + +@Data +public class PermissionContentVO { + // 主键 + private Long id; + // 权限名称 + private String name; + // 权限描述 + private String description; +} + diff --git a/src/main/java/com/jsl/oa/model/vodata/PermissionContentVo.java b/src/main/java/com/jsl/oa/model/vodata/PermissionContentVo.java deleted file mode 100644 index e48833d..0000000 --- a/src/main/java/com/jsl/oa/model/vodata/PermissionContentVo.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.jsl.oa.model.vodata; - -import lombok.Data; - -import java.util.List; - -@Data -public class PermissionContentVo { - - private Long id; - private String name; - private String code; - private Short type; - private List children; - -} - - diff --git a/src/main/java/com/jsl/oa/model/vodata/ProjectInfoVO.java b/src/main/java/com/jsl/oa/model/vodata/ProjectInfoVO.java index e5a5784..2adf8ec 100644 --- a/src/main/java/com/jsl/oa/model/vodata/ProjectInfoVO.java +++ b/src/main/java/com/jsl/oa/model/vodata/ProjectInfoVO.java @@ -20,10 +20,10 @@ public class ProjectInfoVO { @NotNull(message = "工作量不能为空") private Long workLoad; private String tags; - private String file; + private String files; + private Timestamp beginTime; private Timestamp completeTime; - private Timestamp deadline; - private Integer status; - private Integer isFinish; + private Timestamp deadLine; + private String status; } diff --git a/src/main/java/com/jsl/oa/model/vodata/ProjectSimpleVO.java b/src/main/java/com/jsl/oa/model/vodata/ProjectSimpleVO.java index de5ba6c..f2d9d88 100644 --- a/src/main/java/com/jsl/oa/model/vodata/ProjectSimpleVO.java +++ b/src/main/java/com/jsl/oa/model/vodata/ProjectSimpleVO.java @@ -10,7 +10,6 @@ import lombok.experimental.Accessors; public class ProjectSimpleVO { private String name; private String principalUser; - private Integer isFinish; private String description; private Long cycle; private Long workLoad; diff --git a/src/main/java/com/jsl/oa/model/vodata/ReviewAddVO.java b/src/main/java/com/jsl/oa/model/vodata/ReviewAddVO.java new file mode 100644 index 0000000..25114be --- /dev/null +++ b/src/main/java/com/jsl/oa/model/vodata/ReviewAddVO.java @@ -0,0 +1,29 @@ +package com.jsl.oa.model.vodata; + + +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +@Data +public class ReviewAddVO { + + //申请名称 + @NotBlank(message = "审核名称不能为空") + private String name; + //申请理由 + @NotBlank(message = "申请理由不能为空") + private String content; + //申请的项目id + @NotNull(message = "项目id不能为空") + private Long projectId; + //申请的子系统id + @NotNull(message = "子系统id不能为空") + private Long projectChildId; + //申请的子模块id + private Long projectModuleId; + +} + + diff --git a/src/main/java/com/jsl/oa/model/vodata/ReviewDataVO.java b/src/main/java/com/jsl/oa/model/vodata/ReviewDataVO.java new file mode 100644 index 0000000..7700711 --- /dev/null +++ b/src/main/java/com/jsl/oa/model/vodata/ReviewDataVO.java @@ -0,0 +1,16 @@ +package com.jsl.oa.model.vodata; + + +import lombok.Data; + +import java.util.List; + +@Data +public class ReviewDataVO { + + private Integer dataTotal; + + private List reviews; +} + + diff --git a/src/main/java/com/jsl/oa/model/vodata/ReviewUpdateResultVO.java b/src/main/java/com/jsl/oa/model/vodata/ReviewUpdateResultVO.java new file mode 100644 index 0000000..11d8741 --- /dev/null +++ b/src/main/java/com/jsl/oa/model/vodata/ReviewUpdateResultVO.java @@ -0,0 +1,23 @@ +package com.jsl.oa.model.vodata; + +import lombok.Data; + +import javax.validation.constraints.Max; +import javax.validation.constraints.Min; +import javax.validation.constraints.NotNull; + +@Data +public class ReviewUpdateResultVO { + + @NotNull + private Long id; + + @NotNull + @Min(value = 0, message = "未通过:0,已通过:1,待审批:2") + @Max(value = 2, message = "未通过:0,已通过:1,待审批:2") + private Short result; + + +} + + diff --git a/src/main/java/com/jsl/oa/model/vodata/ReviewVO.java b/src/main/java/com/jsl/oa/model/vodata/ReviewVO.java new file mode 100644 index 0000000..9177701 --- /dev/null +++ b/src/main/java/com/jsl/oa/model/vodata/ReviewVO.java @@ -0,0 +1,47 @@ +package com.jsl.oa.model.vodata; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.Date; + +@Data +@Accessors(chain = true) +public class ReviewVO { + + private Long id; + //申请名称 + private String name; + //申请理由 + private String content; + //申请者用户id + private Long senderId; + //审请者用户名称 + private String senderName; + //审核者用户id + private Long recipientId; + //审核者用户名称 + private String recipientName; + //审核类别(子系统 子模块) + private String category; + //申请的项目id + private Long projectId; + //申请的项目名称 + private String projectName; + //申请的子系统id + private Long projectChildId; + //申请的子系统名称 + private String projectChildName; + //申请的子模块id + private Long projectModuleId; + //申请的模块名称 + private String projectModuleName; + //申请时间 + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date applicationTime; + //审核结果(0:未通过;1:通过;2:未审批) + private String result; +} + + diff --git a/src/main/java/com/jsl/oa/model/vodata/UserAddVO.java b/src/main/java/com/jsl/oa/model/vodata/UserAddVO.java index cfca43d..4394e49 100644 --- a/src/main/java/com/jsl/oa/model/vodata/UserAddVO.java +++ b/src/main/java/com/jsl/oa/model/vodata/UserAddVO.java @@ -1,12 +1,12 @@ package com.jsl.oa.model.vodata; -import lombok.Getter; +import lombok.Data; import javax.validation.constraints.*; -@Getter +@Data public class UserAddVO { @NotBlank(message = "用户名不能为空") @@ -20,7 +20,8 @@ public class UserAddVO { private String address; @NotBlank(message = "电话不能为空") - @Pattern(regexp = "^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\\d{8}$", message = "电话格式错误") + @Pattern(regexp = "^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\\d{8}$", + message = "电话格式错误") private String phone; @NotBlank(message = "邮箱不能为空") diff --git a/src/main/java/com/jsl/oa/model/vodata/UserEditVO.java b/src/main/java/com/jsl/oa/model/vodata/UserEditVO.java index 300335e..6cc4189 100644 --- a/src/main/java/com/jsl/oa/model/vodata/UserEditVO.java +++ b/src/main/java/com/jsl/oa/model/vodata/UserEditVO.java @@ -21,7 +21,8 @@ public class UserEditVO { private String address; - @Pattern(regexp = "^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\\d{8}$", message = "电话格式错误") + @Pattern(regexp = "^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\\d{8}$", + message = "电话格式错误") private String phone; @Pattern(regexp = "^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$", message = "邮箱格式错误") diff --git a/src/main/java/com/jsl/oa/model/vodata/UserRegisterVO.java b/src/main/java/com/jsl/oa/model/vodata/UserRegisterVO.java index 949d0c1..1513d60 100755 --- a/src/main/java/com/jsl/oa/model/vodata/UserRegisterVO.java +++ b/src/main/java/com/jsl/oa/model/vodata/UserRegisterVO.java @@ -28,7 +28,9 @@ public class UserRegisterVO { private String address; @NotBlank(message = "电话不能为空") - @Pattern(regexp = "^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\\d{8}$", message = "电话格式错误") + @Pattern(regexp = + "^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\\d{8}$", + message = "电话格式错误") private String phone; @NotBlank(message = "邮箱不能为空") diff --git a/src/main/java/com/jsl/oa/services/InfoService.java b/src/main/java/com/jsl/oa/services/InfoService.java index 028e7a3..c3e1aa1 100644 --- a/src/main/java/com/jsl/oa/services/InfoService.java +++ b/src/main/java/com/jsl/oa/services/InfoService.java @@ -33,7 +33,6 @@ public interface InfoService { * * @param request 请求 * @param carouselVO 轮播图VO - * @param id 轮播图ID * @return {@link BaseResponse} */ BaseResponse editHeaderImage(HttpServletRequest request, CarouselVO carouselVO); diff --git a/src/main/java/com/jsl/oa/services/MessageService.java b/src/main/java/com/jsl/oa/services/MessageService.java index 944c35a..5885df9 100644 --- a/src/main/java/com/jsl/oa/services/MessageService.java +++ b/src/main/java/com/jsl/oa/services/MessageService.java @@ -3,7 +3,7 @@ package com.jsl.oa.services; import com.jsl.oa.utils.BaseResponse; import javax.servlet.http.HttpServletRequest; -import java.time.LocalDate; +import java.time.LocalDateTime; /** *

消息服务接口

@@ -18,15 +18,24 @@ public interface MessageService { BaseResponse messageDelete(Long mid, HttpServletRequest request); - BaseResponse messageGet(LocalDate begin, LocalDate end, Long page, Long pageSize, Long uid); + BaseResponse messageGet( + LocalDateTime begin, + LocalDateTime end, + Integer page, + Integer pageSize, + Long uid); - BaseResponse messageGetAll( - HttpServletRequest request, - LocalDate begin, - LocalDate end, - Long page, - Long pageSize, - Long loginId, - Long uid - ); + void messageAdd(Integer pId, Integer systemId, Integer moddleId, Long uid, + HttpServletRequest request); + void messageAdd(Integer pId, Integer systemId, Integer moddleId, Long uid, Long isPass, + HttpServletRequest request); + void messageAdd(Integer pId, Integer type, Integer systemId, + HttpServletRequest request); + void messageAdd(Integer pId, Integer systmeId, Integer moddleId, Integer type, + HttpServletRequest request); + void messageAdd(Integer pId, Integer systemId, Integer moddleId); + + void messageRemind(); + + BaseResponse messageGetById(Long id, Long uid); } diff --git a/src/main/java/com/jsl/oa/services/PermissionService.java b/src/main/java/com/jsl/oa/services/PermissionService.java index f81e127..e201dd2 100644 --- a/src/main/java/com/jsl/oa/services/PermissionService.java +++ b/src/main/java/com/jsl/oa/services/PermissionService.java @@ -1,19 +1,12 @@ package com.jsl.oa.services; -import com.jsl.oa.model.vodata.PermissionEditVO; import com.jsl.oa.utils.BaseResponse; import javax.servlet.http.HttpServletRequest; public interface PermissionService { - BaseResponse permissionAdd(HttpServletRequest request, Long rid, Long pid); - BaseResponse permissionUser(HttpServletRequest request, Long uid); BaseResponse permissionGet(HttpServletRequest request); - - BaseResponse permissionEdit(PermissionEditVO permissionEditVo, HttpServletRequest request); - - BaseResponse permissionDelete(HttpServletRequest request, Long pid); } diff --git a/src/main/java/com/jsl/oa/services/ProjectService.java b/src/main/java/com/jsl/oa/services/ProjectService.java index 9915778..5e333bb 100644 --- a/src/main/java/com/jsl/oa/services/ProjectService.java +++ b/src/main/java/com/jsl/oa/services/ProjectService.java @@ -1,6 +1,8 @@ package com.jsl.oa.services; -import com.jsl.oa.model.vodata.*; +import com.jsl.oa.model.vodata.ProjectEditVO; +import com.jsl.oa.model.vodata.ProjectInfoVO; +import com.jsl.oa.model.vodata.ProjectWorkVO; import com.jsl.oa.model.vodata.business.info.ProjectShowVO; import com.jsl.oa.utils.BaseResponse; @@ -8,14 +10,9 @@ import javax.servlet.http.HttpServletRequest; import java.util.List; public interface ProjectService { - BaseResponse projectAdd(HttpServletRequest request, ProjectInfoVO projectAdd); BaseResponse projectEdit(HttpServletRequest request, ProjectEditVO projectEdit, Long projectId); - BaseResponse projectGetUserInCutting(Long uid); - - BaseResponse projectAddUserForCutting(HttpServletRequest request, Long uid, Long pid); - BaseResponse getHeader(Integer id); BaseResponse addHeader(HttpServletRequest request, ProjectShowVO projectShowVO); @@ -24,23 +21,23 @@ public interface ProjectService { BaseResponse editHeader(HttpServletRequest request, ProjectShowVO projectShowVO, Integer id); - BaseResponse get(Integer listAll, HttpServletRequest request, List tags, List isFinish, Integer page, Integer pageSize); - BaseResponse getByName(String name); BaseResponse projectDelete(HttpServletRequest request, List id); - BaseResponse addProjectCutting(HttpServletRequest request, ProjectCuttingAddVO projectCuttingAddVO); + BaseResponse projectAdd(HttpServletRequest request, ProjectInfoVO projectVO); - BaseResponse editProjectCutting(HttpServletRequest request, ProjectCuttingEditVO projectCuttingEditVO); + BaseResponse workGet( + HttpServletRequest request, + List tags, + List isFinish, + Integer is, + Integer page, + Integer pageSize); - BaseResponse projectToOtherUserForCutting(HttpServletRequest request, Long oldUid, Long pid, Long newUid); + BaseResponse projectWorkAdd(HttpServletRequest request, ProjectWorkVO projectWorkVO); - BaseResponse workget(Integer listAll, HttpServletRequest request, List tags, List isFinish, Integer is, Integer page, Integer pageSize); - - BaseResponse projecWorktAdd(HttpServletRequest request, ProjectWorkVO projectWorkVO); - - BaseResponse tget(Integer id, List tags, List isFinish, Integer page, Integer pageSize); + BaseResponse tGet(List tags, List isFinish, Integer page, Integer pageSize); BaseResponse projectFileGet(HttpServletRequest request, Long projectId); @@ -49,4 +46,15 @@ public interface ProjectService { BaseResponse getWorkById(Integer id); BaseResponse projectPrincipalGet(); + + /** + * 从项目 id 获取项目的详细信息 + *
+ * 根据项目所属 id 获取项目的详细信息,根据用户所属角色组的不同返回不同的内容 + * + * @param request 获取请求体 + * @param projectId 项目 id + * @return 根据用户所属角色组的不同返回不同的内容 + */ + BaseResponse getProjectById(HttpServletRequest request, Long projectId); } diff --git a/src/main/java/com/jsl/oa/services/ReviewService.java b/src/main/java/com/jsl/oa/services/ReviewService.java new file mode 100644 index 0000000..bbcfc39 --- /dev/null +++ b/src/main/java/com/jsl/oa/services/ReviewService.java @@ -0,0 +1,21 @@ +package com.jsl.oa.services; + + +import com.jsl.oa.model.vodata.ReviewAddVO; +import com.jsl.oa.model.vodata.ReviewUpdateResultVO; +import com.jsl.oa.utils.BaseResponse; + +import javax.servlet.http.HttpServletRequest; + +public interface ReviewService { + + BaseResponse getUserPendingApprovalReview(Integer page, Integer pageSize, HttpServletRequest request); + + BaseResponse getUserReview(Integer page, Integer pageSize, HttpServletRequest request); + + BaseResponse addReview(ReviewAddVO reviewAddVO, HttpServletRequest request); + + BaseResponse updateReviewResult(ReviewUpdateResultVO reviewUpdateResultVOVO, HttpServletRequest request); + + BaseResponse searchReview(String content, Short statue, HttpServletRequest request, Integer page, Integer pageSize); +} diff --git a/src/main/java/com/jsl/oa/services/RoleService.java b/src/main/java/com/jsl/oa/services/RoleService.java index ba46e87..61a8d32 100644 --- a/src/main/java/com/jsl/oa/services/RoleService.java +++ b/src/main/java/com/jsl/oa/services/RoleService.java @@ -16,9 +16,9 @@ import javax.servlet.http.HttpServletRequest; * @since v1.1.0 */ public interface RoleService { - BaseResponse roleAddUser(HttpServletRequest request,Long uid, Long rid); + BaseResponse roleAddUser(HttpServletRequest request, Long uid, Long rid); - BaseResponse roleRemoveUser(HttpServletRequest request,Long uid); + BaseResponse roleRemoveUser(HttpServletRequest request, Long uid); BaseResponse roleGet(HttpServletRequest request, String id); diff --git a/src/main/java/com/jsl/oa/services/impl/AuthServiceImpl.java b/src/main/java/com/jsl/oa/services/impl/AuthServiceImpl.java index 697c9d3..0b989f2 100755 --- a/src/main/java/com/jsl/oa/services/impl/AuthServiceImpl.java +++ b/src/main/java/com/jsl/oa/services/impl/AuthServiceImpl.java @@ -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.common.constant.BusinessConstants; import com.jsl.oa.dao.PermissionDAO; import com.jsl.oa.dao.RoleDAO; @@ -49,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()); // 用户名已存在 @@ -86,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}$", @@ -131,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) { @@ -151,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) { @@ -176,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); @@ -210,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 @@ -225,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) { @@ -274,7 +267,7 @@ public class AuthServiceImpl implements AuthService { getPermissionForString = permissionDAO.getPermission(userDO.getId()); } // 获取用户角色 - RoleUserDO getUserRole = roleDAO.roleMapper.getRoleUserByUid(userDO.getId()); + RoleUserDO getUserRole = roleDAO.getRoleUserByUid(userDO.getId()); if (getUserRole == null) { getUserRole = new RoleUserDO(); getUserRole.setRid(0L) diff --git a/src/main/java/com/jsl/oa/services/impl/InfoServiceImpl.java b/src/main/java/com/jsl/oa/services/impl/InfoServiceImpl.java index 7540f9f..6ee51ba 100644 --- a/src/main/java/com/jsl/oa/services/impl/InfoServiceImpl.java +++ b/src/main/java/com/jsl/oa/services/impl/InfoServiceImpl.java @@ -1,9 +1,9 @@ package com.jsl.oa.services.impl; -import com.jsl.oa.annotations.CheckUserHasPermission; +import com.jsl.oa.annotations.NeedPermission; import com.jsl.oa.dao.InfoDAO; +import com.jsl.oa.dao.RoleDAO; import com.jsl.oa.dao.UserDAO; -import com.jsl.oa.mapper.RoleMapper; import com.jsl.oa.model.dodata.UserDO; import com.jsl.oa.model.dodata.info.CarouselDO; import com.jsl.oa.model.vodata.UserProfileVo; @@ -36,14 +36,13 @@ import java.util.List; @Service @RequiredArgsConstructor public class InfoServiceImpl implements InfoService { - private final RoleMapper roleMapper; private final InfoDAO infoDAO; private final UserDAO userDAO; + private final RoleDAO roleDAO; @Override - @CheckUserHasPermission("info.image.add") + @NeedPermission("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") + @NeedPermission("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,11 +124,10 @@ public class InfoServiceImpl implements InfoService { } @Override - @CheckUserHasPermission("info.image.del") + @NeedPermission("info.image.del") public BaseResponse delHeaderImage(HttpServletRequest request, Integer id) { - log.info("\t> 执行 Service 层 InfoService.delHeaderImage 方法"); // 用户权限校验 - if (!Processing.checkUserIsAdmin(request, roleMapper)) { + if (!Processing.checkUserIsConsole(request, roleDAO)) { return ResultUtil.error(ErrorCode.NOT_ADMIN); } // 获取轮播图信息 @@ -150,11 +146,10 @@ public class InfoServiceImpl implements InfoService { } @Override - @CheckUserHasPermission("info.image.setting.edit") + @NeedPermission("info.image.setting.edit") public BaseResponse editSettingHeaderImage(HttpServletRequest request, Boolean showType) { - log.info("\t> 执行 Service 层 InfoService.editSettingHeaderImage 方法"); // 用户权限校验 - if (!Processing.checkUserIsAdmin(request, roleMapper)) { + if (!Processing.checkUserIsConsole(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"; diff --git a/src/main/java/com/jsl/oa/services/impl/MailServiceImpl.java b/src/main/java/com/jsl/oa/services/impl/MailServiceImpl.java index 9a3380e..34d51b3 100755 --- a/src/main/java/com/jsl/oa/services/impl/MailServiceImpl.java +++ b/src/main/java/com/jsl/oa/services/impl/MailServiceImpl.java @@ -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(); diff --git a/src/main/java/com/jsl/oa/services/impl/MessageServiceImpl.java b/src/main/java/com/jsl/oa/services/impl/MessageServiceImpl.java index a387dab..2337ac5 100644 --- a/src/main/java/com/jsl/oa/services/impl/MessageServiceImpl.java +++ b/src/main/java/com/jsl/oa/services/impl/MessageServiceImpl.java @@ -1,26 +1,23 @@ package com.jsl.oa.services.impl; - - -import com.jsl.oa.annotations.CheckUserAbleToUse; -import com.jsl.oa.annotations.CheckUserHasPermission; +import com.jsl.oa.dao.UserDAO; import com.jsl.oa.mapper.MessageMapper; -import com.jsl.oa.mapper.RoleMapper; +import com.jsl.oa.mapper.ProjectMapper; import com.jsl.oa.model.dodata.MessageDO; -import com.jsl.oa.model.dodata.PageBeanDO; +import com.jsl.oa.model.dodata.ProjectChildDO; +import com.jsl.oa.model.dodata.ProjectModuleDO; +import com.jsl.oa.model.vodata.MessageAddVO; +import com.jsl.oa.model.vodata.MessageGetVO; import com.jsl.oa.services.MessageService; -import com.jsl.oa.utils.BaseResponse; -import com.jsl.oa.utils.ErrorCode; -import com.jsl.oa.utils.JwtUtil; -import com.jsl.oa.utils.ResultUtil; +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.LocalDate; +import java.time.LocalDateTime; +import java.util.ArrayList; import java.util.List; - /** *

消息服务层实现类

*
@@ -36,10 +33,11 @@ import java.util.List; public class MessageServiceImpl implements MessageService { private final MessageMapper messageMapper; - private final RoleMapper roleMapper; + private final UserDAO userDAO; + private final ProjectMapper projectMapper; @Override - @CheckUserHasPermission("message.delete") + public BaseResponse messageDelete(Long mid, HttpServletRequest request) { //获取消息数据 MessageDO messageDO = messageMapper.getMessageById(mid); @@ -55,56 +53,331 @@ public class MessageServiceImpl implements MessageService { return ResultUtil.success(); } + @SuppressWarnings("checkstyle:Regexp") @Override - @CheckUserAbleToUse - public BaseResponse messageGet(LocalDate begin, LocalDate end, Long page, Long pageSize, Long uid) { - //1.记录总数据数 - Long count = messageMapper.count(uid); - //2.获取分页数据列表 + public BaseResponse messageGet(LocalDateTime beginTime, + LocalDateTime endTime, + Integer page, + Integer pageSize, + Long uid) { //默认获取时间为最近30天 - if (begin == null) { - begin = LocalDate.now(); - end = begin.minusDays(30); + if (beginTime == null) { + endTime = LocalDateTime.now(); + beginTime = endTime.minusDays(30); } - Long start = (page - 1) * pageSize; - List empList = messageMapper.page(begin, end, uid, start, pageSize); + List messageDOList = messageMapper.page(beginTime, endTime, uid); + //封装返回数据 + List messageGetVOList = new ArrayList<>(); + for (MessageDO messageDO : messageDOList) { + MessageGetVO messageGetVO1 = new MessageGetVO(); + messageGetVO1.setId(messageDO.getId()); + messageGetVO1.setText(messageDO.getText()); + messageGetVO1.setTitle(messageDO.getTitle()); + messageGetVO1.setCreatedAt(messageDO.getCreatedAt()); + if (messageDO.getSid() != null) { + messageGetVO1.setSenderName(userDAO.getUserById(messageDO.getSid()).getUsername()); + } + if (messageDO.getToId() != null) { + messageGetVO1.setToId(messageDO.getToId()); + } + if (messageDO.getType() != null) { + messageGetVO1.setType(messageDO.getType()); + } + messageGetVOList.add(messageGetVO1); + } + //分页返回 + int start = (page - 1) * pageSize; + int end = start + pageSize; + List pageData = messageGetVOList.subList(start, + Math.min(end, messageGetVOList.size())); + return ResultUtil.success(pageData); + } - //3.封装PageBean对象 - PageBeanDO pageBean = new PageBeanDO<>(count, empList); - return ResultUtil.success(pageBean); + /** + * 添加指派消息 + * + * @param pId 项目id + * @param systemId 系统id + * @param moddleId 模块id + * @param uid 用户id + * @param request 请求 + */ + @Override + public void messageAdd( + Integer pId, + Integer systemId, + Integer moddleId, + Long uid, + HttpServletRequest request) { + // 拿到token,获取发送人id + String token = request.getHeader("Authorization").replace("Bearer ", ""); + Long sid = JwtUtil.getUserId(token); + // 获取发送人名字,项目名,子系统名,子模块名 + String senderName = userDAO.getUserById(sid).getUsername(); + String projectName = projectMapper.tgetProjectById(pId).getName(); + String systemName = projectMapper.getWorkById(systemId).getName(); + // 添加消息 + MessageAddVO messageAddVO = new MessageAddVO(); + messageAddVO.setSid(sid); + messageAddVO.setUid(uid); + messageAddVO.setTitle("指派消息"); + if (moddleId == null) { + messageAddVO.setText(senderName + "指派了" + projectName + "项目的" + systemName + "子系统给您"); + } else { + String moddleName = projectMapper.getModuleById(moddleId).getName(); + messageAddVO.setText(senderName + "指派了" + projectName + "项目的" + systemName + "子系统的" + moddleName + "子模块给您"); + } + messageAddVO.setType("Review"); + messageMapper.messageAdd(messageAddVO); + } + + + /** + * 添加审批消息 + * + * @param pId 项目id + * @param systemId 系统id + * @param moddleId 模块id + * @param uid 用户id + * @param isPass 是否通过 1:通过 0:未通过 + * @param request 请求 + */ + @Override + public void messageAdd( + Integer pId, + Integer systemId, + Integer moddleId, + Long uid, + Long isPass, + HttpServletRequest request) { + // 获取发送人名字,项目名,子系统名,子模块名 + String projectName = projectMapper.tgetProjectById(pId).getName(); + String systemName = projectMapper.getWorkById(systemId).getName(); + // 添加消息 + MessageAddVO messageAddVO = new MessageAddVO(); + messageAddVO.setUid(uid); + messageAddVO.setTitle("审批消息"); + String moddleName = projectMapper.getModuleById(moddleId).getName(); + if (isPass == 1) { + messageAddVO.setText("您申请的" + projectName + "项目的" + systemName + "系统的" + moddleName + "模块负责人已通过"); + } else { + messageAddVO.setText("您申请的" + projectName + "项目的" + systemName + "系统的" + moddleName + "模块负责人未通过"); + } + messageAddVO.setType("Message"); + messageMapper.messageAdd(messageAddVO); + } + + /** + * 添加项目变动消息 + * + * @param pId 项目id + * @param type 类型 1:上传文档 2:修改状态 3:修改负责人 + * @param systemId 系统id + * @param request 请求 + */ + @Override + public void messageAdd( + Integer pId, + Integer type, + Integer systemId, + HttpServletRequest request) { + // 获取项目名,负责人名 + String projectName = projectMapper.tgetProjectById(pId).getName(); + String senderName = userDAO.getUserById(Processing.getAuthHeaderToUserId(request)).getUsername(); + String systemName = projectMapper.getWorkById(systemId).getName(); + // 添加消息 + // 1:上传文档 2:修改状态 3:修改负责人 + List uidList = projectMapper.getMemberByProjectId(pId); + for (Long uid : uidList) { + MessageAddVO messageAddVO = new MessageAddVO(); + messageAddVO.setUid(uid); + messageAddVO.setTitle("项目变动消息"); + if (type == 3) { + messageAddVO.setText("项目负责人" + senderName + "调整了" + systemName + "子系统的负责人"); + } else if (type == 2) { + messageAddVO.setText("项目负责人" + senderName + "修改了" + projectName + "项目的状态"); + } else if (type == 1) { + messageAddVO.setText("项目负责人" + senderName + "上传了文档到" + projectName + "项目"); + } + messageAddVO.setType("Project"); + messageAddVO.setToId(pId.longValue()); + messageMapper.messageAdd(messageAddVO); + } + } + + /** + * 添加子系统变动消息 + * + * @param pId 项目id + * @param systmeId 系统id + * @param moddleId 模块id + * @param type 类型 1:删除模块 2:修改简介 3:修改周期 + * @param request 请求 + */ + @Override + public void messageAdd( + Integer pId, + Integer systmeId, + Integer moddleId, + Integer type, + HttpServletRequest request) { + // 获取项目名,负责人名 + String projectName = projectMapper.tgetProjectById(pId).getName(); + String senderName = userDAO.getUserById(Processing.getAuthHeaderToUserId(request)).getUsername(); + String systemName = projectMapper.getWorkById(systmeId).getName(); + String moddleName = projectMapper.getModuleById(moddleId).getName(); + // 添加消息 + // 1:删除模块 2:修改简介 3:修改周期 + if (type == 1) { + MessageAddVO messageAddVO = new MessageAddVO(); + messageAddVO.setUid(projectMapper.getPid(moddleId)); + messageAddVO.setTitle("子系统变动消息"); + messageAddVO.setText("项目经理" + senderName + "删除了" + projectName + "项目的" + + systemName + "系统的" + moddleName + "模块"); + messageMapper.messageAdd(messageAddVO); + } else { + List uidList = projectMapper.getMemberBySystemId(systmeId); + for (Long uid : uidList) { + MessageAddVO messageAddVO = new MessageAddVO(); + messageAddVO.setUid(uid); + messageAddVO.setTitle("子系统变动消息"); + if (type == 2) { + messageAddVO.setText("项目经理" + senderName + "修改了" + projectName + "项目的" + + systemName + "系统的简介说明"); + } else if (type == 3) { + messageAddVO.setText("项目经理" + senderName + "修改了" + projectName + "项目的" + + systemName + "系统的系统周期/工作量"); + } + messageAddVO.setType("Project_child"); + messageAddVO.setToId(systmeId.longValue()); + messageMapper.messageAdd(messageAddVO); + } + } + } + + /** + * 添加成员填写日报消息 + * + * @param pId 项目id + * @param systemId 系统id + * @param moddleId 模块id + */ + @Override + public void messageAdd( + Integer pId, + Integer systemId, + Integer moddleId) { + // 获取项目名,系统名,模块名,负责人名 + String projectName = projectMapper.tgetProjectById(pId).getName(); + String systemName = projectMapper.getWorkById(systemId).getName(); + String moddleName = projectMapper.getModuleById(moddleId).getName(); + String principalName = userDAO.getUserById(projectMapper.getPid(moddleId)).getUsername(); + // 添加消息 + MessageAddVO messageAddVO = new MessageAddVO(); + messageAddVO.setUid(projectMapper.getPid(systemId)); + messageAddVO.setTitle("日报消息"); + messageAddVO.setText(projectName + "项目的" + systemName + "系统的" + moddleName + "模块负责人" + principalName + + "刚刚填写了日报"); + messageAddVO.setType("跳转日报页"); + messageMapper.messageAdd(messageAddVO); + } + + /** + * 添加提醒消息 + * 系统/模块到期提醒 + */ + @Override + public void messageRemind() { + // 当前时间 + LocalDateTime now = LocalDateTime.now(); + // 三天后时间 + LocalDateTime threeDaysLater = now.plusDays(3); + // 七天后时间 + LocalDateTime sevenDaysLater = now.plusDays(7); + // 获取三天后到期的模块 + List projectWorkDOList = projectMapper.getProjectWorkByTime(threeDaysLater); + // 获取七天后到期的模块 + List projectWorkDOList1 = projectMapper.getProjectWorkByTime(sevenDaysLater); + if (!projectWorkDOList1.isEmpty()) { + for (ProjectModuleDO projectWorkDO : projectWorkDOList) { + // 添加消息 + MessageAddVO messageAddVO = new MessageAddVO(); + messageAddVO.setUid(projectWorkDO.getPrincipalId()); + messageAddVO.setTitle("提醒消息"); + String projectName = projectMapper + .tgetProjectById(projectMapper.getWorkById(projectWorkDO.getProjectChildId().intValue()) + .getProjectId().intValue()).getName(); + + String systemName = projectMapper.getWorkById(projectWorkDO.getProjectChildId().intValue()).getName(); + String moddleName = projectWorkDO.getName(); + messageAddVO.setText("您负责的" + projectName + "项目的" + systemName + "系统的" + moddleName + "模块" + + "还有七天就要到期了,请及时处理"); + messageAddVO.setType("Project_module"); + messageAddVO.setToId(projectWorkDO.getId()); + messageMapper.messageAdd(messageAddVO); + } + } + if (!projectWorkDOList.isEmpty()) { + for (ProjectModuleDO projectWorkDO : projectWorkDOList) { + // 添加消息 + MessageAddVO messageAddVO = new MessageAddVO(); + messageAddVO.setUid(projectWorkDO.getPrincipalId()); + messageAddVO.setTitle("提醒消息"); + String projectName = projectMapper + .tgetProjectById(projectMapper.getWorkById(projectWorkDO.getProjectChildId().intValue()) + .getPrincipalId().intValue()).getName(); + + String systemName = projectMapper.getWorkById(projectWorkDO.getProjectChildId().intValue()).getName(); + String moddleName = projectWorkDO.getName(); + messageAddVO.setText("您负责的" + projectName + "项目的" + systemName + "系统的" + moddleName + "模块" + + "还有三天就要到期了,请及时处理"); + messageAddVO.setType("Project_module"); + messageAddVO.setToId(projectWorkDO.getId()); + messageMapper.messageAdd(messageAddVO); + } + } + + // 获取七天后到期的系统 + List projectChildDOList = projectMapper.getProjectChildByTime(sevenDaysLater); + if (!projectChildDOList.isEmpty()) { + for (ProjectChildDO projectChildDO : projectChildDOList) { + // 添加消息 + MessageAddVO messageAddVO = new MessageAddVO(); + messageAddVO.setUid(projectChildDO.getPrincipalId()); + messageAddVO.setTitle("提醒消息"); + String projectName = projectMapper.tgetProjectById(projectChildDO.getProjectId().intValue()).getName(); + String systemName = projectChildDO.getName(); + messageAddVO.setText("您负责的" + projectName + "项目的" + systemName + "系统还有七天就要到期了,请及时处理"); + messageAddVO.setType("Project_child"); + messageAddVO.setToId(projectChildDO.getId()); + messageMapper.messageAdd(messageAddVO); + } + } + // 获取三天后到期的系统 + List projectChildDOList1 = projectMapper.getProjectChildByTime(threeDaysLater); + if (!projectChildDOList1.isEmpty()) { + for (ProjectChildDO projectChildDO : projectChildDOList1) { + // 添加消息 + MessageAddVO messageAddVO = new MessageAddVO(); + messageAddVO.setUid(projectChildDO.getPrincipalId()); + messageAddVO.setTitle("提醒消息"); + String projectName = projectMapper.tgetProjectById(projectChildDO.getProjectId().intValue()).getName(); + String systemName = projectChildDO.getName(); + messageAddVO.setText("您负责的" + projectName + "项目的" + systemName + "系统还有三天就要到期了,请及时处理"); + messageAddVO.setType("Project_child"); + messageAddVO.setToId(projectChildDO.getId()); + messageMapper.messageAdd(messageAddVO); + } + + } } @Override - @CheckUserHasPermission("message.get") - public BaseResponse messageGetAll( - HttpServletRequest request, - LocalDate begin, - LocalDate end, - Long page, - Long pageSize, - Long loginId, - Long uid - ) { - log.info("请求接口服务层"); - //1.记录总数据数 - Long count = messageMapper.count(uid); - - //2.获取分页数据列表 - //默认获取时间为最近30天 - if (begin == null) { - begin = LocalDate.now(); - end = begin.minusDays(30); - } - Long start = (page - 1) * pageSize; - List messageDOList = messageMapper.page(begin, end, uid, start, pageSize); - - //3.封装PageBean对象 - PageBeanDO pageBean = new PageBeanDO<>(count, messageDOList); - return ResultUtil.success(pageBean); + public BaseResponse messageGetById(Long id, Long uid) { + return ResultUtil.success(messageMapper.getMessageById(id)); } - } diff --git a/src/main/java/com/jsl/oa/services/impl/ModuleServiceImpl.java b/src/main/java/com/jsl/oa/services/impl/ModuleServiceImpl.java index d94dff1..7ac2e7a 100644 --- a/src/main/java/com/jsl/oa/services/impl/ModuleServiceImpl.java +++ b/src/main/java/com/jsl/oa/services/impl/ModuleServiceImpl.java @@ -1,11 +1,10 @@ package com.jsl.oa.services.impl; -import com.jsl.oa.dao.ModuleDAO; import com.jsl.oa.dao.ProjectDAO; +import com.jsl.oa.dao.RoleDAO; import com.jsl.oa.dao.UserDAO; import com.jsl.oa.mapper.ModuleMapper; -import com.jsl.oa.mapper.RoleMapper; -import com.jsl.oa.model.dodata.ProjectWorkDO; +import com.jsl.oa.model.dodata.ProjectModuleDO; import com.jsl.oa.model.vodata.ProjectWorkAndNameVO; import com.jsl.oa.services.ModuleService; import com.jsl.oa.utils.BaseResponse; @@ -24,11 +23,10 @@ import java.util.List; @Service @RequiredArgsConstructor public class ModuleServiceImpl implements ModuleService { - private final RoleMapper roleMapper; - private final ModuleDAO moduleDAO; private final ProjectDAO projectDAO; private final ModuleMapper moduleMapper; private final UserDAO userDAO; + private final RoleDAO roleDAO; @Override public BaseResponse getByProjectId(Integer projectId, HttpServletRequest request) { @@ -44,7 +42,7 @@ public class ModuleServiceImpl implements ModuleService { is = 0; } - List projectWorkDOList = moduleMapper.getByProjectId(projectId, userId, is); + List projectWorkDOList = moduleMapper.getByProjectId(projectId, userId, is); return ResultUtil.success(projectWorkDOList); } @@ -63,15 +61,15 @@ public class ModuleServiceImpl implements ModuleService { is = 0; } - List projectWorkDOList = moduleMapper.getBySysId(sysId, userId, is); + List projectWorkDOList = moduleMapper.getBySysId(sysId, userId, is); // 封装VO类 List projectWorkAndNameVOS = new ArrayList<>(); - for (ProjectWorkDO projectWorkDO : projectWorkDOList) { + for (ProjectModuleDO projectWorkDO : projectWorkDOList) { ProjectWorkAndNameVO projectWorkAndNameVO = new ProjectWorkAndNameVO(); Processing.copyProperties(projectWorkDO, projectWorkAndNameVO); // 添加负责人和子系统名称 projectWorkAndNameVO. - setChildSystemName(projectDAO.getProjectWorkerById(projectWorkDO.getPid()).getName()) + setChildSystemName(projectDAO.getProjectWorkerById(projectWorkDO.getProjectChildId()).getName()) .setPrincipalUser(userDAO.getUserById(projectWorkDO.getPrincipalId()).getUsername()); projectWorkAndNameVOS.add(projectWorkAndNameVO); @@ -83,9 +81,8 @@ public class ModuleServiceImpl implements ModuleService { @Override public BaseResponse deleteById(HttpServletRequest request, Long id) { - // 检测是否为管理员 - if (!Processing.checkUserIsAdmin(request, roleMapper)) { + if (!Processing.checkUserIsConsole(request, roleDAO)) { return ResultUtil.error(ErrorCode.NOT_PERMISSION); } @@ -97,9 +94,9 @@ public class ModuleServiceImpl implements ModuleService { // 删除子模块方法 public void deleteMoudule(Long id) { //获取所有父Id=id的子模块 - List projectWorkDOS = moduleMapper.getAllMoudleByPid(id); + List projectWorkDOS = moduleMapper.getAllMoudleByPid(id); - for (ProjectWorkDO workDO : projectWorkDOS) { + for (ProjectModuleDO workDO : projectWorkDOS) { deleteMoudule(workDO.getId()); } diff --git a/src/main/java/com/jsl/oa/services/impl/NewsServiceImpl.java b/src/main/java/com/jsl/oa/services/impl/NewsServiceImpl.java index 6b231eb..3de24b1 100644 --- a/src/main/java/com/jsl/oa/services/impl/NewsServiceImpl.java +++ b/src/main/java/com/jsl/oa/services/impl/NewsServiceImpl.java @@ -1,7 +1,7 @@ package com.jsl.oa.services.impl; -import com.jsl.oa.annotations.CheckUserHasPermission; +import com.jsl.oa.annotations.NeedPermission; 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") + @NeedPermission("news.add") public BaseResponse newsAdd(NewsAddVO newsAddVO, @NotNull HttpServletRequest request) { - log.info("\t> 执行 Service 层 NewsService.newsAdd 方法"); // 拷贝新闻数据到实体类 NewsDO newsDO = new NewsDO(); Processing.copyProperties(newsAddVO, newsDO); diff --git a/src/main/java/com/jsl/oa/services/impl/PermissionServiceImpl.java b/src/main/java/com/jsl/oa/services/impl/PermissionServiceImpl.java index 657dee5..7213797 100644 --- a/src/main/java/com/jsl/oa/services/impl/PermissionServiceImpl.java +++ b/src/main/java/com/jsl/oa/services/impl/PermissionServiceImpl.java @@ -1,24 +1,22 @@ package com.jsl.oa.services.impl; -import com.jsl.oa.annotations.CheckUserHasPermission; import com.jsl.oa.dao.PermissionDAO; import com.jsl.oa.dao.RoleDAO; import com.jsl.oa.dao.UserDAO; -import com.jsl.oa.mapper.PermissionMapper; import com.jsl.oa.model.dodata.PermissionDO; import com.jsl.oa.model.dodata.RoleUserDO; -import com.jsl.oa.model.vodata.PermissionContentVo; -import com.jsl.oa.model.vodata.PermissionEditVO; +import com.jsl.oa.model.vodata.PermissionContentVO; import com.jsl.oa.services.PermissionService; 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.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; import java.util.List; /** @@ -26,32 +24,21 @@ import java.util.List; *
* 用于权限服务层的实现类,实现权限的增删改查,以及用户权限的获取 * - * @since v1.0.0 - * @version v1.1.0 * @author xiao_lfeng | xiangZr-hhh | 176yunxuan + * @version v1.1.0 + * @since v1.0.0 */ @Slf4j @Service @RequiredArgsConstructor public class PermissionServiceImpl implements PermissionService { - private final PermissionMapper permissionMapper; private final RoleDAO roleDAO; private final PermissionDAO permissionDAO; private final UserDAO userDAO; @Override - @CheckUserHasPermission("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") public BaseResponse permissionUser(HttpServletRequest request, Long uid) { - log.info("\t> 执行 Service 层 PermissionService.permissionUserPid 方法"); if (userDAO.isExistUser(uid)) { // 此用户是否为管理员 RoleUserDO roleUserDO = roleDAO.getRoleUserByUid(uid); @@ -70,43 +57,11 @@ public class PermissionServiceImpl implements PermissionService { @Override - @CheckUserHasPermission("permission.get") public BaseResponse permissionGet(HttpServletRequest request) { - log.info("\t> 执行 Service 层 PermissionService.permissionGet 方法"); //获取所有权限数据 - List permissionDOList = permissionMapper.getAllPermission(); - //将数据按父子类封装 - List permissionContentVos = Processing.convertToVoList(permissionDOList); - - return ResultUtil.success(permissionContentVos); - } - - @Override - @CheckUserHasPermission("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) { - return ResultUtil.error(ErrorCode.PERMISSION_NOT_EXIST); - } - //传递要编辑的数据 - Processing.copyProperties(permissionEditVo, permissionDO); - //更新permission - if (!permissionMapper.updatePermission(permissionDO)) { - return ResultUtil.error(ErrorCode.DATABASE_UPDATE_ERROR); - } - return ResultUtil.success(); - } - - @Override - @CheckUserHasPermission("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); - } - return ResultUtil.success(); + List permissionDOList = permissionDAO.getAllPermission(); + List permissionContentVO = new ArrayList<>(); + BeanUtils.copyProperties(permissionDOList, permissionContentVO); + return ResultUtil.success(permissionContentVO); } } diff --git a/src/main/java/com/jsl/oa/services/impl/ProjectServiceImpl.java b/src/main/java/com/jsl/oa/services/impl/ProjectServiceImpl.java index 1396230..f57a39f 100644 --- a/src/main/java/com/jsl/oa/services/impl/ProjectServiceImpl.java +++ b/src/main/java/com/jsl/oa/services/impl/ProjectServiceImpl.java @@ -3,13 +3,12 @@ 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.NeedPermission; import com.jsl.oa.dao.ProjectDAO; +import com.jsl.oa.dao.RoleDAO; import com.jsl.oa.dao.UserDAO; import com.jsl.oa.mapper.ProjectMapper; -import com.jsl.oa.mapper.RoleMapper; import com.jsl.oa.mapper.UserMapper; -import com.jsl.oa.model.dodata.ProjectCuttingDO; import com.jsl.oa.model.dodata.ProjectDO; import com.jsl.oa.model.dodata.UserDO; import com.jsl.oa.model.dodata.info.ProjectShowDO; @@ -48,14 +47,13 @@ public class ProjectServiceImpl implements ProjectService { private final UserMapper userMapper; private final ProjectMapper projectMapper; - private final RoleMapper roleMapper; private final ProjectDAO projectDAO; private final UserDAO userDAO; private final ObjectMapper objectMapper; + private final RoleDAO roleDAO; @Override public BaseResponse projectAdd(HttpServletRequest request, ProjectInfoVO projectAdd) { - log.info("\t> 执行 Service 层 ProjectService.projectAdd 方法"); if (projectAdd.getDescription().isEmpty()) { projectAdd.setDescription("{}"); } else { @@ -73,7 +71,7 @@ public class ProjectServiceImpl implements ProjectService { tag = new StringBuilder(tag.substring(0, tag.length() - 2)); } projectAdd.setTags(open + tag + close); - projectAdd.setFile("{\"URI\":\"" + projectAdd.getFile() + "\"}"); + projectAdd.setFiles("{\"URI\":\"" + projectAdd.getFiles() + "\"}"); projectDAO.projectAdd(projectAdd); @@ -81,78 +79,34 @@ public class ProjectServiceImpl implements ProjectService { } @Override - public BaseResponse projecWorktAdd(HttpServletRequest request, ProjectWorkVO projectWorkVO) { - log.info("\t> 执行 Service 层 ProjectService.projectWorkAdd 方法"); + public BaseResponse projectWorkAdd(HttpServletRequest request, ProjectWorkVO projectWorkVO) { //获取用户id Long userId = Processing.getAuthHeaderToUserId(request); //是否是增加子系统 if (projectWorkVO.getType() == 0) { //是否是老师 - if (Processing.checkUserIsTeacher(request, roleMapper)) { + if (Processing.checkUserIsPrincipal(request, roleDAO)) { projectDAO.projectWorkAdd(projectWorkVO); } else { return ResultUtil.error(ErrorCode.NOT_PERMISSION); } - }//增加子模块 - else { + } else { //是否是子系统的负责人 if (Objects.equals(userId, projectMapper.getPirIdbyWorkid(projectWorkVO.getPid()))) { projectDAO.projectWorkAdd(projectWorkVO); - } else return ResultUtil.error(ErrorCode.NOT_PERMISSION); + } else { + return ResultUtil.error(ErrorCode.NOT_PERMISSION); + } } return ResultUtil.success("添加成功"); } @Override - public BaseResponse tget(Integer id, List tags, List isFinish, Integer page, Integer pageSize) { - log.info("\t> 执行 Service 层 ProjectService.tget 方法"); - //根据id查询 - if (id != null) { - ProjectDO projectDO = projectMapper.tgetProjectById(id); - ProjectSimpleVO projectSimpleVO = new ProjectSimpleVO(); - Processing.projectTosimply(projectSimpleVO, projectDO, userDAO, objectMapper); - return ResultUtil.success(projectSimpleVO); - } + public BaseResponse tGet(List tags, List isFinish, Integer page, Integer pageSize) { - //根据标签查询 - if (tags != null && !tags.isEmpty()) { - List projectDOList = projectDAO.tget(id, isFinish, tags); + List projectDOList = projectDAO.tget(isFinish, tags); - List 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 pageData = projectSimpleVOList.subList(start, - Math.min(end, projectSimpleVOList.size())); - return ResultUtil.success(pageData); - } - - //根据状态查询 - if (isFinish != null && !isFinish.isEmpty()) { - List projectDOList = projectDAO.tget(id, isFinish, tags); - - List 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 pageData = projectSimpleVOList.subList(start, - Math.min(end, projectSimpleVOList.size())); - return ResultUtil.success(pageData); - } - - List projectDOList = projectDAO.tget(id, isFinish, tags); List projectSimpleVOList = new ArrayList<>(); for (ProjectDO projectDO : projectDOList) { ProjectSimpleVO projectSimpleVO1 = new ProjectSimpleVO(); @@ -165,6 +119,7 @@ public class ProjectServiceImpl implements ProjectService { List pageData = projectSimpleVOList.subList(start, Math.min(end, projectSimpleVOList.size())); return ResultUtil.success(pageData); + } @Override @@ -178,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); @@ -225,14 +180,29 @@ 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 方法"); //判断用户是否为老师 或者 项目负责人 - if (!Processing.checkUserIsTeacher(request, roleMapper) || - !projectDAO.isPrincipalUser(Processing.getAuthHeaderToUserId(request), projectId)) { + if (!Processing.checkUserIsPrincipal(request, roleDAO) + || !projectDAO.isPrincipalUser(Processing.getAuthHeaderToUserId(request), projectId)) { return ResultUtil.error(ErrorCode.NOT_PERMISSION); } @@ -246,30 +216,6 @@ public class ProjectServiceImpl implements ProjectService { } - @Override - @CheckUserHasPermission("project.cutting.user.get") - public BaseResponse projectGetUserInCutting(Long uid) { - log.info("\t> 执行 Service 层 ProjectService.projectGetUserInCutting 方法"); - if (userDAO.isExistUser(uid)) { - List projectCuttingDOList = projectDAO.projectGetUserInCutting(uid); - return ResultUtil.success(projectCuttingDOList); - } else { - return ResultUtil.error(ErrorCode.USER_NOT_EXIST); - } - } - - @Override - @CheckUserHasPermission("project.cutting.user.add") - public BaseResponse projectAddUserForCutting(HttpServletRequest request, Long uid, Long pid) { - log.info("\t> 执行 Service 层 ProjectService.projectAddUserForCutting 方法"); - if (userDAO.isExistUser(uid)) { - projectDAO.projectAddUserForCutting(uid, pid); - return ResultUtil.success(); - } else { - return ResultUtil.error(ErrorCode.USER_NOT_EXIST); - } - } - @Override public BaseResponse getHeader(Integer id) { log.info("\t> 执行 Service 层 InfoService.getHeader 方法"); @@ -286,9 +232,8 @@ public class ProjectServiceImpl implements ProjectService { } @Override - @CheckUserHasPermission("info.project.add") + @NeedPermission("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); @@ -313,9 +258,8 @@ public class ProjectServiceImpl implements ProjectService { } @Override - @CheckUserHasPermission("info.project.del") + @NeedPermission("info.project.del") public BaseResponse delHeader(Integer id, HttpServletRequest request) { - log.info("\t> 执行 Service 层 InfoService.delHeader 方法"); // 获取展示信息 ProjectShowDO projectShowDO = projectDAO.getHeader(); // 删除指定展示id @@ -332,9 +276,8 @@ public class ProjectServiceImpl implements ProjectService { } @Override - @CheckUserHasPermission("info.project.edit") + @NeedPermission("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); @@ -361,160 +304,36 @@ public class ProjectServiceImpl implements ProjectService { } @Override - public BaseResponse get(Integer listAll, HttpServletRequest request, List tags, List isFinish, Integer page, Integer pageSize) { - log.info("\t> 执行 Service 层 ProjectService.get 方法"); - - //获取用户 - Long userId = Processing.getAuthHeaderToUserId(request); - //根据标签查询 - if (tags != null && !tags.isEmpty()) { - List projectDOList = projectDAO.get(userId, listAll, tags, isFinish); - - List 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 pageData = projectSimpleVOList.subList(start, - Math.min(end, projectSimpleVOList.size())); - return ResultUtil.success(pageData); - } - - //根据状态查询 - if (isFinish != null && !isFinish.isEmpty()) { - List projectDOList = projectDAO.get(userId, listAll, tags, isFinish); - List 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 pageData = projectSimpleVOList.subList(start, - Math.min(end, projectSimpleVOList.size())); - return ResultUtil.success(pageData); - } - - - //判断是否是老师(项目负责人) - if (listAll != null && Processing.checkUserIsTeacher(request, roleMapper)) { - List projectDOList = projectDAO.get(userId, listAll, tags, isFinish); - List 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 pageData = projectSimpleVOList.subList(start, - Math.min(end, projectSimpleVOList.size())); - return ResultUtil.success(pageData); - } else { - listAll = 0; - List projectDOList = projectDAO.get(userId, listAll, tags, isFinish); - List 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 pageData = projectSimpleVOList.subList(start, - Math.min(end, projectSimpleVOList.size())); - return ResultUtil.success(pageData); - } - - } - - @Override - public BaseResponse workget(Integer listAll, HttpServletRequest request, List tags, List isFinish, Integer is, Integer page, Integer pageSize) { - log.info("\t> 执行 Service 层 ProjectService.workget 方法"); - + public BaseResponse workGet( + HttpServletRequest request, + List tags, + List isFinish, + Integer is, + Integer page, + Integer pageSize + ) { //获取用户 Long userId = Processing.getAuthHeaderToUserId(request); - //根据标签查询 - if (tags != null && !tags.isEmpty()) { - List projectDOList = projectDAO.workget(userId, listAll, tags, isFinish, is); - List 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 pageData = projectSimpleVOList.subList(start, - Math.min(end, projectSimpleVOList.size())); - return ResultUtil.success(pageData); + List projectDOList = projectDAO.workget(userId, tags, isFinish, is); + List 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 pageData = projectSimpleVOList.subList(start, + Math.min(end, projectSimpleVOList.size())); - //根据状态查询 - if (isFinish != null && !isFinish.isEmpty()) { - List projectDOList = projectDAO.workget(userId, listAll, tags, isFinish, is); - List 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 pageData = projectSimpleVOList.subList(start, - Math.min(end, projectSimpleVOList.size())); - return ResultUtil.success(pageData); - } + return ResultUtil.success(pageData); - - //判断是否是老师(项目负责人) - if (listAll != null && Processing.checkUserIsTeacher(request, roleMapper)) { - List projectDOList = projectDAO.workget(userId, listAll, tags, isFinish, is); - List 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 pageData = projectSimpleVOList.subList(start, - Math.min(end, projectSimpleVOList.size())); - return ResultUtil.success(pageData); - } else { - listAll = 0; - List projectDOList = projectDAO.workget(userId, listAll, tags, isFinish, is); - List 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 pageData = projectSimpleVOList.subList(start, - Math.min(end, projectSimpleVOList.size())); - return ResultUtil.success(pageData); - } } - @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 { @@ -524,10 +343,9 @@ public class ProjectServiceImpl implements ProjectService { @Override public BaseResponse projectDelete(HttpServletRequest request, List id) { - log.info("\t> 执行 Service 层 ProjectService.projectDelete 方法"); //判断用户是否为老师 或者 项目负责人 - if (!Processing.checkUserIsTeacher(request, roleMapper)) { + if (!Processing.checkUserIsPrincipal(request, roleDAO)) { return ResultUtil.error(ErrorCode.NOT_PERMISSION); } @@ -541,57 +359,4 @@ public class ProjectServiceImpl implements ProjectService { } return ResultUtil.success(); } - - @Override - @CheckUserHasPermission("project.cutting.add") - public BaseResponse addProjectCutting(HttpServletRequest request, ProjectCuttingAddVO projectCuttingAddVO) { - log.info("\t> 执行 Service 层 ProjectService.projectCuttingAdd方法"); - //赋值数据 - ProjectCuttingDO projectCuttingDO = new ProjectCuttingDO(); - Processing.copyProperties(projectCuttingAddVO, projectCuttingDO); - //根据pid检测项目是否存在 - if (!projectDAO.isExistProjectById(projectCuttingAddVO.getPid())) { - return ResultUtil.error(ErrorCode.PROJECT_NOT_EXIST); - } - //向数据库添加数据 - projectDAO.projectCuttingAdd(projectCuttingDO); - return ResultUtil.success(); - } - - @Override - @CheckUserHasPermission("project.cutting.edit") - public BaseResponse editProjectCutting(HttpServletRequest request, ProjectCuttingEditVO projectCuttingEditVO) { - log.info("\t> 执行 Service 层 ProjectService.projectCuttingEdit方法"); - //赋值数据 - ProjectCuttingDO projectCuttingDO = new ProjectCuttingDO(); - Processing.copyProperties(projectCuttingEditVO, projectCuttingDO); - //根据id检测项目模块是否存在 - if (!projectDAO.isExistProjectCutting(projectCuttingEditVO.getId())) { - return ResultUtil.error(ErrorCode.PROJECT_CUTTING_NOT_EXIST); - } - //向数据库添加数据 - projectDAO.updateProjectCutting(projectCuttingDO); - return ResultUtil.success(); - } - - @Override - @CheckUserHasPermission("project.cutting.delete") - public BaseResponse projectToOtherUserForCutting(HttpServletRequest request, Long oldUid, Long pid, Long newUid) { - log.info("\t> 执行 Service 层 ProjectService.projectToOtherUserForCutting方法"); - //检测新旧用户是否存在 - if (!userDAO.isExistUser(oldUid) || !userDAO.isExistUser(newUid)) { - return ResultUtil.error(ErrorCode.USER_NOT_EXIST); - } - //用户项目表是否含有对应记录 - if (!projectDAO.isExistProjectUser(pid, oldUid)) { - return ResultUtil.error(ErrorCode.PROJECT_USER_NOT_EXIST); - } - //更新数据 - if (!projectDAO.updateUserForProjectUserByPidAndUid(pid, oldUid, newUid)) { - return ResultUtil.error(ErrorCode.DATABASE_UPDATE_ERROR); - } - return ResultUtil.success(); - } - - } diff --git a/src/main/java/com/jsl/oa/services/impl/ReviewServiceImpl.java b/src/main/java/com/jsl/oa/services/impl/ReviewServiceImpl.java new file mode 100644 index 0000000..b537ee8 --- /dev/null +++ b/src/main/java/com/jsl/oa/services/impl/ReviewServiceImpl.java @@ -0,0 +1,452 @@ +package com.jsl.oa.services.impl; + + +import com.jsl.oa.common.constant.ReviewConstants; +import com.jsl.oa.dao.ProjectDAO; +import com.jsl.oa.dao.ReviewDAO; +import com.jsl.oa.dao.UserDAO; +import com.jsl.oa.mapper.ProjectMapper; +import com.jsl.oa.mapper.UserMapper; +import com.jsl.oa.model.dodata.ProjectChildDO; +import com.jsl.oa.model.dodata.ProjectDO; +import com.jsl.oa.model.dodata.ProjectModuleDO; +import com.jsl.oa.model.dodata.ReviewDO; +import com.jsl.oa.model.vodata.ReviewAddVO; +import com.jsl.oa.model.vodata.ReviewDataVO; +import com.jsl.oa.model.vodata.ReviewUpdateResultVO; +import com.jsl.oa.model.vodata.ReviewVO; +import com.jsl.oa.services.ReviewService; +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.springframework.stereotype.Service; + +import javax.servlet.http.HttpServletRequest; +import java.util.*; +import java.util.stream.Collectors; + +@Slf4j +@Service +@RequiredArgsConstructor +public class ReviewServiceImpl implements ReviewService { + + private final UserDAO userDAO; + private final ReviewDAO reviewDAO; + private final ProjectDAO projectDAO; + + private final UserMapper userMapper; + private final ProjectMapper projectMapper; + + + @Override + public BaseResponse getUserPendingApprovalReview(Integer page, + Integer pageSize, + HttpServletRequest request) { + //获取用户 + Long userId = Processing.getAuthHeaderToUserId(request); + + + //存储审核数据的数组 + List reviewData = new ArrayList<>(); + + //先获取用户为项目负责人的项目列表 + projectDAO.getProjectByPrincipalUser(userId); + + //先从用户为 项目负责人 的项目中获取对应 审核信息 + for (ProjectDO projectDO : projectDAO.getProjectByPrincipalUser(userId)) { + //查询每个项目下所有的审核信息 + List reviewDOS = reviewDAO. + selectApprovedResultReviewFromProject(projectDO.getId(), + ReviewConstants.PENDING); + //封装VO类 + reviewData.addAll(reviewDOS); + } + + //在从用户为 子系统负责人 的项目中获取对应 审核信息 + for (ProjectChildDO projectChildDO : projectDAO.getAllProjectChildByUId(userId)) { + //查询每个项目下状态为2的审核信息 + List reviewDOS = reviewDAO. + selectApprovedResultReviewsFromSubsystem(projectChildDO.getId(), + ReviewConstants.PENDING); + //封装VO类 + reviewData.addAll(reviewDOS); + } + + + //在从用户为 子模块负责人 的项目中获取对应 审核信息 + for (ProjectModuleDO projectModuleDO : projectDAO.getAllModuleByUId(userId)) { + //查询每个项目下所有的审核信息 + List reviewDOS = reviewDAO. + selectApprovedResultReviewsFromSubModule(projectModuleDO.getId(), + ReviewConstants.PENDING); + //封装VO类 + reviewData.addAll(reviewDOS); + } + + + //根据id进行去重 + reviewData = reviewData.stream() + .collect(Collectors.toMap(ReviewDO::getId, review -> review, (existing, replacement) -> existing)) + .values() + .stream() + .collect(Collectors.toList()); + + + //按照申请时间降序排序 + Collections.sort(reviewData, new Comparator() { + @Override + public int compare(ReviewDO review1, ReviewDO review2) { + return review2.getApplicationTime().compareTo(review1.getApplicationTime()); + } + }); + + //封装对应VO类 + List result = encapsulateArrayClass(reviewData); + + //封装结果类与数据总数 + ReviewDataVO reviewDataVO = getReviewsByPage(result, page, pageSize); + + return ResultUtil.success(reviewDataVO); + } + + + @Override + public BaseResponse getUserReview(Integer page, + Integer pageSize, + HttpServletRequest request) { + + //获取用户 + Long userId = Processing.getAuthHeaderToUserId(request); + + //存储审核数据的数组 + List reviewData = new ArrayList<>(); + + //先获取用户为项目负责人的项目列表 + projectDAO.getProjectByPrincipalUser(userId); + + //先从用户为 项目负责人 的项目中获取对应 审核信息 + for (ProjectDO projectDO : projectDAO.getProjectByPrincipalUser(userId)) { + //查询每个项目下所有的审核信息 + List reviewDOS = reviewDAO. + selectAllReviewFromProject(projectDO.getId()); + //封装VO类 + reviewData.addAll(reviewDOS); + } + + //在从用户为 子系统负责人 的项目中获取对应 审核信息 + for (ProjectChildDO projectChildDO : projectDAO.getAllProjectChildByUId(userId)) { + //查询每个项目下所有的审核信息 + List reviewDOS = reviewDAO. + selectReviewFromSubsystem(projectChildDO.getId()); + //封装VO类 + reviewData.addAll(reviewDOS); + } + + + //在从用户为 子模块负责人 的项目中获取对应 审核信息 + for (ProjectModuleDO projectModuleDO : projectDAO.getAllModuleByUId(userId)) { + //查询每个项目下所有的审核信息 + List reviewDOS = reviewDAO. + selectReviewFromSubmodule(projectModuleDO.getId()); + //封装VO类 + reviewData.addAll(reviewDOS); + } + + //根据id进行去重 + reviewData = reviewData.stream() + .collect(Collectors.toMap(ReviewDO::getId, review -> review, (existing, replacement) -> existing)) + .values() + .stream() + .collect(Collectors.toList()); + + //按照申请时间降序排序 + Collections.sort(reviewData, new Comparator() { + @Override + public int compare(ReviewDO review1, ReviewDO review2) { + return review2.getApplicationTime().compareTo(review1.getApplicationTime()); + } + }); + + //封装对应VO类 + List result = encapsulateArrayClass(reviewData); + + //封装结果类与数据总数 + ReviewDataVO reviewDataVO = getReviewsByPage(result, page, pageSize); + + return ResultUtil.success(reviewDataVO); + } + + + @Override + public BaseResponse addReview(ReviewAddVO reviewAddVO, HttpServletRequest request) { + + //获取用户 + Long userId = Processing.getAuthHeaderToUserId(request); + + //定义要添加的审核实体类 + ReviewDO reviewDO = new ReviewDO(); + //现将属性相同的值拷贝 + Processing.copyProperties(reviewAddVO, reviewDO); + + //定义审核的类型(子模块id为空则为 子系统类型,否则为子模块类型) + if (reviewAddVO.getProjectModuleId() == null) { + reviewDO.setCategory(ReviewConstants.SUBSYSTEM); + } else if (reviewAddVO.getProjectModuleId() != null) { + reviewDO.setCategory(ReviewConstants.SUBMODULE); + } + + //定义申请者id + reviewDO.setSenderId(userId); + //添加数据 + reviewDAO.addReview(reviewDO); + + return ResultUtil.success("申请成功"); + } + + + @Override + public BaseResponse updateReviewResult(ReviewUpdateResultVO reviewUpdateResultVO, HttpServletRequest request) { + + //获取当前用户 + Long userId = Processing.getAuthHeaderToUserId(request); + + //获取对应审核信息 + ReviewDO reviewDO = reviewDAO.selectReviewById(reviewUpdateResultVO.getId()); + + if (reviewDO == null) { + return ResultUtil.error(ErrorCode.REVIEW_NOT_EXIST); + } + + //设置对应属性 + reviewDO.setReviewTime(new Date()); + reviewDO.setRecipientId(userId); + reviewDO.setReviewResult(reviewUpdateResultVO.getResult()); + + //更新数据 + reviewDAO.updateReview(reviewDO); + + return ResultUtil.success(); + } + + + + @Override + public BaseResponse searchReview(String content, + Short statue, + HttpServletRequest request, + Integer page, Integer pageSize) { + + List reviewVOS = new ArrayList<>(); + +// 根据判断结果筛选 + if (statue == null || statue.equals("")) { + List reviewVOs = getReview(request); + reviewVOS.addAll(reviewVOs); + } else { + List reviewVOs = getReviewsByResult(request, statue); + reviewVOS.addAll(reviewVOs); + } + +// 根据内容筛选 + if (content == null || content.equals("")) { + //封装结果类与数据总数 + ReviewDataVO reviewDataVO = getReviewsByPage(reviewVOS, page, pageSize); + + return ResultUtil.success(reviewDataVO); + } else { + reviewVOS = reviewVOS.stream() + .filter(reviewVO -> reviewVO.getName().contains(content) || reviewVO.getContent().contains(content)) + .collect(Collectors.toList()); + } + + + //封装结果类与数据总数 + ReviewDataVO reviewDataVO = getReviewsByPage(reviewVOS, page, pageSize); + + return ResultUtil.success(reviewDataVO); + } + + + + private List getReview(HttpServletRequest request) { + //获取用户 + Long userId = Processing.getAuthHeaderToUserId(request); + + //存储审核数据的数组 + List reviewData = new ArrayList<>(); + + //先获取用户为项目负责人的项目列表 + projectDAO.getProjectByPrincipalUser(userId); + + //先从用户为 项目负责人 的项目中获取对应 审核信息 + for (ProjectDO projectDO : projectDAO.getProjectByPrincipalUser(userId)) { + //查询每个项目下所有的审核信息 + List reviewDOS = reviewDAO. + selectAllReviewFromProject(projectDO.getId()); + //封装VO类 + reviewData.addAll(reviewDOS); + } + + //在从用户为 子系统负责人 的项目中获取对应 审核信息 + for (ProjectChildDO projectChildDO : projectDAO.getAllProjectChildByUId(userId)) { + //查询每个项目下所有的审核信息 + List reviewDOS = reviewDAO. + selectReviewFromSubsystem(projectChildDO.getId()); + //封装VO类 + reviewData.addAll(reviewDOS); + } + + + //在从用户为 子模块负责人 的项目中获取对应 审核信息 + for (ProjectModuleDO projectModuleDO : projectDAO.getAllModuleByUId(userId)) { + //查询每个项目下所有的审核信息 + List reviewDOS = reviewDAO. + selectReviewFromSubmodule(projectModuleDO.getId()); + //封装VO类 + reviewData.addAll(reviewDOS); + } + + //根据id进行去重 + reviewData = reviewData.stream() + .collect(Collectors.toMap(ReviewDO::getId, review -> review, (existing, replacement) -> existing)) + .values() + .stream() + .collect(Collectors.toList()); + + //按照申请时间降序排序 + Collections.sort(reviewData, new Comparator() { + @Override + public int compare(ReviewDO review1, ReviewDO review2) { + return review2.getApplicationTime().compareTo(review1.getApplicationTime()); + } + }); + + //封装对应VO类 + List result = encapsulateArrayClass(reviewData); + + return result; + } + + + /** + * @Description: 封装审核的VO类 + * @Date: 2024/4/11 + * @Param reviewDOS: + **/ + public List encapsulateArrayClass(List reviewDOS) { + +// 定义封装类结果集数组 + List resultData = new ArrayList<>(); + + for (ReviewDO reviewDO : reviewDOS) { + ReviewVO reviewVO = new ReviewVO(); +// 现将相同的属性赋值 + Processing.copyProperties(reviewDO, reviewVO); +// 赋值其他非空属性 + reviewVO.setCategory(Processing.turnReviewCategory(reviewDO.getCategory())) + .setSenderName(userMapper.getUserById(reviewDO.getSenderId()).getNickname()) + .setProjectName(projectDAO.getProjectById(reviewDO.getProjectId()).getName()) + .setProjectChildName(projectMapper.getProjectChildById( + Math.toIntExact(reviewDO.getProjectChildId())).getName()) + .setResult(Processing.turnReviewResult(reviewDO.getReviewResult())); +// 赋值可为空属性并进行判断 + if (reviewDO.getRecipientId() != null) { + reviewVO.setRecipientName(userMapper.getUserById(reviewDO.getRecipientId()).getNickname()); + } + if (reviewDO.getProjectModuleId() != null) { + reviewVO.setProjectModuleName( + reviewDAO.getNameByModule(Math.toIntExact(reviewDO.getProjectModuleId()))); + } else { + reviewVO.setProjectModuleName("无"); + } +// 将封装好的结果添加到结果集 + resultData.add(reviewVO); + } + + return resultData; + } + + + public List getReviewsByResult( + HttpServletRequest request, + Short result) { + +// 获取用户 + Long userId = Processing.getAuthHeaderToUserId(request); + + //存储审核数据的数组 + List reviewData = new ArrayList<>(); + + //先获取用户为项目负责人的项目列表 + projectDAO.getProjectByPrincipalUser(userId); + + //先从用户为 项目负责人 的项目中获取对应 审核信息 + for (ProjectDO projectDO : projectDAO.getProjectByPrincipalUser(userId)) { + //查询每个项目下所有的审核信息 + List reviewDOS = reviewDAO. + selectApprovedResultReviewFromProject(projectDO.getId(), + result); + //封装VO类 + reviewData.addAll(reviewDOS); + } + + //在从用户为 子系统负责人 的项目中获取对应 审核信息 + for (ProjectChildDO projectChildDO : projectDAO.getAllProjectChildByUId(userId)) { + //查询每个项目下状态为2的审核信息 + List reviewDOS = reviewDAO. + selectApprovedResultReviewsFromSubsystem(projectChildDO.getId(), + result); + //封装VO类 + reviewData.addAll(reviewDOS); + } + + + //在从用户为 子模块负责人 的项目中获取对应 审核信息 + for (ProjectModuleDO projectModuleDO : projectDAO.getAllModuleByUId(userId)) { + //查询每个项目下所有的审核信息 + List reviewDOS = reviewDAO. + selectApprovedResultReviewsFromSubModule(projectModuleDO.getId(), + result); + //封装VO类 + reviewData.addAll(reviewDOS); + } + + + //根据id进行去重 + reviewData = reviewData.stream() + .collect(Collectors.toMap(ReviewDO::getId, review -> review, (existing, replacement) -> existing)) + .values() + .stream() + .collect(Collectors.toList()); + + + //按照申请时间降序排序 + Collections.sort(reviewData, new Comparator() { + @Override + public int compare(ReviewDO review1, ReviewDO review2) { + return review2.getApplicationTime().compareTo(review1.getApplicationTime()); + } + }); + + return encapsulateArrayClass(reviewData); + } + + + public ReviewDataVO getReviewsByPage(List allReviews, int page, int pageSize) { + ReviewDataVO reviewDataVO = new ReviewDataVO(); + int total = allReviews.size(); + int startIndex = (page - 1) * pageSize; + int endIndex = Math.min(startIndex + pageSize, total); + List reviewsOnPage = allReviews.subList(startIndex, endIndex); + + reviewDataVO.setReviews(reviewsOnPage); + reviewDataVO.setDataTotal(total); + + return reviewDataVO; + } +} + + diff --git a/src/main/java/com/jsl/oa/services/impl/RoleServiceImpl.java b/src/main/java/com/jsl/oa/services/impl/RoleServiceImpl.java index 260f68c..e188e6e 100644 --- a/src/main/java/com/jsl/oa/services/impl/RoleServiceImpl.java +++ b/src/main/java/com/jsl/oa/services/impl/RoleServiceImpl.java @@ -1,6 +1,6 @@ package com.jsl.oa.services.impl; -import com.jsl.oa.annotations.CheckUserHasPermission; +import com.jsl.oa.annotations.NeedPermission; import com.jsl.oa.dao.RoleDAO; import com.jsl.oa.dao.UserDAO; import com.jsl.oa.exception.ClassCopyException; @@ -42,10 +42,9 @@ public class RoleServiceImpl implements RoleService { private final UserDAO userDAO; @Override - @CheckUserHasPermission("role.add") + @NeedPermission("role.add") public BaseResponse roleAddUser(HttpServletRequest request, Long uid, Long rid) { - log.info("\t> 执行 Service 层 RoleService.addRoleUser 方法"); - if (Processing.checkUserIsAdmin(request, roleDAO.roleMapper)) { + if (Processing.checkUserIsConsole(request, roleDAO)) { roleDAO.addRoleUser(uid, rid); return ResultUtil.success(); } else { @@ -56,8 +55,7 @@ public class RoleServiceImpl implements RoleService { @Override public BaseResponse roleRemoveUser(HttpServletRequest request, Long uid) { - log.info("\t> 执行 Service 层 RoleService.delRoleUser 方法"); - if (Processing.checkUserIsAdmin(request, roleDAO.roleMapper)) { + if (Processing.checkUserIsConsole(request, roleDAO)) { roleDAO.delRoleUser(uid); return ResultUtil.success(); } else { @@ -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); @@ -77,7 +74,7 @@ public class RoleServiceImpl implements RoleService { return ResultUtil.error(ErrorCode.USER_NOT_CHANGE_TO_THEMSELVES); } //检测用户权限是否为管理员 - if (Processing.checkUserIsAdmin(request, roleDAO.roleMapper)) { + if (Processing.checkUserIsConsole(request, roleDAO)) { if (roleDAO.roleChangeUser(uid, rid)) { return ResultUtil.success(); } else { @@ -90,9 +87,8 @@ public class RoleServiceImpl implements RoleService { @Override public BaseResponse roleGet(HttpServletRequest request, String id) { - log.info("\t> 执行 Service 层 RoleService.roleGet 方法"); // 检查用户权限 - if (!Processing.checkUserIsAdmin(request, roleDAO.roleMapper)) { + if (!Processing.checkUserIsConsole(request, roleDAO)) { return ResultUtil.error(ErrorCode.NOT_ADMIN); } // 获取 Role 权限组 @@ -117,9 +113,8 @@ public class RoleServiceImpl implements RoleService { @Override public BaseResponse roleEdit(HttpServletRequest request, RoleEditVO roleEditVO) { - log.info("\t> 执行 Service 层 RoleService.roleEdit 方法"); // 检查用户权限 - if (!Processing.checkUserIsAdmin(request, roleDAO.roleMapper)) { + if (!Processing.checkUserIsConsole(request, roleDAO)) { return ResultUtil.error(ErrorCode.NOT_ADMIN); } // 获取 Role 相关信息 @@ -141,9 +136,8 @@ public class RoleServiceImpl implements RoleService { @Override public BaseResponse roleDelete(HttpServletRequest request, Long id) { - log.info("\t> 执行 Service 层 RoleService.roleDelete 方法"); // 检查用户权限 - if (!Processing.checkUserIsAdmin(request, roleDAO.roleMapper)) { + if (!Processing.checkUserIsConsole(request, roleDAO)) { return ResultUtil.error(ErrorCode.NOT_ADMIN); } // 获取 Role 相关信息 @@ -163,9 +157,8 @@ 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.roleMapper)) { + if (!Processing.checkUserIsConsole(request, roleDAO)) { return ResultUtil.error(ErrorCode.NOT_ADMIN); } // 检查权限名称是否重复 diff --git a/src/main/java/com/jsl/oa/services/impl/TagServiceImpl.java b/src/main/java/com/jsl/oa/services/impl/TagServiceImpl.java index 622377f..2de0120 100644 --- a/src/main/java/com/jsl/oa/services/impl/TagServiceImpl.java +++ b/src/main/java/com/jsl/oa/services/impl/TagServiceImpl.java @@ -37,7 +37,6 @@ public class TagServiceImpl implements TagService { */ @Override public BaseResponse getTagsProjectList(Integer page, Integer limit, String order) { - log.info("[Service] 请求 getTagsProjectList 接口"); // 获取标签列表 ArrayList getTagList = tagDAO.getTagsProjectList(page, limit, order); return ResultUtil.success(getTagList); diff --git a/src/main/java/com/jsl/oa/services/impl/UserServiceImpl.java b/src/main/java/com/jsl/oa/services/impl/UserServiceImpl.java index c25c4ed..134a190 100755 --- a/src/main/java/com/jsl/oa/services/impl/UserServiceImpl.java +++ b/src/main/java/com/jsl/oa/services/impl/UserServiceImpl.java @@ -1,12 +1,9 @@ package com.jsl.oa.services.impl; -import com.jsl.oa.annotations.CheckUserAbleToUse; -import com.jsl.oa.annotations.CheckUserHasPermission; -import com.jsl.oa.dao.PermissionDAO; +import com.google.gson.Gson; +import com.jsl.oa.annotations.UserAbleToUse; import com.jsl.oa.dao.RoleDAO; import com.jsl.oa.dao.UserDAO; -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.*; import com.jsl.oa.services.UserService; @@ -22,7 +19,6 @@ import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletRequest; import java.util.ArrayList; -import java.util.List; import java.util.regex.Pattern; /** @@ -40,10 +36,9 @@ import java.util.regex.Pattern; @Service @RequiredArgsConstructor public class UserServiceImpl implements UserService { - private final UserDAO userDAO; private final RoleDAO roleDAO; - private final PermissionDAO permissionDAO; + private final Gson gson; @Override public UserDO getUserInfoByUsername(String username) { @@ -52,10 +47,9 @@ 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.roleMapper)) { + if (!Processing.checkUserIsConsole(request, roleDAO)) { return ResultUtil.error(ErrorCode.NOT_ADMIN); } // 用户是否已删除 @@ -72,20 +66,20 @@ 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.roleMapper)) { + if (!Processing.checkUserIsConsole(request, roleDAO)) { return ResultUtil.error(ErrorCode.NOT_ADMIN); } //判断用户是否存在 if (userDAO.isExistUser(id)) { userDAO.userLock(id, isLock); return ResultUtil.success("更改成功"); - } else return ResultUtil.error(ErrorCode.USER_NOT_EXIST); + } else { + return ResultUtil.error(ErrorCode.USER_NOT_EXIST); + } } @Override public BaseResponse userEditProfile(@NotNull UserEditProfileVO userEditProfileVO) { - log.info("\t> 执行 Service 层 UserService.userEditProfile 方法"); if (userDAO.isExistUser(userEditProfileVO.getId())) { userDAO.userEditProfile(userEditProfileVO); return ResultUtil.success("修改成功"); @@ -95,9 +89,7 @@ public class UserServiceImpl implements UserService { } @Override - @CheckUserHasPermission("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); @@ -130,41 +122,21 @@ public class UserServiceImpl implements UserService { } @Override - @CheckUserAbleToUse - public BaseResponse userCurrent(HttpServletRequest request, String id, String username, String email, String phone) { - log.info("\t> 执行 Service 层 UserService.userCurrent 方法"); + @UserAbleToUse + public BaseResponse userCurrent( + HttpServletRequest request, + String id, + String username, + String email, + String phone + ) { + UserDO userDO; if (id == null && username == null && email == null && phone == null) { // Token获取信息 - UserDO userDO = userDAO.getUserById(Processing.getAuthHeaderToUserId(request)); - if (userDO != null) { - return ResultUtil.success(Processing.returnUserInfo(userDO, roleDAO, permissionDAO)); - } else { - return ResultUtil.error(ErrorCode.USER_NOT_EXIST); - } + userDO = userDAO.getUserById(Processing.getAuthHeaderToUserId(request)); } else { - // 检查是否是管理员用户 - Long userId = Processing.getAuthHeaderToUserId(request); - if (userId != null) { - List getPermission = permissionDAO.getPermission(userId); - // 匹配权限 - if (!getPermission.contains("user.current")) { - log.info("\t> 用户权限不足,检查是否是管理员"); - // 检查用户是管理员 - RoleUserDO roleUserDO = roleDAO.roleMapper.getRoleUserByUid(Processing.getAuthHeaderToUserId(request)); - if (roleUserDO != null) { - RoleDO roleDO = roleDAO.roleMapper.getRoleByRoleName("admin"); - if (!roleUserDO.getRid().equals(roleDO.getId())) { - return ResultUtil.error(ErrorCode.NOT_PERMISSION); - } - } else { - return ResultUtil.error(ErrorCode.NOT_PERMISSION); - } - } - } else { - return ResultUtil.error(ErrorCode.TOKEN_NOT_EXIST); - } // 根据顺序优先级进行用户信息获取 - UserDO userDO = null; + userDO = null; if (id != null && !id.isEmpty()) { userDO = userDAO.getUserById(Long.valueOf(id)); } else if (username != null && !username.isEmpty()) { @@ -174,21 +146,20 @@ public class UserServiceImpl implements UserService { } else if (phone != null && !phone.isEmpty()) { userDO = userDAO.getUserByPhone(phone); } - // 返回结果 - if (userDO != null) { - return ResultUtil.success(Processing.returnUserInfo(userDO, roleDAO, permissionDAO)); - } else { - return ResultUtil.error(ErrorCode.USER_NOT_EXIST); - } + } + // 返回结果 + if (userDO != null) { + return ResultUtil.success(Processing.returnUserInfo(userDO, roleDAO, gson)); + } else { + return ResultUtil.error(ErrorCode.USER_NOT_EXIST); } } @Override public BaseResponse userAdd(UserAddVO userAddVo, HttpServletRequest request) { - log.info("\t> 执行 Service 层 UserService.userAdd 方法"); // 检测用户是否为管理员 - if (!Processing.checkUserIsAdmin(request, roleDAO.roleMapper)) { + if (!Processing.checkUserIsConsole(request, roleDAO)) { return ResultUtil.error(ErrorCode.NOT_ADMIN); } //如果用户不重复,添加用户 @@ -216,15 +187,16 @@ public class UserServiceImpl implements UserService { } else { return ResultUtil.error(ErrorCode.DATABASE_INSERT_ERROR); } - } else return ResultUtil.error(ErrorCode.USER_EXIST); + } else { + return ResultUtil.error(ErrorCode.USER_EXIST); + } } @Override public BaseResponse userEdit(UserEditVO userEditVO, HttpServletRequest request) { - log.info("\t> 执行 Service 层 userEdit 方法"); // 检测用户是否为管理员 - if (!Processing.checkUserIsAdmin(request, roleDAO.roleMapper)) { + if (!Processing.checkUserIsConsole(request, roleDAO)) { return ResultUtil.error(ErrorCode.NOT_ADMIN); } //根据id获取用户信息 @@ -256,13 +228,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()).getRoleName()); + userProfileVo.setRole(roleDAO.getRoleByUserId(userDO.getId()).getRoleName()); userProfileVo.setSex(Processing.getSex(userDO.getSex())); return ResultUtil.success(userProfileVo); } diff --git a/src/main/java/com/jsl/oa/services/timese/MessageTimeTask.java b/src/main/java/com/jsl/oa/services/timese/MessageTimeTask.java new file mode 100644 index 0000000..e998487 --- /dev/null +++ b/src/main/java/com/jsl/oa/services/timese/MessageTimeTask.java @@ -0,0 +1,20 @@ +package com.jsl.oa.services.timese; + + +import com.jsl.oa.services.MessageService; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +@Component +public class MessageTimeTask { + @Resource + private MessageService messageService; + + // 每天0点执行一次 + @Scheduled(cron = "0 0 0 * * ?") + public void messageRemind() { + messageService.messageRemind(); + } +} diff --git a/src/main/java/com/jsl/oa/utils/BaseResponse.java b/src/main/java/com/jsl/oa/utils/BaseResponse.java index 7ee8729..9d8a87b 100755 --- a/src/main/java/com/jsl/oa/utils/BaseResponse.java +++ b/src/main/java/com/jsl/oa/utils/BaseResponse.java @@ -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("============================================================"); } } diff --git a/src/main/java/com/jsl/oa/utils/ErrorCode.java b/src/main/java/com/jsl/oa/utils/ErrorCode.java index 26ba713..05e988d 100755 --- a/src/main/java/com/jsl/oa/utils/ErrorCode.java +++ b/src/main/java/com/jsl/oa/utils/ErrorCode.java @@ -51,7 +51,9 @@ public enum ErrorCode { PROJECT_NOT_EXIST("ProjectNotExist", 40016, "项目不存在"), PROJECT_CUTTING_NOT_EXIST("ProjectCuttingNotExist", 40017, "项目分割模块不存在"), PROJECT_USER_NOT_EXIST("ProjectUserNotExist", 40018, "用户项目表无对应记录"), - PROJECT_FILE_JSON_ERROR("ProjectFileJsonError", 40019, "项目文件json格式错误"); + PROJECT_FILE_JSON_ERROR("ProjectFileJsonError", 40019, "项目文件json格式错误"), + PROJECT_NOT_USER("ProjectNotUser", 40020, "项目无此用户"), + REVIEW_NOT_EXIST("ReviewNotExit", 40101, "未找到对应审核信息"); private final String output; diff --git a/src/main/java/com/jsl/oa/utils/JwtUtil.java b/src/main/java/com/jsl/oa/utils/JwtUtil.java index 27602fa..557bccb 100755 --- a/src/main/java/com/jsl/oa/utils/JwtUtil.java +++ b/src/main/java/com/jsl/oa/utils/JwtUtil.java @@ -34,7 +34,7 @@ public class JwtUtil { * @return 返回生成的Token */ public static String generateToken(@NotNull Long userId) { - Key key = Keys.hmacShaKeyFor(SafeConstants.SECRET_KEY.getBytes()); + Key key = Keys.hmacShaKeyFor(SafeConstants.getSecretKey().getBytes()); return Jwts.builder() .setSubject(userId.toString()) .setExpiration(new java.util.Date(System.currentTimeMillis() + EXPIRATION_TIME)) @@ -54,10 +54,10 @@ public class JwtUtil { try { Long getTokenInUserId = getUserId(token); // 验证用户名是否匹配 - log.info("令牌用户主键:" + getTokenInUserId.toString()); + log.info("[FILTER] 令牌用户主键:{}", getTokenInUserId.toString()); return Pattern.matches("^[0-9]+$", getTokenInUserId.toString()); } catch (Exception e) { - log.info("令牌错误或失效"); + log.info("[FILTER] 令牌错误或失效"); return false; } } @@ -71,7 +71,7 @@ public class JwtUtil { * @return 返回获取到的用户名 */ public static Long getUserId(String token) { - Key key = Keys.hmacShaKeyFor(SafeConstants.SECRET_KEY.getBytes()); + Key key = Keys.hmacShaKeyFor(SafeConstants.getSecretKey().getBytes()); Jws claimsJws = Jwts.parserBuilder() .setSigningKey(key) .build() diff --git a/src/main/java/com/jsl/oa/utils/Processing.java b/src/main/java/com/jsl/oa/utils/Processing.java index b0d8546..11b3f90 100755 --- a/src/main/java/com/jsl/oa/utils/Processing.java +++ b/src/main/java/com/jsl/oa/utils/Processing.java @@ -3,25 +3,30 @@ package com.jsl.oa.utils; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import com.jsl.oa.dao.PermissionDAO; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; import com.jsl.oa.dao.RoleDAO; import com.jsl.oa.dao.UserDAO; import com.jsl.oa.exception.ClassCopyException; -import com.jsl.oa.mapper.RoleMapper; -import com.jsl.oa.model.dodata.*; -import com.jsl.oa.model.vodata.PermissionContentVo; +import com.jsl.oa.model.dodata.ProjectDO; +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.ProjectSimpleVO; import com.jsl.oa.model.vodata.UserCurrentBackVO; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.springframework.beans.BeanUtils; import org.springframework.validation.BindingResult; import org.springframework.validation.ObjectError; import javax.servlet.http.HttpServletRequest; import java.lang.reflect.Field; -import java.sql.Timestamp; -import java.util.*; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.Random; /** *

自定义快捷工具类

@@ -165,14 +170,13 @@ public class Processing { *
* 该方法用于检查用户是否是管理员,类型封装后字节返回结果 * - * @param request 请求 - * @param roleMapper RoleMapper + * @param request 请求 * @return 如果为 true 是管理员,false 不是管理员 */ - public static @NotNull Boolean checkUserIsAdmin(HttpServletRequest request, @NotNull RoleMapper roleMapper) { - RoleUserDO roleUserDO = roleMapper.getRoleUserByUid(Processing.getAuthHeaderToUserId(request)); + public static @NotNull Boolean checkUserIsConsole(HttpServletRequest request, @NotNull RoleDAO roleDAO) { + RoleUserDO roleUserDO = roleDAO.getRoleUserByUid(Processing.getAuthHeaderToUserId(request)); if (roleUserDO != null) { - RoleDO roleDO = roleMapper.getRoleByRoleName("admin"); + RoleDO roleDO = roleDAO.getRoleByRoleName("console"); return roleUserDO.getRid().equals(roleDO.getId()); } else { return false; @@ -182,14 +186,13 @@ public class Processing { /** * 检查用户是否是老师 * - * @param request - * @param roleMapper - * @return + * @param request 请求 + * @return 如果为 true 是老师,false 不是老师 */ - public static @NotNull Boolean checkUserIsTeacher(HttpServletRequest request, @NotNull RoleMapper roleMapper) { - RoleUserDO roleUserDO = roleMapper.getRoleUserByUid(Processing.getAuthHeaderToUserId(request)); + public static @NotNull Boolean checkUserIsPrincipal(HttpServletRequest request, @NotNull RoleDAO roleDAO) { + RoleUserDO roleUserDO = roleDAO.getRoleUserByUid(Processing.getAuthHeaderToUserId(request)); if (roleUserDO != null) { - RoleDO roleDO = roleMapper.getRoleByRoleName("teacher"); + RoleDO roleDO = roleDAO.getRoleByRoleName("principal"); return roleUserDO.getRid().equals(roleDO.getId()); } else { return false; @@ -205,12 +208,16 @@ public class Processing { /** - * @Description: VO类与实体类属性赋值 - * @Date: 2024/1/18 - * @Param source: - * @Param dest: - **/ - public static T copyProperties(@NotNull S source, @NotNull T target) throws ClassCopyException { + * 将属性从源对象复制到目标对象。 + * + * @param 目标对象的类型。 + * @param 源对象的类型。 + * @param source 从中复制属性的源对象。 + * @param target 属性将复制到的目标对象。 + * @throws ClassCopyException 如果在复制过程中出现错误。 + */ + @Contract(pure = true) + public static void copyProperties(@NotNull S source, @NotNull T target) throws ClassCopyException { Class sourceClass = source.getClass(); Class targetClass = target.getClass(); @@ -249,26 +256,26 @@ public class Processing { } catch (IllegalAccessException ignored) { throw new ClassCopyException(); } - return null; } - /** - * @Description: 将性别转为字符形式 - * @Date: 2024/1/18 - **/ + *

获取性别

+ *
+ * 用于获取性别 + * + * @param sex 性别ID + * @return 返回中文性别 + */ @Contract(pure = true) public static @NotNull String getSex(short sex) { - if (sex == 0) { - return "保密"; + switch (sex) { + case 1: + return "男"; + case 2: + return "女"; + default: + return "保密"; } - if (sex == 1) { - return "男"; - } - if (sex == 2) { - return "女"; - } - return " "; } /** @@ -279,56 +286,24 @@ public class Processing { * @param userDO 用户信息 * @return {@link BaseResponse} */ - public static @NotNull UserCurrentBackVO.UserCurrent returnUserInfo(@NotNull UserDO userDO, RoleDAO roleDAO, PermissionDAO permissionDAO) { + public static @NotNull UserCurrentBackVO.UserCurrent returnUserInfo( + @NotNull UserDO userDO, RoleDAO roleDAO, Gson gson) { UserCurrentBackVO.UserCurrent userCurrent = new UserCurrentBackVO.UserCurrent(); - // 获取用户角色 - RoleUserDO getUserRole = roleDAO.getRoleUserByUid(userDO.getId()); - if (getUserRole == null) { - getUserRole = new RoleUserDO(); - getUserRole.setRid(0L).setCreatedAt(new Timestamp(System.currentTimeMillis())); - } else { - getUserRole.setUid(null); - } // 获取用户权限 - RoleUserDO roleUserDO = roleDAO.getRoleUserByUid(userDO.getId()); + RoleDO getRole = roleDAO.getRoleByUserId(userDO.getId()); List getPermissionForString; - if (roleUserDO != null) { - // 获取全部根权限 - getPermissionForString = permissionDAO.getAllPermissionBuildString(); - } else { - // 获取权限列表信息 - getPermissionForString = permissionDAO.getPermission(userDO.getId()); - } - RoleDO getRole = roleDAO.getRoleById(getUserRole.getRid()); - String getRoleString; if (getRole != null) { - getRoleString = getRole.getRoleName(); + // 获取全部根权限 + getPermissionForString = gson.fromJson(getRole.getPermissions(), new TypeToken>() { + }.getType()); } else { - getRoleString = "default"; + getPermissionForString = null; } + UserCurrentBackVO.ReturnUser returnUser = new UserCurrentBackVO.ReturnUser(); + BeanUtils.copyProperties(userDO, returnUser); 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) + .setUser(returnUser) + .setRole(getRole != null ? getRole.getRoleName() : "default") .setPermission(getPermissionForString); return userCurrent; } @@ -355,14 +330,17 @@ public class Processing { return userDOS; } - public static void projectTosimply(ProjectSimpleVO projectSimpleVO, ProjectDO projectDO, UserDAO userDAO, ObjectMapper objectMapper) { - + public static void projectTosimply( + ProjectSimpleVO projectSimpleVO, + ProjectDO projectDO, + UserDAO userDAO, + ObjectMapper objectMapper + ) { projectSimpleVO.setId(projectDO.getId()); projectSimpleVO.setName(projectDO.getName()); projectSimpleVO.setTags(projectDO.getTags()); - projectSimpleVO.setCycle(projectDO.getCycle()); - projectSimpleVO.setIsFinish(projectDO.getIsFinish()); - projectSimpleVO.setWorkLoad(projectDO.getWorkLoad()); + projectSimpleVO.setCycle(projectDO.getCycle().longValue()); + projectSimpleVO.setWorkLoad(projectDO.getWorkLoad().longValue()); projectSimpleVO.setPrincipalUser(userDAO.getUserById(projectDO.getPrincipalId()).getUsername()); // 解析JSON字符串 JsonNode rootNode = null; @@ -382,53 +360,35 @@ public class Processing { //return ProjectSimpleVO; } - /** - * @Description: 将Permission归纳为父子关系的json形式 - * @Date: 2024/1/20 - * @Param permissions: 权限实体类 - **/ - public static List convertToVoList(List permissions) { - List vos = new ArrayList<>(); - Map> childrenMap = new HashMap<>(); - - for (PermissionDO permission : permissions) { - if (permission.getPid() != null) { - List children = childrenMap.getOrDefault(permission.getPid(), new ArrayList<>()); - children.add(permission); - childrenMap.put(permission.getPid(), children); - } - } - - for (PermissionDO permission : permissions) { - if (permission.getPid() == null) { - PermissionContentVo vo = convertToVo(permission, childrenMap); - vos.add(vo); - } - } - - return vos; - } /** - * @Description: 封装PermissionContentVo的子类,被convertToVoList方法调用 - * @Date: 2024/1/20 - * @Param permission: 权限实体类 - * @Param childrenMap: 要封装的子类 + * @Description: 转换审核的类别属性为字符串 + * @Date: 2024/4/11 + * @Param category: **/ - public static PermissionContentVo convertToVo(PermissionDO permission, Map> childrenMap) { - PermissionContentVo vo = new PermissionContentVo(); - copyProperties(permission, vo); - - List children = childrenMap.get(permission.getId()); - if (children != null) { - List childVos = new ArrayList<>(); - for (PermissionDO child : children) { - PermissionContentVo childVo = convertToVo(child, childrenMap); - childVos.add(childVo); - } - vo.setChildren(childVos); + public static String turnReviewCategory(short category) { + switch (category) { + case 0: + return "子系统"; + case 1: + return "模块"; + default: + return "其他"; } - - return vo; } + + public static String turnReviewResult(short result) { + switch (result) { + case 0: + return "已拒绝"; + case 1: + return "已审批"; + case 2: + return "待审核"; + default: + return "其他"; + } + } + + } diff --git a/src/main/java/com/jsl/oa/utils/ResultUtil.java b/src/main/java/com/jsl/oa/utils/ResultUtil.java index af924a4..d421197 100755 --- a/src/main/java/com/jsl/oa/utils/ResultUtil.java +++ b/src/main/java/com/jsl/oa/utils/ResultUtil.java @@ -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; + /** *

结果工具类

*
* 用于返回结果 * + * @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 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 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 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 map = new HashMap<>(); + map.put("errorMessage", message); + map.put("errorData", data); + return new BaseResponse(output, code, message, map); } public static @NotNull ResponseEntity error(String output, Integer code, String message) { - log.warn("失败: 错误码[" + code + "] {} - {}", output, message); - log.info("=================================================="); + logBack(code, output, message, null); + HashMap map = new HashMap<>(); + map.put("errorMessage", message); return ResponseEntity.status(500) - .body(new BaseResponse(output, code, message)); + .body(new BaseResponse(output, code, message, map)); + } + + /** + *

日志记录

+ *
+ * 用户返回错误相关的日志内容 + * + * @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); + } } } diff --git a/src/main/java/com/jsl/oa/utils/redis/RoleRedisUtil.java b/src/main/java/com/jsl/oa/utils/redis/RoleRedisUtil.java index aa3db0d..75a3d1a 100644 --- a/src/main/java/com/jsl/oa/utils/redis/RoleRedisUtil.java +++ b/src/main/java/com/jsl/oa/utils/redis/RoleRedisUtil.java @@ -22,6 +22,7 @@ import java.util.concurrent.TimeUnit; * @see com.jsl.oa.common.constant.BusinessConstants * @see com.jsl.oa.config.redis.RedisOperating * @author xiao_lfeng + * @param 泛型 */ @Slf4j @Component @@ -59,4 +60,4 @@ public class RoleRedisUtil extends RedisOperating { redisTemplate.expire(key, time, TimeUnit.MINUTES); return true; } -} \ No newline at end of file +} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 3cbfb34..a5e9350 100755 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,5 +1,5 @@ maven: - timestamp: @buildDate@ + timestamp: 2024/3/10 spring: profiles: active: @profile.active@ \ No newline at end of file diff --git a/src/main/resources/com/jsl/oa/mapper/ModuleMapper.xml b/src/main/resources/com/jsl/oa/mapper/ModuleMapper.xml index bdd6c94..7e2f098 100644 --- a/src/main/resources/com/jsl/oa/mapper/ModuleMapper.xml +++ b/src/main/resources/com/jsl/oa/mapper/ModuleMapper.xml @@ -5,14 +5,14 @@ - select * from organize_oa.oa_project_work where project_id=#{projectId} and type=0 and (principal_id=#{userId} or principal_id is null) - select * from organize_oa.oa_project_work where pid=#{sysId} and type=1 and (principal_id=#{userId} or principal_id is null) diff --git a/src/main/resources/com/jsl/oa/mapper/ProjectMapper.xml b/src/main/resources/com/jsl/oa/mapper/ProjectMapper.xml index 1295372..b6d4b88 100644 --- a/src/main/resources/com/jsl/oa/mapper/ProjectMapper.xml +++ b/src/main/resources/com/jsl/oa/mapper/ProjectMapper.xml @@ -49,10 +49,10 @@