From c001034fab9ca0e4cd81e878edc0199ef679bb98 Mon Sep 17 00:00:00 2001
From: 1 <1@123>
Date: 星期五, 23 一月 2026 19:20:17 +0800
Subject: [PATCH] lsh#明细添加计划跟踪号、行号、批次

---
 rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/phyz/impl/ErpReportServiceImpl.java |  486 +++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 447 insertions(+), 39 deletions(-)

diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/phyz/impl/ErpReportServiceImpl.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/phyz/impl/ErpReportServiceImpl.java
index 353aaef..db4405e 100644
--- a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/phyz/impl/ErpReportServiceImpl.java
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/phyz/impl/ErpReportServiceImpl.java
@@ -1,5 +1,6 @@
 package com.vincent.rsf.openApi.service.phyz.impl;
 
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.fasterxml.jackson.core.JsonProcessingException;
@@ -8,25 +9,43 @@
 import com.fasterxml.jackson.databind.cfg.CoercionInputShape;
 import com.vincent.rsf.framework.exception.CoolException;
 import com.vincent.rsf.openApi.config.PlatformProperties;
+import com.vincent.rsf.openApi.entity.constant.WmsConstant;
 import com.vincent.rsf.openApi.entity.dto.CommonResponse;
 import com.vincent.rsf.openApi.entity.phyz.ErpReportParams;
+import com.vincent.rsf.openApi.entity.phyz.Order;
+import com.vincent.rsf.openApi.service.WmsErpService;
 import com.vincent.rsf.openApi.service.phyz.ErpReportService;
+import com.vincent.rsf.openApi.utils.ParamsMapUtils;
+import com.vincent.rsf.openApi.utils.SslUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.util.EntityUtils;
+import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
+import org.apache.http.client.config.RequestConfig;
 import org.springframework.http.HttpEntity;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.HttpMethod;
 import org.springframework.http.ResponseEntity;
+import org.springframework.http.client.ClientHttpResponse;
 import org.springframework.stereotype.Service;
 import org.springframework.web.client.RestTemplate;
 
 import javax.annotation.PostConstruct;
 import javax.annotation.Resource;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
+import java.lang.reflect.Field;
+import java.security.cert.X509Certificate;
+import java.io.IOException;
 import java.io.UnsupportedEncodingException;
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
-import java.util.Arrays;
-import java.util.Objects;
+import java.util.*;
 
 @Slf4j
 @Service
@@ -34,8 +53,14 @@
 
     private static String ERP_REPORT_URL;
 
+    private CloseableHttpClient httpClient;
+
     @Resource
     private PlatformProperties.ErpApi erpApi;
+    @Resource
+    private PlatformProperties.WmsApi wmsApi;
+    @Resource
+    private WmsErpService wmsErpService;
     @Resource
     private RestTemplate restTemplate;
 
@@ -47,16 +72,91 @@
 
 
 
