From 8dfd55ef1c0eccf3adf105f0d4f5828bdbc3f86d Mon Sep 17 00:00:00 2001
From: 1 <1@123>
Date: 星期五, 23 一月 2026 18:52:47 +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