From 5c7e7501878caca3e4b4e7316681ade4de415fb1 Mon Sep 17 00:00:00 2001
From: vincentlu <t1341870251@gmail.com>
Date: 星期四, 05 二月 2026 13:56:51 +0800
Subject: [PATCH] #

---
 zy-acs-manager/src/main/java/com/zy/acs/manager/core/domain/type/NamespaceType.java                   |    1 
 /dev/null                                                                                             |   21 -----
 zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/ValidService.java                        |    2 
 zy-acs-manager/src/main/java/com/zy/acs/manager/common/interceptor/IntegrationOpenApiInterceptor.java |  125 +++++++++++++++++++++++++++++++
 zy-acs-manager/src/main/java/com/zy/acs/manager/common/config/IntegrationRecordAdvice.java            |    4 
 zy-acs-manager/src/main/java/com/zy/acs/manager/common/config/WebMvcConfig.java                       |    7 +
 zy-acs-manager/src/main/java/com/zy/acs/manager/core/integrate/wms/OpenController.java                |    3 
 zy-acs-manager/src/main/java/com/zy/acs/manager/common/annotation/IntegrationAuth.java                |   23 +++++
 zy-acs-manager/src/main/java/com/zy/acs/manager/common/domain/TaskDto.java                            |    2 
 9 files changed, 163 insertions(+), 25 deletions(-)

diff --git a/zy-acs-framework/src/main/java/com/zy/acs/framework/annotations/IntegrationAuth.java b/zy-acs-framework/src/main/java/com/zy/acs/framework/annotations/IntegrationAuth.java
deleted file mode 100644
index f3e458f..0000000
--- a/zy-acs-framework/src/main/java/com/zy/acs/framework/annotations/IntegrationAuth.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.zy.acs.framework.annotations;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-@Target({ElementType.TYPE,ElementType.METHOD})
-@Retention(RetentionPolicy.RUNTIME)
-public @interface IntegrationAuth {
-
-	Auth value() default Auth.CHECK;
-
-	String memo() default "";
-
-	public enum Auth{
-		CHECK,
-		NONE
-	}
-
-}
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/common/annotation/IntegrationAuth.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/common/annotation/IntegrationAuth.java
new file mode 100644
index 0000000..ecbeff1
--- /dev/null
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/common/annotation/IntegrationAuth.java
@@ -0,0 +1,23 @@
+package com.zy.acs.manager.common.annotation;
+
+import com.zy.acs.manager.core.domain.type.NamespaceType;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target({ElementType.TYPE,ElementType.METHOD})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface IntegrationAuth {
+
+	Enable value() default Enable.LOG;
+
+	NamespaceType name() default NamespaceType.NONE;
+
+	public enum Enable{
+		LOG,
+		SKIP_LOG
+	}
+
+}
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/common/config/IntegrationRecordAdvice.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/common/config/IntegrationRecordAdvice.java
index 6a243c4..92c6f15 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/common/config/IntegrationRecordAdvice.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/common/config/IntegrationRecordAdvice.java
@@ -1,9 +1,7 @@
 package com.zy.acs.manager.common.config;
 
-import com.alibaba.fastjson.JSON;
 import com.zy.acs.framework.common.Cools;
 import com.zy.acs.framework.common.R;
-import com.zy.acs.manager.common.utils.IpTools;
 import com.zy.acs.manager.manager.service.IntegrationRecordService;
 import lombok.extern.slf4j.Slf4j;
 import org.jetbrains.annotations.NotNull;
@@ -23,7 +21,7 @@
 import java.nio.charset.StandardCharsets;
 
 @Slf4j
