Parcourir la source

推送国资委优化

dingsixi il y a 1 semaine
Parent
commit
6983d7ab93

+ 1 - 1
base/nckd-base-common/src/main/java/nckd/base/common/utils/GzwCommonUtils.java

@@ -403,7 +403,7 @@ public class GzwCommonUtils {
             }
             return "3";
         }
-        //审核发起接口进行新增,反审核接口发起失败,不存在修改操作。
+        //审核接口发起新增,反审核接口发起删除,不存在修改操作。
         throw new KDBizException(String.format("%s,单据编号:%s,不满足推送条件,无法推送", dataEntityType.getDisplayName(), obj.getString(numberSign)));
     }
 

+ 53 - 3
base/nckd-base-common/src/main/java/nckd/base/common/utils/HttpUtils.java

@@ -14,6 +14,7 @@ import java.net.URLEncoder;
 import java.nio.charset.StandardCharsets;
 import java.security.SecureRandom;
 import java.security.cert.X509Certificate;
+import java.util.Collections;
 import java.util.Map;
 import org.apache.http.HttpEntity;
 import org.apache.http.client.methods.CloseableHttpResponse;
@@ -22,10 +23,26 @@ import org.apache.http.entity.ContentType;
 import org.apache.http.entity.mime.MultipartEntityBuilder;
 import org.apache.http.entity.mime.content.FileBody;
 import org.apache.http.entity.mime.content.StringBody;
+import org.apache.http.impl.DefaultConnectionReuseStrategy;
 import org.apache.http.impl.client.CloseableHttpClient;
 import org.apache.http.impl.client.HttpClients;
 import org.apache.http.util.EntityUtils;
-
+import org.apache.http.HttpEntity;
+import org.apache.http.client.config.RequestConfig;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.ContentType;
+import org.apache.http.entity.mime.MultipartEntityBuilder;
+import org.apache.http.entity.mime.content.FileBody;
+import org.apache.http.entity.mime.content.StringBody;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
+import org.apache.http.util.EntityUtils;
+import java.io.File;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
+import java.util.Map;
 import java.io.File;
 import java.io.IOException;
 import java.util.regex.Pattern;
@@ -63,8 +80,34 @@ public class HttpUtils {
     public static Map<String,Object> uploadFile(String url, File zipFile, String resCode,
                              String username, String password,String ver,
                              String filename)  {
-
-        try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
+        // 创建自定义配置的 HttpClient
+        RequestConfig requestConfig = RequestConfig.custom()
+                .setConnectTimeout(30000)  // 连接超时 30秒
+                .setSocketTimeout(120000)   // 数据上传需要更长时间
+                .setConnectionRequestTimeout(10000)
+                // 重要:禁用代理检测
+                .setProxyPreferredAuthSchemes(Collections.emptyList())
+                .setTargetPreferredAuthSchemes(Collections.emptyList())
+                .build();
+
+        // 创建连接管理器
+        PoolingHttpClientConnectionManager connManager =
+                new PoolingHttpClientConnectionManager();
+        connManager.setMaxTotal(100);
+        connManager.setDefaultMaxPerRoute(20);
+
+        try (CloseableHttpClient httpClient = HttpClients.custom()
+                .setConnectionManager(connManager)
+                .setDefaultRequestConfig(requestConfig)
+                // 禁用重试,避免超时后重试
+                .disableAutomaticRetries()
+                // 明确设置不自动重定向
+                .disableRedirectHandling()
+                // 重要:禁用Cookie管理
+                .disableCookieManagement()
+                // 重要:设置连接重用策略
+                .setConnectionReuseStrategy(DefaultConnectionReuseStrategy.INSTANCE)
+                .build()) {
 
             // 构建基础URL(包含RESCODE, Ver, USER)
             String baseUrl = String.format("%s?RESCODE=%s&Ver=%s&USER=%s",
@@ -84,8 +127,15 @@ public class HttpUtils {
 
             HttpPost httpPost = new HttpPost(finalUrl);
 
+            // 重要:添加 User-Agent
+            httpPost.setHeader("User-Agent", "Mozilla/5.0 HttpClient");
+
+            // 重要:明确设置 Connection 头
+            httpPost.setHeader("Connection", "close");
+
             // 构建 multipart/form-data 请求体
             MultipartEntityBuilder builder = MultipartEntityBuilder.create();
+            builder.setCharset(StandardCharsets.UTF_8);
 
             // 1. file参数 (Body, binary)
             if (zipFile != null && zipFile.exists()) {

+ 8 - 3
nckd-fi/src/main/java/nckd/fi/er/opplugin/GzwPushOpPlugin.java

@@ -54,9 +54,14 @@ public abstract class GzwPushOpPlugin extends AbstractOperationServicePlugIn {
     }
 
     /**
-     * @param bills 业务单据数据
+     * @param dynamicObjects 业务单据数据
      */
-    protected void pushGzw(DynamicObject[] bills) {
+    protected void pushGzw(DynamicObject[] dynamicObjects) {
+        //重新创建数组,如果报错,修改了单据的数据无法还原,所以此处用新数组进行处理
+        DynamicObject[] bills = new DynamicObject[dynamicObjects.length];
+        for (int i = 0; i < dynamicObjects.length; i++) {
+            bills[i] = dynamicObjects[i];
+        }
         // 获取费控系统参数
         Map<String, Object> sysCtrlParameter = ParamUtils.getSysCtrlParameter(ParamUtils.EM);
         String pushState = (String) sysCtrlParameter.get("nckd_gzwpushstate");
@@ -125,7 +130,7 @@ public abstract class GzwPushOpPlugin extends AbstractOperationServicePlugIn {
             for (DynamicObject bill : billList) {
                 logger.info(String.format("推送单据编号%s", bill.getString(billNoSign)));
                 DynamicObject org = getBillOrg(bill);
-                String dataFlag = GzwCommonUtils.getDataFlag(bill,pushState);
+                String dataFlag = GzwCommonUtils.getDataFlag(bill, pushState);
                 logger.info(String.format("推送单据编号%s,数据标识:%s", bill.getString(billNoSign), dataFlag));
                 // 处理每个资源代号
                 for (ResCodeConfig config : datasetConfigs) {