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