Files
klp-oa/klp-wms/src/main/java/com/klp/wms/aspect/CoilWarehouseOperationLogAspect.java
Joshi 0e6357253a feat(wms): 添加钢卷库区操作日志记录功能
- 在WmsMaterialCoilServiceImpl中注入WmsCoilWarehouseOperationLogMapper
- 在钢卷发货出库操作后添加操作日志记录功能
- 新增recordWarehouseOperationLog方法用于记录库区操作日志
- 创建CoilWarehouseOperationLog注解用于标记需要记录操作日志的方法
- 实现CoilWarehouseOperationLogAspect切面自动记录操作日志
- 支持通过注解配置操作类型、出入库方向和备注信息
- 提供参数名映射功能自动获取钢卷ID和库区ID参数值
2026-03-05 13:55:38 +08:00

80 lines
3.1 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.klp.wms.aspect;
import com.klp.wms.annotation.CoilWarehouseOperationLog;
import com.klp.domain.WmsCoilWarehouseOperationLog;
import com.klp.mapper.WmsCoilWarehouseOperationLogMapper;
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 java.lang.reflect.Method;
@Slf4j
@Aspect
@Component
@RequiredArgsConstructor
public class CoilWarehouseOperationLogAspect {
private final WmsCoilWarehouseOperationLogMapper wmsCoilWarehouseOperationLogMapper;
@Around("@annotation(com.klp.wms.annotation.CoilWarehouseOperationLog)")
public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
Method method = signature.getMethod();
CoilWarehouseOperationLog annotation = method.getAnnotation(CoilWarehouseOperationLog.class);
Long coilId = getParamValue(joinPoint, annotation.coilIdParam(), Long.class);
Long warehouseId = getParamValue(joinPoint, annotation.warehouseIdParam(), Long.class);
Long oldWarehouseId = null;
if (!annotation.oldWarehouseIdParam().isEmpty()) {
oldWarehouseId = getParamValue(joinPoint, annotation.oldWarehouseIdParam(), Long.class);
}
Object result = joinPoint.proceed();
try {
if (coilId != null) {
WmsCoilWarehouseOperationLog operationLog = new WmsCoilWarehouseOperationLog();
operationLog.setCoilId(coilId);
operationLog.setActualWarehouseId(oldWarehouseId != null ? oldWarehouseId : warehouseId);
operationLog.setOperationType(annotation.operationType());
operationLog.setInOutType(annotation.inOutType());
operationLog.setRemark(annotation.remark());
wmsCoilWarehouseOperationLogMapper.insert(operationLog);
log.info("记录钢卷库区操作日志coilId={}, operationType={}, inOutType={}",
coilId, annotation.operationType(), annotation.inOutType());
}
} catch (Exception e) {
log.warn("记录钢卷库区操作日志失败:{}", e.getMessage());
}
return result;
}
private <T> T getParamValue(ProceedingJoinPoint joinPoint, String paramName, Class<T> type) {
if (paramName == null || paramName.isEmpty()) {
return null;
}
Object[] args = joinPoint.getArgs();
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
String[] parameterNames = signature.getParameterNames();
if (parameterNames == null) {
return null;
}
for (int i = 0; i < parameterNames.length; i++) {
if (paramName.equals(parameterNames[i]) && args[i] != null) {
if (type.isInstance(args[i])) {
return type.cast(args[i]);
}
}
}
return null;
}
}