-//@ControllerAdvice
+@ControllerAdvice
 public class IntegrationRecordAdvice implements ResponseBodyAdvice<Object> {
 
     @Autowired
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/common/config/WebMvcConfig.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/common/config/WebMvcConfig.java
index 7962fae..9259487 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/common/config/WebMvcConfig.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/common/config/WebMvcConfig.java
@@ -1,6 +1,7 @@
 package com.zy.acs.manager.common.config;
 
 import com.zy.acs.manager.common.constant.Constants;
+import com.zy.acs.manager.common.interceptor.IntegrationOpenApiInterceptor;
 import com.zy.acs.manager.common.utils.Http;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
@@ -9,6 +10,7 @@
 import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
 import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
 
+import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
@@ -21,8 +23,13 @@
 @Configuration
 public class WebMvcConfig implements WebMvcConfigurer {
 
+    @Resource
+    private IntegrationOpenApiInterceptor integrationOpenApiInterceptor;
+
     @Override
     public void addInterceptors(InterceptorRegistry registry) {
+        registry.addInterceptor(integrationOpenApiInterceptor)
+                .addPathPatterns("/api/open/**");
         registry.addInterceptor(getAsyncHandlerInterceptor())
                 .addPathPatterns("/**")
         ;
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/common/domain/TaskDto.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/common/domain/TaskDto.java
index 5e087da..563c093 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/common/domain/TaskDto.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/common/domain/TaskDto.java
@@ -18,6 +18,6 @@
 
     private String destSta;
 
-    private Integer priority = 1;
+    private Integer priority;
 
 }
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/common/interceptor/IntegrationOpenApiInterceptor.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/common/interceptor/IntegrationOpenApiInterceptor.java
new file mode 100644
index 0000000..28f980b
--- /dev/null
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/common/interceptor/IntegrationOpenApiInterceptor.java
@@ -0,0 +1,125 @@
+package com.zy.acs.manager.common.interceptor;
+
+import com.zy.acs.framework.common.Cools;
+import com.zy.acs.manager.common.annotation.IntegrationAuth;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.core.annotation.AnnotatedElementUtils;
+import org.springframework.stereotype.Component;
+import org.springframework.web.method.HandlerMethod;
+import org.springframework.web.servlet.HandlerInterceptor;
+import org.springframework.web.util.ContentCachingRequestWrapper;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Intercepts open API calls so they can be audited via IntegrationRecordAdvice.
+ */
+@Slf4j
+@Component
+public class IntegrationOpenApiInterceptor implements HandlerInterceptor {
+
+    private static final String ATTR_APP_AUTH = "appAuth";
+    private static final String ATTR_AUTH_MEMO = "integrationAuthMemo";
+    private static final String ATTR_CACHE = "cache";
+    private static final String ATTR_START_AT = "openApiStartTime";
+
+    @Override
+    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
+        if (!(handler instanceof HandlerMethod)) {
+            return true;
+        }
+        HandlerMethod handlerMethod = (HandlerMethod) handler;
+        IntegrationAuth integrationAuth = findIntegrationAuth(handlerMethod);
+        if (integrationAuth == null) {
+            log.debug("Skip open-api logging for {} because @IntegrationAuth is missing", handlerMethod.getMethod());
+            return true;
+        }
+
+        request.setAttribute(ATTR_APP_AUTH, integrationAuth.value());
+        if (!Cools.isEmpty(integrationAuth.memo())) {
+            request.setAttribute(ATTR_AUTH_MEMO, integrationAuth.memo());
+        }
+        request.setAttribute(ATTR_START_AT, System.currentTimeMillis());
+        request.setAttribute(ATTR_CACHE, buildRequestCache(request));
+        return true;
+    }
+
+    private IntegrationAuth findIntegrationAuth(HandlerMethod handlerMethod) {
+        IntegrationAuth annotation = AnnotatedElementUtils.findMergedAnnotation(handlerMethod.getMethod(), IntegrationAuth.class);
+        if (annotation != null) {
+            return annotation;
+        }
+        return AnnotatedElementUtils.findMergedAnnotation(handlerMethod.getBeanType(), IntegrationAuth.class);
+    }
+
+    private Map<String, Object> buildRequestCache(HttpServletRequest request) {
+        Map<String, Object> cache = new LinkedHashMap<>();
+        cache.put("method", request.getMethod());
+        cache.put("uri", request.getRequestURI());
+        cache.put("query", request.getQueryString());
+        cache.put("parameters", flattenParameters(request.getParameterMap()));
+        cache.put("headers", extractHeaders(request));
+        String body = readBody(request);
+        if (!Cools.isEmpty(body)) {
+            cache.put("body", body);
+        }
+        return cache;
+    }
+
+    private Map<String, Object> flattenParameters(Map<String, String[]> rawParams) {
+        Map<String, Object> flattened = new LinkedHashMap<>();
+        if (rawParams == null) {
+            return flattened;
+        }
+        rawParams.forEach((key, values) -> {
+            if (values == null) {
+                flattened.put(key, null);
+            } else if (values.length == 1) {
+                flattened.put(key, values[0]);
+            } else {
+                flattened.put(key, Arrays.asList(values));
+            }
+        });
+        return flattened;
+    }
+
+    private Map<String, Object> extractHeaders(HttpServletRequest request) {
+        Map<String, Object> headers = new LinkedHashMap<>();
+        List<String> names = Collections.list(request.getHeaderNames());
+        for (String name : names) {
+            headers.put(name, request.getHeader(name));
+        }
+        return headers;
+    }
+
+    private String readBody(HttpServletRequest request) {
+        if (request instanceof ContentCachingRequestWrapper) {
+            ContentCachingRequestWrapper wrapper = (ContentCachingRequestWrapper) request;
+            byte[] buffer = wrapper.getContentAsByteArray();
+            if (buffer.length > 0) {
+                Charset charset = charset(wrapper.getCharacterEncoding());
+                return new String(buffer, charset);
+            }
+        }
+        return null;
+    }
+
+    private Charset charset(String encoding) {
+        if (Cools.isEmpty(encoding)) {
+            return StandardCharsets.UTF_8;
+        }
+        try {
+            return Charset.forName(encoding);
+        } catch (Exception e) {
+            return StandardCharsets.UTF_8;
+        }
+    }
+}
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/domain/type/NamespaceType.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/domain/type/NamespaceType.java
index cf1fcb5..a8aa45a 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/domain/type/NamespaceType.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/domain/type/NamespaceType.java
@@ -2,6 +2,7 @@
 
 public enum NamespaceType {
 
+    NONE("鏈煡"),
     RCS_TASK_REPORT("浠诲姟瀹屾垚涓婃姤"),
 
     ;
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/integrate/wms/OpenController.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/integrate/wms/OpenController.java
index 770269d..5136137 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/integrate/wms/OpenController.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/integrate/wms/OpenController.java
@@ -2,9 +2,11 @@
 
 import com.zy.acs.framework.common.Cools;
 import com.zy.acs.framework.common.R;
+import com.zy.acs.manager.common.annotation.IntegrationAuth;
 import com.zy.acs.manager.common.annotation.OperationLog;
 import com.zy.acs.manager.common.constant.Constants;
 import com.zy.acs.manager.common.domain.TaskBoolDto;
+import com.zy.acs.manager.core.domain.type.NamespaceType;
 import com.zy.acs.manager.core.integrate.dto.OpenBusCancelParam;
 import com.zy.acs.manager.core.integrate.dto.OpenBusCancelResult;
 import com.zy.acs.manager.core.integrate.dto.OpenBusSubmitParam;
@@ -43,6 +45,7 @@
 
     @PostMapping("/bus/submit")
     @OperationLog("generate task from open api")
+    @IntegrationAuth(name = NamespaceType.RCS_TASK_REPORT)
     public R submit(@RequestBody OpenBusSubmitParam param, HttpServletRequest request) {
         IntegrationRecord integrationRecord = new IntegrationRecord(
                 null,    // 缂栧彿
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/ValidService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/ValidService.java
index 6b2caec..c337c2c 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/ValidService.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/ValidService.java
@@ -21,6 +21,7 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
+import java.util.Optional;
 
 /**
  * Created by vincent on 2023/6/14
@@ -48,6 +49,7 @@
             if (Cools.isEmpty(taskDto.getTaskNo())) {
                 throw new BusinessException("Task seqNum can't be empty!");
             }
+            taskDto.setPriority(Optional.ofNullable(taskDto.getPriority()).orElse(1));
             Task task = new Task();
             taskList.add(task);
             task.setUuid(String.valueOf(snowflakeIdWorker.nextId()).substring(3));

--
Gitblit v1.9.1