diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/core/Record.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/core/Record.java new file mode 100644 index 0000000..be2071a --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/core/Record.java @@ -0,0 +1,23 @@ +package org.nl.wms.ext.record.core; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 对接记录注解 + * @Author: lyd + * @Date: 2024/9/23 + */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +public @interface Record { + /** 对接名称 */ + String interactName() default ""; + /** + * 方向 + * @see RecordDefinition + * */ + String direction() default ""; +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/core/RecordAspect.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/core/RecordAspect.java new file mode 100644 index 0000000..594795d --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/core/RecordAspect.java @@ -0,0 +1,99 @@ +package org.nl.wms.ext.record.core; + +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONUtil; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.AfterThrowing; +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.nl.common.utils.RequestHolder; +import org.nl.common.utils.StringUtils; +import org.nl.common.utils.ThrowableUtil; +import org.nl.system.service.logging.dao.SysLog; +import org.nl.wms.ext.record.service.ISysInteractRecordService; +import org.nl.wms.ext.record.service.dao.SysInteractRecord; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.lang.reflect.Method; +import java.lang.reflect.Parameter; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @Author: lyd + * @Date: 2024/9/23 + */ +@Component +@Aspect +@Slf4j +public class RecordAspect { + + @Autowired + private ISysInteractRecordService sysInteractRecordService; + + @Pointcut("@annotation(org.nl.wms.ext.record.core.Record)") + public void logPointcut() { + // 该方法无方法体,主要为了让同类中其他方法使用此切入点 + } + + @Around("logPointcut()") + public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable { + MethodSignature signature = (MethodSignature) joinPoint.getSignature(); + Method method = signature.getMethod(); + Record annotation = method.getAnnotation(Record.class); + // 方法路径 + String params = getParameter(method, joinPoint.getArgs()); + Object result = joinPoint.proceed(); + sysInteractRecordService.saveRecord(params, result, annotation.direction(), annotation.interactName()); + return result; + } + + /** + * 根据方法和传入的参数获取请求参数 + */ + + private String getParameter(Method method, Object[] args) { + List argList = new ArrayList<>(); + Parameter[] parameters = method.getParameters(); + for (int i = 0; i < parameters.length; i++) { + //将RequestBody注解修饰的参数作为请求参数 + RequestBody requestBody = parameters[i].getAnnotation(RequestBody.class); + if (requestBody != null) { + argList.add(args[i]); + } + //将RequestParam注解修饰的参数作为请求参数 + RequestParam requestParam = parameters[i].getAnnotation(RequestParam.class); + if (requestParam != null) { + Map map = new HashMap<>(); + String key = parameters[i].getName(); + if (!StrUtil.isEmpty(requestParam.value())) { + key = requestParam.value(); + } + map.put(key, args[i]); + argList.add(map); + } + } + if (argList.size() == 0) { + return ""; + } + return argList.size() == 1 ? JSONUtil.toJsonStr(argList.get(0)) : JSONUtil.toJsonStr(argList); + } + + @AfterThrowing(pointcut = "logPointcut()", throwing = "e") + public void logAfterThrowing(JoinPoint joinPoint, Throwable e) { + log.error("{}", e); + } +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/core/RecordDefinition.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/core/RecordDefinition.java new file mode 100644 index 0000000..77b40db --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/core/RecordDefinition.java @@ -0,0 +1,17 @@ +package org.nl.wms.ext.record.core; + +/** + * @Author: lyd + * @Date: 2024/9/23 + */ +public interface RecordDefinition { + // 请求方向 + /**ACS->LMS**/ + public static final String ACS_LMS = "1"; + /**LMS->ACS**/ + public static final String LMS_ACS = "2"; + /**MES->LMS**/ + public static final String MES_LMS = "3"; + /**LMS->MES**/ + public static final String LMS_MES = "4"; +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/service/ISysInteractRecordService.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/service/ISysInteractRecordService.java index 3c89f0d..35bdab4 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/service/ISysInteractRecordService.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/service/ISysInteractRecordService.java @@ -6,6 +6,7 @@ import org.nl.common.domain.query.PageQuery; import org.nl.system.service.param.dao.Param; import org.nl.wms.ext.acs.service.dto.to.BaseResponse; import org.nl.wms.ext.record.service.dao.SysInteractRecord; +import org.springframework.scheduling.annotation.Async; import java.util.Map; import java.util.Set; @@ -51,6 +52,16 @@ public interface ISysInteractRecordService extends IService { */ void saveRecord(Object request, BaseResponse response, String direction); + /** + * 创建记录 + * @param request 、 + * @param response 、 + * @param direction 、 + * @param interactName \ + */ + @Async + void saveRecord(String request, Object response, String direction, String interactName); + /** * 保存记录 * @param name 、 diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/service/impl/SysInteractRecordServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/service/impl/SysInteractRecordServiceImpl.java index df2fc8a..ad6eeff 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/service/impl/SysInteractRecordServiceImpl.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/ext/record/service/impl/SysInteractRecordServiceImpl.java @@ -94,6 +94,23 @@ public class SysInteractRecordServiceImpl extends ServiceImpl void saveRecord(String name, K request, V response, String direction) { SysInteractRecord entity = new SysInteractRecord();