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