diff --git a/src/main/java/com/project/appeal/controller/AppealController.java b/src/main/java/com/project/appeal/controller/AppealController.java index 3880c5a..d683386 100644 --- a/src/main/java/com/project/appeal/controller/AppealController.java +++ b/src/main/java/com/project/appeal/controller/AppealController.java @@ -5,6 +5,7 @@ import com.project.appeal.application.AppealApplication; import com.project.appeal.domain.dto.AppealDTO; import com.project.appeal.domain.param.AppealParam; import com.project.base.domain.result.Result; +import com.project.operation.annotation.OperationLog; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -20,6 +21,7 @@ public class AppealController { private AppealApplication appealApplication; @PostMapping("saveOrUpdate") + @OperationLog(module = "申诉审批") public Result saveOrUpdate(@RequestBody AppealDTO appealDTO){ return appealApplication.saveOrUpdate(appealDTO); } diff --git a/src/main/java/com/project/operation/aop/OperationLogAspect.java b/src/main/java/com/project/operation/aop/OperationLogAspect.java index a16be76..ff4569c 100644 --- a/src/main/java/com/project/operation/aop/OperationLogAspect.java +++ b/src/main/java/com/project/operation/aop/OperationLogAspect.java @@ -3,6 +3,7 @@ package com.project.operation.aop; import com.project.base.domain.result.Result; import com.project.ding.domain.dto.LoginDTO; import com.project.ding.utils.JwtUtils; +import com.project.ding.utils.SecurityUtils; import com.project.operation.annotation.OperationLog; import com.project.operation.application.impl.OperationLogApplicationService; import com.project.operation.domain.dto.OperationLogDTO; @@ -12,14 +13,11 @@ import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.ProceedingJoinPoint; -import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.aspectj.lang.reflect.MethodSignature; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; @@ -90,15 +88,9 @@ public class OperationLogAspect { operationLogDTO.setClientIp(request.getRemoteAddr()); // 收集登录用户ID - Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); - if (authentication != null && authentication.getPrincipal() != null) { - Object principal = authentication.getPrincipal(); - try { - Long userId = Long.parseLong(principal.toString()); - operationLogDTO.setCreatorId(userId); - } catch (NumberFormatException e) { - log.warn("解析用户ID失败,principal:{}", principal, e); - } + String userId = SecurityUtils.getUserId(); + if (userId != null) { + operationLogDTO.setCreatorId(Long.parseLong(userId.toString())); } } diff --git a/src/main/java/com/project/operation/domain/service/impl/description/AppealDescriptionStrategy.java b/src/main/java/com/project/operation/domain/service/impl/description/AppealDescriptionStrategy.java index 57ab55a..5022230 100644 --- a/src/main/java/com/project/operation/domain/service/impl/description/AppealDescriptionStrategy.java +++ b/src/main/java/com/project/operation/domain/service/impl/description/AppealDescriptionStrategy.java @@ -1,23 +1,48 @@ package com.project.operation.domain.service.impl.description; +import com.project.appeal.domain.dto.AppealDTO; +import com.project.appeal.domain.enums.StatusEnum; import com.project.operation.domain.dto.OperationLogDTO; import com.project.operation.domain.enums.ModuleEnum; import com.project.operation.domain.service.DescriptionStrategy; +import org.apache.commons.lang3.ObjectUtils; import org.springframework.stereotype.Component; +import java.util.HashMap; +import java.util.Map; + /** * 申诉审批 */ @Component public class AppealDescriptionStrategy implements DescriptionStrategy { + private static final Map STATUS_ACTION_MAP = new HashMap<>(); + static { + // 枚举值与操作文案映射,后续新增状态只需加这行 + STATUS_ACTION_MAP.put(StatusEnum.PASS_REVIEW.getValue(), "通过"); + STATUS_ACTION_MAP.put(StatusEnum.REFUSE_REVIEW.getValue(), "拒绝"); + } + @Override public Boolean process(Object[] args, OperationLogDTO operationLogDTO,String methodName) { + if (!methodName.equals("saveOrUpdate")) { + return false; + } + if (ObjectUtils.isNotEmpty(args) && args[0] instanceof AppealDTO) { + AppealDTO appealDTO = (AppealDTO) args[0]; + if (appealDTO == null || ObjectUtils.isEmpty(appealDTO.getId())) { + return false; + } - if (methodName.equals("save")) { + String action = STATUS_ACTION_MAP.getOrDefault(appealDTO.getStatus(), "未知操作"); + String description = String.format("申诉ID【%s】", appealDTO.getId()); + // 设置日志字段 + operationLogDTO.setAction(action); + operationLogDTO.setDescription(description); } - return null; + return true; } @Override diff --git a/src/main/java/com/project/operation/domain/service/impl/description/DataDescriptionStrategy.java b/src/main/java/com/project/operation/domain/service/impl/description/DataDescriptionStrategy.java index a865baa..2252ccd 100644 --- a/src/main/java/com/project/operation/domain/service/impl/description/DataDescriptionStrategy.java +++ b/src/main/java/com/project/operation/domain/service/impl/description/DataDescriptionStrategy.java @@ -1,6 +1,7 @@ package com.project.operation.domain.service.impl.description; import cn.hutool.core.util.ObjectUtil; +import com.project.appeal.domain.dto.AppealDTO; import com.project.base.domain.result.Result; import com.project.information.application.InformationApplicationService; import com.project.information.application.ProductLineApplicationService; @@ -12,6 +13,7 @@ import com.project.operation.domain.enums.ModuleEnum; import com.project.operation.domain.service.DescriptionStrategy; import com.project.task.domain.dto.TaskDTO; import lombok.SneakyThrows; +import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -36,7 +38,7 @@ public class DataDescriptionStrategy implements DescriptionStrategy { @SneakyThrows @Override public Boolean process(Object[] args, OperationLogDTO operationLogDTO,String methodName) { - if (methodName.equals("save")) { + if (methodName.equals("save") && ObjectUtils.isNotEmpty(args) && args[0] instanceof ProductLineDTO) { ProductLineDTO productLineDTO = (ProductLineDTO) args[0]; if (productLineDTO.getLeaf() == null || StringUtils.isBlank(productLineDTO.getName())) { @@ -50,7 +52,7 @@ public class DataDescriptionStrategy implements DescriptionStrategy { operationLogDTO.setDescription("【"+ productLineDTO.getName()+"】"); } - if(methodName.equals("delete")){ + if(methodName.equals("delete") && ObjectUtils.isNotEmpty(args) && args[0] instanceof Long){ Long id = (Long) args[0]; if(id==null){ @@ -88,7 +90,7 @@ public class DataDescriptionStrategy implements DescriptionStrategy { } } - if (methodName.equals("batchDelete")) { + if (methodName.equals("batchDelete") && ObjectUtils.isNotEmpty(args) && args[0] instanceof String) { String ids = (String) args[0]; if (StringUtils.isBlank(ids)){ return false; diff --git a/src/main/java/com/project/operation/domain/service/impl/description/TaskDescriptionStrategy.java b/src/main/java/com/project/operation/domain/service/impl/description/TaskDescriptionStrategy.java index bc6da9b..cc00322 100644 --- a/src/main/java/com/project/operation/domain/service/impl/description/TaskDescriptionStrategy.java +++ b/src/main/java/com/project/operation/domain/service/impl/description/TaskDescriptionStrategy.java @@ -7,6 +7,7 @@ import com.project.task.application.TaskApplicationService; import com.project.task.domain.dto.TaskDTO; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ArrayUtils; +import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -27,7 +28,7 @@ public class TaskDescriptionStrategy implements DescriptionStrategy { @Override public Boolean process(Object[] args, OperationLogDTO operationLogDTO,String methodName) { - if (methodName.equals("save")) { + if (methodName.equals("save") && ObjectUtils.isNotEmpty(args) && args[0] instanceof TaskDTO) { TaskDTO taskDTO = (TaskDTO) args[0]; //设置操作 if (taskDTO.getId() == null){ @@ -43,7 +44,7 @@ public class TaskDescriptionStrategy implements DescriptionStrategy { return true; } - if (methodName.equals("batchDelete")) { + if (methodName.equals("batchDelete") && ObjectUtils.isNotEmpty(args) && args[0] instanceof TaskDTO) { String taskIds = (String) args[0]; if (StringUtils.isBlank(taskIds)){ return false;