-    // 鐧诲綍鍙傛暟渚濇涓鸿处濂桰D銆佺敤鎴峰悕銆佸簲鐢↖D銆佹椂闂存埑銆佺鍚嶄俊鎭�佽瑷�ID
-    public void loginBySign() throws UnsupportedEncodingException, NoSuchAlgorithmException {
-        String url = ERP_REPORT_URL + "/Kingdee.BOS.WebApi.ServicesStub.AuthService.LoginBySign.common.kdsvc";
-        JSONObject params = new JSONObject();
-        params.put("parameters", loginParams());
-        JSONObject result = postRequest(url, params, false);
+    public String addOrderToServer(Order order) {
+        if (Objects.isNull(order.getOrderNo()) || order.getOrderNo().isEmpty()) {
+            throw new CoolException("璁㈠崟鍙蜂笉鑳戒负绌猴紒锛�");
+        }
+        /**WMS鍩虹閰嶇疆閾炬帴*/
+        String wmsUrl = wmsApi.getHost() + ":" + wmsApi.getPort() + WmsConstant.MODIFY_ORDER_DETLS;
+        HttpHeaders headers = new HttpHeaders();
+        headers.add("Content-Type", "application/json");
+        headers.add("api-version", "v2.0");
+
+        List<Map<String, Object>> maps = new ArrayList<>();
+        Map<String, Object> mapParams = new HashMap<>();
+//        mapParams.put("orderNo", params.getOrderNo());
+//        mapParams.put("anfme", params.getAnfme());
+//        mapParams.put("type", params.getType());
+//        mapParams.put("wkType", params.getWkType());
+//        mapParams.put("exceStatus", params.getExceStatus());
+//        mapParams.put("orderItems", params.getOrderItems());
+//        maps.add(mapParams);
+
+        JSONObject params = JSONObject.parseObject(JSON.toJSONString(order));
+        JSONObject mappedData = ParamsMapUtils.apiMaps("erp", "orderId", params);
+        mapParams = objectToMap(mappedData);
+        maps.add(mapParams);
+        log.info("淇敼璁㈠崟淇℃伅鍙婄姸鎬侊細 {}锛� 璇锋眰鍙傛暟锛� {}", wmsUrl, JSONArray.toJSONString(maps));
+        HttpEntity<List<Map<String, Object>>> httpEntity = new HttpEntity<>(maps, headers);
+        ArrayList<Order> orders = new ArrayList<>();
+        orders.add(order);
+        HttpEntity httpEntity2 = new HttpEntity<>(orders, headers);//cs
+        // asnOrder/items/save
+        ResponseEntity<String> exchange = restTemplate.exchange(wmsUrl, HttpMethod.POST, httpEntity2, String.class);//cs
+        log.info("璁㈠崟淇敼杩斿洖缁撴灉锛� {}", exchange);
+        if (Objects.isNull(exchange.getBody())) {
+            throw new CoolException("鏌ヨ澶辫触锛侊紒");
+        } else {
+            ObjectMapper objectMapper = new ObjectMapper();
+            objectMapper.coercionConfigDefaults().setCoercion(CoercionInputShape.EmptyString, CoercionAction.AsEmpty);
+            try {
+                CommonResponse result = objectMapper.readValue(exchange.getBody(), CommonResponse.class);
+                if (result.getCode() == 200) {
+//                    JSONObject object = JSONObject.parseObject(JSONObject.toJSONString(result.getData()));
+                    return "200";
+                } else {
+                    return result.getMsg();
+//                    throw new CoolException("鏌ヨ澶辫触锛侊紒");
+                }
+            } catch (JsonProcessingException e) {
+                return e.getMessage();
+//                throw new CoolException(e.getMessage());
+            }
+        }
+
+
+//        ErpOpParams erpOpParams = new ErpOpParams();
+//        erpOpParams.set
+//
+//        wmsErpService.updateOrderDetl(ErpOpParams params);
+
+//        CommonResponse updateOrderDetl()
+//
+//        asnOrderService.saveOrderAndItems(params, getLoginUserId());
+    }
+
+    public static Map<String, Object> objectToMap(Object obj) {
+        Map<String, Object> map = new HashMap<>();
+        Field[] fields = obj.getClass().getDeclaredFields();
+        for (Field field : fields) {
+            field.setAccessible(true); // 璁剧疆绉佹湁瀛楁涔熷彲浠ヨ闂�
+            try {
+                map.put(field.getName(), field.get(obj));
+            } catch (IllegalAccessException e) {
+                e.printStackTrace();
+            }
+        }
+        return map;
     }
 
 
-    // 鍏�/鍑哄簱浠诲姟瀹屾垚涓婃姤
+
+    /**
+     * 鍏�/鍑哄簱浠诲姟瀹屾垚涓婃姤
+     *
+     * @param params
+     * @return
+     */
     public CommonResponse reportInOrOutBound(Object params) {
         if (Objects.isNull(params)) {
             throw new CoolException("鍏�/鍑哄簱浠诲姟淇℃伅鍙傛暟涓嶈兘涓虹┖锛侊紒");
@@ -64,29 +164,172 @@
 
         // TODO锛氬弬鏁拌浆鎹�
         ErpReportParams erpReportParams = new ErpReportParams();
-        erpReportParams = (ErpReportParams) params;
-
-        String erpUrl = ERP_REPORT_URL + "/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Save.common.kdsvc";
-        log.info("Erp鍏�/鍑哄簱浠诲姟瀹屾垚涓婃姤锛� {}锛� 璇锋眰鍙傛暟锛� {}", erpUrl, JSONObject.toJSONString(erpReportParams));
-        try {
-            JSONObject jsonObject = postRequest(erpUrl, erpReportParams, true);
-            boolean sendSuccess = jsonObject.getJSONObject("Result").getJSONObject("ResponseStatus").getBoolean("IsSuccess");
-
-            // TODO:杞崲鍚庤繑鍥�
-            if (sendSuccess) {
-                return CommonResponse.ok();
-            } else {
-                JSONArray errors = jsonObject.getJSONObject("Result").getJSONObject("ResponseStatus").getJSONArray("Errors");
-                String errorMsg = "";
-                for (int i = 0; i < errors.size(); i++) {
-                    errorMsg += errors.getJSONObject(i).getString("Message") + " ";
+        if (params instanceof ErpReportParams) {
+            erpReportParams = (ErpReportParams) params;
+        } else if (params instanceof java.util.Map) {
+            java.util.Map<String, Object> paramMap = (java.util.Map<String, Object>) params;
+            
+            // 璁剧疆鍩烘湰灞炴��
+            erpReportParams.setFDate((String) paramMap.get("FDate"));
+            erpReportParams.setF_OHDL_BillnoType((String) paramMap.get("F_OHDL_BillnoType"));
+            erpReportParams.setFStockOrgId(paramMap.get("FStockOrgId"));
+            erpReportParams.setFPrdOrgId(paramMap.get("FPrdOrgId"));
+            erpReportParams.setF_OHDL_ProPlan((String) paramMap.get("F_OHDL_ProPlan"));
+            
+            // 澶勭悊FEntity鍒楄〃
+            Object fEntityObj = paramMap.get("FEntity");
+            if (fEntityObj instanceof java.util.List) {
+                java.util.List<?> fEntityList = (java.util.List<?>) fEntityObj;
+                java.util.List<ErpReportParams.FEntityItem> entityItems = new java.util.ArrayList<>();
+                
+                for (Object item : fEntityList) {
+                    if (item instanceof java.util.Map) {
+                        java.util.Map<String, Object> itemMap = (java.util.Map<String, Object>) item;
+                        ErpReportParams.FEntityItem entityItem = new ErpReportParams.FEntityItem();
+                        
+                        // 浣跨敤鍙嶅皠璁剧疆灞炴�у��
+                        try {
+                            // 浣跨敤鍙嶅皠鐩存帴璁块棶瀛楁骞惰缃��
+                            java.lang.reflect.Field field;
+                            
+                            field = entityItem.getClass().getDeclaredField("FMaterialId");
+                            field.setAccessible(true);
+                            field.set(entityItem, itemMap.get("FMaterialId"));
+                            
+                            field = entityItem.getClass().getDeclaredField("FUnitID");
+                            field.setAccessible(true);
+                            field.set(entityItem, itemMap.get("FUnitID"));
+                            
+                            // 澶勭悊鏁板�肩被鍨�
+                            Object fAppQty = itemMap.get("FAppQty");
+                            if (fAppQty instanceof Number) {
+                                field = entityItem.getClass().getDeclaredField("FAppQty");
+                                field.setAccessible(true);
+                                field.set(entityItem, ((Number) fAppQty).doubleValue());
+                            } else if (fAppQty != null) {
+                                field = entityItem.getClass().getDeclaredField("FAppQty");
+                                field.setAccessible(true);
+                                field.set(entityItem, Double.parseDouble(fAppQty.toString()));
+                            }
+                            
+                            Object fActualQty = itemMap.get("FActualQty");
+                            if (fActualQty instanceof Number) {
+                                field = entityItem.getClass().getDeclaredField("FActualQty");
+                                field.setAccessible(true);
+                                field.set(entityItem, ((Number) fActualQty).doubleValue());
+                            } else if (fActualQty != null) {
+                                field = entityItem.getClass().getDeclaredField("FActualQty");
+                                field.setAccessible(true);
+                                field.set(entityItem, Double.parseDouble(fActualQty.toString()));
+                            }
+                            
+                            field = entityItem.getClass().getDeclaredField("FStockId");
+                            field.setAccessible(true);
+                            field.set(entityItem, itemMap.get("FStockId"));
+                            
+                            field = entityItem.getClass().getDeclaredField("F_OHDL_BworkShop");
+                            field.setAccessible(true);
+                            field.set(entityItem, itemMap.get("F_OHDL_BworkShop"));
+                            
+                            field = entityItem.getClass().getDeclaredField("F_OHDL_Pallet");
+                            field.setAccessible(true);
+                            field.set(entityItem, (String) itemMap.get("F_OHDL_Pallet"));
+                            
+                            field = entityItem.getClass().getDeclaredField("F_OHDL_ConPoint");
+                            field.setAccessible(true);
+                            field.set(entityItem, (String) itemMap.get("F_OHDL_ConPoint"));
+                            
+                            field = entityItem.getClass().getDeclaredField("F_OHDL_PlanNo");
+                            field.setAccessible(true);
+                            field.set(entityItem, (String) itemMap.get("F_OHDL_PlanNo"));
+                            
+                            field = entityItem.getClass().getDeclaredField("F_OHDL_MONo");
+                            field.setAccessible(true);
+                            field.set(entityItem, (String) itemMap.get("F_OHDL_MONo"));
+                            
+                            field = entityItem.getClass().getDeclaredField("F_OHDL_MOId");
+                            field.setAccessible(true);
+                            field.set(entityItem, (String) itemMap.get("F_OHDL_MOId"));
+                            
+                            field = entityItem.getClass().getDeclaredField("F_OHDL_MOLine");
+                            field.setAccessible(true);
+                            field.set(entityItem, (String) itemMap.get("F_OHDL_MOLine"));
+                            
+                            field = entityItem.getClass().getDeclaredField("F_OHDL_MOLineId");
+                            field.setAccessible(true);
+                            field.set(entityItem, (String) itemMap.get("F_OHDL_MOLineId"));
+                        } catch (Exception e) {
+                            log.error("璁剧疆FEntityItem灞炴�ф椂鍙戠敓閿欒: " + e.getMessage());
+                            throw new CoolException("璁剧疆FEntityItem灞炴�уけ璐�: " + e.getMessage());
+                        }
+                        
+                        entityItems.add(entityItem);
+                    } else if (item instanceof ErpReportParams.FEntityItem) {
+                        entityItems.add((ErpReportParams.FEntityItem) item);
+                    }
                 }
-                return CommonResponse.error(errorMsg);
+                erpReportParams.setFEntity(entityItems);
+            }
+        } else {
+            throw new CoolException("鏃犳硶澶勭悊鐨勫弬鏁扮被鍨�: " + params.getClass().getName());
+        }
+
+        JSONObject model = new JSONObject();
+        model.put("Model", erpReportParams);
+        JSONObject data = new JSONObject();
+        data.put("data", model);
+        data.put("formid", "ke3d5adc0bbe64eceafd5891400adf40e");
+
+        try {
+            JSONObject loginResult = loginBySign();
+            if (loginResult.getInteger("LoginResultType") == 1) {
+                String erpUrl = ERP_REPORT_URL + "/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Save.common.kdsvc";
+                log.info("Erp鍏�/鍑哄簱浠诲姟瀹屾垚涓婃姤锛� {}锛� 璇锋眰鍙傛暟锛� {}", erpUrl, JSONObject.toJSONString(data));
+
+                String result2 = httpPostExample(erpUrl, data.toJSONString());
+                JSONObject jsonObject = JSONObject.parseObject(result2);
+                log.info("Erp鍏�/鍑哄簱浠诲姟瀹屾垚涓婃姤杩斿洖" + jsonObject.toJSONString());
+                boolean sendSuccess = jsonObject.getJSONObject("Result").getJSONObject("ResponseStatus").getBoolean("IsSuccess");
+
+                // TODO:杞崲鍚庤繑鍥�
+                if (sendSuccess) {
+                    return CommonResponse.ok();
+                } else {
+                    JSONArray errors = jsonObject.getJSONObject("Result").getJSONObject("ResponseStatus").getJSONArray("Errors");
+                    String errorMsg = "";
+                    for (int i = 0; i < errors.size(); i++) {
+                        errorMsg += errors.getJSONObject(i).getString("Message") + " ";
+                    }
+                    return CommonResponse.error(errorMsg);
+                }
             }
         } catch (Exception e) {
-            log.error("Erp鍏�/鍑哄簱浠诲姟涓婃姤鍝嶅簲澶辫触", e);
-            throw new CoolException("Erp瑙f瀽鍝嶅簲澶辫触锛�" + e.getMessage());
+            log.error("loginBySign", e);
         }
+
+
+//        try {
+//            JSONObject jsonObject = postRequest(erpUrl, data, true);
+//            log.info(jsonObject.toJSONString());
+//            boolean sendSuccess = jsonObject.getJSONObject("Result").getJSONObject("ResponseStatus").getBoolean("IsSuccess");
+//
+//            // TODO:杞崲鍚庤繑鍥�
+//            if (sendSuccess) {
+//                return CommonResponse.ok();
+//            } else {
+//                JSONArray errors = jsonObject.getJSONObject("Result").getJSONObject("ResponseStatus").getJSONArray("Errors");
+//                String errorMsg = "";
+//                for (int i = 0; i < errors.size(); i++) {
+//                    errorMsg += errors.getJSONObject(i).getString("Message") + " ";
+//                }
+//                return CommonResponse.error(errorMsg);
+//            }
+//        } catch (Exception e) {
+//            log.error("Erp鍏�/鍑哄簱浠诲姟涓婃姤鍝嶅簲澶辫触", e);
+//            throw new CoolException("Erp瑙f瀽鍝嶅簲澶辫触锛�" + e.getMessage());
+//        }
+
+        return null;
     }
 
 
@@ -96,10 +339,28 @@
     // 鐩樼偣缁撴灉涓婃姤
 
 
+    // region 鐧诲綍
+    /**
+     * 鐧诲綍锛岀櫥褰曞弬鏁颁緷娆′负璐﹀ID銆佺敤鎴峰悕銆佸簲鐢↖D銆佹椂闂存埑銆佺鍚嶄俊鎭�佽瑷�ID
+     *
+     * @throws UnsupportedEncodingException
+     * @throws NoSuchAlgorithmException
+     */
+    public JSONObject loginBySign() throws UnsupportedEncodingException, NoSuchAlgorithmException {
+        String url = ERP_REPORT_URL + "/Kingdee.BOS.WebApi.ServicesStub.AuthService.LoginBySign.common.kdsvc";
+        JSONObject params = new JSONObject();
+        params.put("parameters", loginParams());
+        String result = httpPostExample(url, params.toJSONString());
+        return JSONObject.parseObject(result);
+    }
 
-
-
-
+    /**
+     * 鐧诲綍鍙傛暟鏁寸悊
+     *
+     * @return
+     * @throws UnsupportedEncodingException
+     * @throws NoSuchAlgorithmException
+     */
     private Object[] loginParams() throws UnsupportedEncodingException, NoSuchAlgorithmException {
         //鏃堕棿鎴�
         long timestamp = System.currentTimeMillis() / 1000;
@@ -137,16 +398,16 @@
         }
         return hashString.toString();
     }
+    // endregion
 
     /**
      * 閫氱敤HTTP POST璇锋眰鏂规硶
      *
      * @param url 璇锋眰URL
      * @param params 璇锋眰鍙傛暟
-     * @param needToken 鏄惁闇�瑕乼oken璁よ瘉
      * @return 鍝嶅簲缁撴灉
      */
-    public JSONObject postRequest(String url, Object params, boolean needToken) {
+    public JSONObject postRequest(String url, Object params) {
         if (StringUtils.isBlank(url)) {
             throw new CoolException("璇锋眰URL涓嶈兘涓虹┖锛侊紒");
         }
@@ -159,13 +420,21 @@
         HttpHeaders headers = new HttpHeaders();
         headers.add("Content-Type", "application/json;charset=utf-8");
 
-        if (needToken) {
-//            String token = getToken();
-//            headers.add("Authorization", "Bearer " + token);
-        }
-
         HttpEntity<Object> httpEntity = new HttpEntity<>(params, headers);
-        ResponseEntity<String> exchange = restTemplate.exchange(url, HttpMethod.POST, httpEntity, String.class);
+
+        // 鍒涘缓鏀寔蹇界暐SSL璇佷功楠岃瘉鐨凴estTemplate
+        RestTemplate sslRestTemplate = SslUtils.createIgnoreSSLRestTemplate();
+
+        // 璁剧疆閿欒澶勭悊鍣紝涓嶆姏鍑哄紓甯革紝鑰屾槸杩斿洖鍝嶅簲浣�
+        sslRestTemplate.setErrorHandler(new org.springframework.web.client.DefaultResponseErrorHandler() {
+            @Override
+            public boolean hasError(ClientHttpResponse response) throws IOException {
+                // 涓嶇鐘舵�佺爜濡備綍锛岄兘涓嶈涓洪敊璇�
+                return false;
+            }
+        });
+
+        ResponseEntity<String> exchange = sslRestTemplate.exchange(url, HttpMethod.POST, httpEntity, String.class);
         log.info("Erp POST璇锋眰鍝嶅簲缁撴灉锛� {}", exchange);
 
         if (Objects.isNull(exchange.getBody())) {
@@ -181,4 +450,143 @@
             throw new CoolException("Erp瑙f瀽鍝嶅簲澶辫触锛�" + e.getMessage());
         }
     }
+
+
+
+    /**
+     * HTTP POST璇锋眰绀轰緥 - 鏀寔HTTPS
+     *
+     * @param url    璇锋眰URL
+     * @param params 璇锋眰鍙傛暟
+     * @return 鍝嶅簲缁撴灉
+     */
+    public String httpPostExample(String url, String params) {
+        if (httpClient == null) {
+            httpClient = createHttpsClient();
+        }
+        HttpPost httpPost = new HttpPost(url);
+        try {
+            StringEntity entity = new StringEntity(params, "UTF-8");
+            httpPost.setEntity(entity);
+            httpPost.setHeader("Content-type", "application/json;charset=utf-8");
+            httpPost.setHeader("Accept", "application/json");
+            return EntityUtils.toString(httpClient.execute(httpPost).getEntity());
+        } catch (Exception e) {
+            log.error("HTTP POST璇锋眰澶辫触: {}", e.getMessage(), e);
+            throw new CoolException("HTTP POST璇锋眰澶辫触: " + e.getMessage());
+        }
+    }
+
+    /**
+     * 浣跨敤RestTemplate鐨凥TTPS POST璇锋眰绀轰緥
+     * 
+     * @param url    璇锋眰URL
+     * @param params 璇锋眰鍙傛暟
+     * @return 鍝嶅簲缁撴灉
+     */
+    public String httpsPostWithRestTemplate(String url, String params) {
+        try {
+            log.info("HTTPS POST璇锋眰锛� {}锛� 璇锋眰鍙傛暟锛� {}", url, params);
+
+            HttpHeaders headers = new HttpHeaders();
+            headers.add("Content-Type", "application/json;charset=utf-8");
+            headers.add("Accept", "application/json");
+
+            HttpEntity<String> httpEntity = new HttpEntity<>(params, headers);
+
+            // 浣跨敤椤圭洰涓凡鏈夌殑SSL宸ュ叿绫诲垱寤哄拷鐣SL璇佷功楠岃瘉鐨凴estTemplate
+            RestTemplate sslRestTemplate = SslUtils.createIgnoreSSLRestTemplate();
+
+            // 璁剧疆閿欒澶勭悊鍣紝涓嶆姏鍑哄紓甯革紝鑰屾槸杩斿洖鍝嶅簲浣�
+            sslRestTemplate.setErrorHandler(new org.springframework.web.client.DefaultResponseErrorHandler() {
+                @Override
+                public boolean hasError(ClientHttpResponse response) throws IOException {
+                    // 涓嶇鐘舵�佺爜濡備綍锛岄兘涓嶈涓洪敊璇�
+                    return false;
+                }
+            });
+
+            ResponseEntity<String> exchange = sslRestTemplate.exchange(url, HttpMethod.POST, httpEntity, String.class);
+            log.info("HTTPS POST璇锋眰鍝嶅簲缁撴灉锛� {}", exchange);
+
+            if (Objects.isNull(exchange.getBody())) {
+                throw new CoolException("璇锋眰澶辫触锛侊紒");
+            }
+
+            return exchange.getBody();
+        } catch (Exception e) {
+            log.error("HTTPS POST璇锋眰澶辫触: {}", e.getMessage(), e);
+            throw new CoolException("HTTPS POST璇锋眰澶辫触: " + e.getMessage());
+        }
+    }
+
+    /**
+     * 鍒涘缓鏀寔HTTPS鐨凥ttpClient
+     *
+     * @return CloseableHttpClient瀹炰緥
+     */
+    private CloseableHttpClient createHttpsClient() {
+        try {
+            // 鍒涘缓淇′换鎵�鏈夎瘉涔︾殑TrustManager
+            TrustManager[] trustAllCerts = new TrustManager[] {
+                new X509TrustManager() {
+                    public X509Certificate[] getAcceptedIssuers() { return null; }
+                    public void checkClientTrusted(X509Certificate[] certs, String authType) { }
+                    public void checkServerTrusted(X509Certificate[] certs, String authType) { }
+                }
+            };
+
+            // 鍒濆鍖朣SLContext
+            SSLContext sslContext = SSLContext.getInstance("TLS");
+            sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
+
+            // 鍒涘缓SSL杩炴帴绠$悊鍣�
+            SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
+                    sslContext,
+                    (hostname, session) -> true // 鍏佽鎵�鏈変富鏈哄悕
+            );
+
+            // 鍒涘缓HttpClientBuilder骞惰缃甋SL閰嶇疆
+            RequestConfig config = RequestConfig.custom()
+                    .setConnectTimeout(30000)  // 杩炴帴瓒呮椂鏃堕棿
+                    .setSocketTimeout(60000)   // 璇诲彇瓒呮椂鏃堕棿
+                    .build();
+
+            return HttpClients.custom()
+                    .setSSLSocketFactory(sslsf)
+                    .setDefaultRequestConfig(config)
+                    .build();
+        } catch (Exception e) {
+            log.error("鍒涘缓HTTPS瀹㈡埛绔け璐�: {}", e.getMessage(), e);
+            return HttpClients.createDefault(); // 鍥為��鍒伴粯璁ゅ鎴风
+        }
+    }
+
+//    /**
+//     * 绀轰緥锛氬浣曚娇鐢℉TTPS POST鏂规硶
+//     *
+//     * @param url    鐩爣URL
+//     * @param jsonData JSON鏁版嵁
+//     * @return 鍝嶅簲缁撴灉
+//     */
+//    public String exampleUsage(String url, String jsonData) {
+//        log.info("寮�濮嬭皟鐢℉TTPS POST璇锋眰绀轰緥");
+//
+//        try {
+//            // 鏂规硶1: 浣跨敤Apache HttpClient
+//            String result1 = httpPostExample(url, jsonData);
+//            log.info("浣跨敤HttpClient鐨凱OST璇锋眰缁撴灉: {}", result1);
+//
+//            // 鏂规硶2: 浣跨敤RestTemplate
+//            String result2 = httpsPostWithRestTemplate(url, jsonData);
+//            log.info("浣跨敤RestTemplate鐨凱OST璇锋眰缁撴灉: {}", result2);
+//
+//            // 鏍规嵁瀹為檯闇�瑕侀�夋嫨杩斿洖缁撴灉
+//            return result1;
+//        } catch (Exception e) {
+//            log.error("HTTPS POST璇锋眰绀轰緥鎵ц澶辫触: {}", e.getMessage(), e);
+//            throw e;
+//        }
+//    }
+
 }

--
Gitblit v1.9.1