From a0c27199b7e512dc4087b80e3808f5fb1a081f0d Mon Sep 17 00:00:00 2001
From: lbq <1065079612@qq.com>
Date: 星期四, 22 一月 2026 13:08:48 +0800
Subject: [PATCH] openapi,外部接口更新
---
rsf-open-api/src/main/java/com/vincent/rsf/openApi/controller/phyz/MESController.java | 15 +
rsf-open-api/src/main/java/com/vincent/rsf/openApi/controller/phyz/ERPController.java | 19 +
rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/phyz/impl/MesReportServiceImpl.java | 3
rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/phyz/ErpReportService.java | 6
rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/phyz/Station.java | 4
rsf-open-api/src/main/java/com/vincent/rsf/openApi/utils/SslUtils.java | 78 +++++++
rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/phyz/impl/ErpReportServiceImpl.java | 483 ++++++++++++++++++++++++++++++++++++++++---
rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/phyz/ErpReportParams.java | 20 +
8 files changed, 578 insertions(+), 50 deletions(-)
diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/controller/phyz/ERPController.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/controller/phyz/ERPController.java
index 1290258..9b84423 100644
--- a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/controller/phyz/ERPController.java
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/controller/phyz/ERPController.java
@@ -7,7 +7,6 @@
import com.vincent.rsf.openApi.entity.dto.CommonResponse;
import com.vincent.rsf.openApi.entity.phyz.*;
import com.vincent.rsf.openApi.service.phyz.ErpReportService;
-import com.vincent.rsf.server.manager.controller.params.AsnOrderAndItemsParams;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
@@ -28,6 +27,8 @@
@Api("閾跺骇鏂板伐鍘傦紙浜旀湡锛塃RP鎺ュ彛")
@Slf4j
public class ERPController {
+
+ public static JSONArray map = new JSONArray();
@Resource
private ErpReportService erpReportService;
@@ -115,6 +116,9 @@
JSONArray params = paramsFormat(objParams);
List<Order> orderList = JSON.parseArray(params.toJSONString(), Order.class);
// 鏁版嵁澶勭悊锛岃浆鍙憇erver
+ for (Order order : orderList) {
+ erpReportService.addOrderToServer(order);
+ }
return CommonResponse.ok();
}
@@ -132,8 +136,6 @@
JSONArray params = paramsFormat(objParams);
List<Order> orderList = JSON.parseArray(params.toJSONString(), Order.class);
// 鏁版嵁澶勭悊锛岃浆鍙憇erver
- AsnOrderAndItemsParams asnOrderAndItemsParams = new AsnOrderAndItemsParams();
- // asnOrder/items/save
return CommonResponse.ok();
}
@@ -179,7 +181,10 @@
" \"stockOrgId\": \"ORG001\"\n" +
" }\n" +
"]";
- return CommonResponse.ok(JSONArray.parseArray(x, InventoryDetails.class));
+ if (map == null || map.isEmpty()) {
+ map = JSON.parseArray(x);
+ }
+ return CommonResponse.ok(JSONArray.parseArray(map.toJSONString(), InventoryDetails.class));
}
InventoryQueryCondition condition = JSON.parseObject(params.toJSONString(), InventoryQueryCondition.class);
@@ -293,9 +298,9 @@
// region 娴嬭瘯鎺ㄩ�佸姛鑳�
@ApiOperation("鐧诲綍")
@PostMapping("/loginBySign")
- public CommonResponse loginBySign(@RequestBody Object objParams) {
+ public CommonResponse loginBySign() {
try {
- erpReportService.loginBySign();
+ return CommonResponse.ok(erpReportService.loginBySign());
} catch (Exception e) {
log.error("erp, loginBySign", e);
}
@@ -306,7 +311,7 @@
@PostMapping("/reportInOrOutBound")
public CommonResponse reportInOrOutBound(@RequestBody Object objParams) {
try {
- erpReportService.reportInOrOutBound(objParams);
+ return erpReportService.reportInOrOutBound(objParams);
} catch (Exception e) {
log.error("erp, reportInOrOutBound", e);
}
diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/controller/phyz/MESController.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/controller/phyz/MESController.java
index 7114a1e..e4ca70b 100644
--- a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/controller/phyz/MESController.java
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/controller/phyz/MESController.java
@@ -2,6 +2,7 @@
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
import com.vincent.rsf.framework.exception.CoolException;
import com.vincent.rsf.openApi.entity.dto.CommonResponse;
import com.vincent.rsf.openApi.entity.phyz.*;
@@ -38,7 +39,17 @@
throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒");
}
// 杩斿洖妯℃嫙鏁版嵁
- if (SIMULATED_DATA_ENABLE.equals("0")) {
+ if (SIMULATED_DATA_ENABLE.equals("1")) {
+ JSONArray params = paramsFormat(objParams);
+ List<MatPreparationOrder> orders = JSON.parseArray(params.toJSONString(), MatPreparationOrder.class);
+ JSONArray array = ERPController.map;
+ for (int i = 0; i < ERPController.map.size(); i++) {
+ JSONObject obj = array.getJSONObject(i);
+ obj.put("orderNo", orders.get(0).getOrderNo());
+ obj.put("matNr", orders.get(0).getOrderItems().get(0).getMatNr());
+ }
+ ERPController.map = array;
+
return CommonResponse.ok();
}
@@ -55,7 +66,7 @@
throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒");
}
// 杩斿洖妯℃嫙鏁版嵁
- if (SIMULATED_DATA_ENABLE.equals("0")) {
+ if (SIMULATED_DATA_ENABLE.equals("1")) {
return CommonResponse.ok();
}
diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/phyz/ErpReportParams.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/phyz/ErpReportParams.java
index 6770300..73c176a 100644
--- a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/phyz/ErpReportParams.java
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/phyz/ErpReportParams.java
@@ -1,5 +1,6 @@
package com.vincent.rsf.openApi.entity.phyz;
+import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModel;
import lombok.Data;
@@ -20,6 +21,7 @@
// 鏃ユ湡
@JsonProperty("FDate")
+ @JSONField(name = "FDate")
private String FDate;
// 鍗曟嵁绫诲瀷锛�
@@ -28,22 +30,27 @@
//鈥淐鈥�:鐢熶骇閫�鏂欏崟
//鈥淒鈥濈敓浜у叆搴撳崟
@JsonProperty("F_OHDL_BillnoType")
+ @JSONField(name = "F_OHDL_BillnoType")
private String F_OHDL_BillnoType;
// 搴撳瓨缁勭粐{"FNumber": "100"}
@JsonProperty("FStockOrgId")
+ @JSONField(name = "FStockOrgId")
private Object FStockOrgId;
// 鐢熶骇缁勭粐{"FNumber": "200"}
@JsonProperty("FPrdOrgId")
+ @JSONField(name = "FPrdOrgId")
private Object FPrdOrgId;
// 鐢熶骇璁″垝鍙�
@JsonProperty("F_OHDL_ProPlan")
+ @JSONField(name = "F_OHDL_ProPlan")
private String F_OHDL_ProPlan;
// 鍗曟嵁浣撴槑缁嗘暟鎹寘
@JsonProperty("FEntity")
+ @JSONField(name = "FEntity")
private List<FEntityItem> FEntity;
// 鍗曟嵁浣撴槑缁�
@@ -51,54 +58,67 @@
// 鐗╂枡淇℃伅{"FNumber": ""}
@JsonProperty("FMaterialId")
+ @JSONField(name = "FMaterialId")
private Object FMaterialId;
// 璁¢噺鍗曚綅淇℃伅{"FNumber": "PCS"}
@JsonProperty("FUnitID")
+ @JSONField(name = "FUnitID")
private Object FUnitID;
// 鐢宠鏁伴噺
@JsonProperty("FAppQty")
+ @JSONField(name = "FAppQty")
private Double FAppQty;
// 瀹為檯鏁伴噺
@JsonProperty("FActualQty")
+ @JSONField(name = "FActualQty")
private Double FActualQty;
// 浠撳簱淇℃伅{"FNumber": ""}
@JsonProperty("FStockId")
+ @JSONField(name = "FStockId")
private Object FStockId;
// 杞﹂棿{"FNumber": ""}
@JsonProperty("F_OHDL_BworkShop")
+ @JSONField(name = "F_OHDL_BworkShop")
private Object F_OHDL_BworkShop;
// 鎵樼洏
@JsonProperty("F_OHDL_Pallet")
+ @JSONField(name = "F_OHDL_Pallet")
private String F_OHDL_Pallet;
// 鎺ラ┏鐐逛綅
@JsonProperty("F_OHDL_ConPoint")
+ @JSONField(name = "F_OHDL_ConPoint")
private String F_OHDL_ConPoint;
// 璁″垝璺熻釜鍙�
@JsonProperty("F_OHDL_PlanNo")
+ @JSONField(name = "F_OHDL_PlanNo")
private String F_OHDL_PlanNo;
// 鐢熶骇璁㈠崟缂栧彿
@JsonProperty("F_OHDL_MONo")
+ @JSONField(name = "F_OHDL_MONo")
private String F_OHDL_MONo;
// 鐢熶骇璁㈠崟ID
@JsonProperty("F_OHDL_MOId")
+ @JSONField(name = "F_OHDL_MOId")
private String F_OHDL_MOId;
// 鐢熶骇璁㈠崟琛屽彿
@JsonProperty("F_OHDL_MOLine")
+ @JSONField(name = "F_OHDL_MOLine")
private String F_OHDL_MOLine;
// 鐢熶骇璁㈠崟琛孖D
@JsonProperty("F_OHDL_MOLineId")
+ @JSONField(name = "F_OHDL_MOLineId")
private String F_OHDL_MOLineId;
}
diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/phyz/Station.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/phyz/Station.java
index c418d03..d3f5a08 100644
--- a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/phyz/Station.java
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/phyz/Station.java
@@ -44,4 +44,8 @@
@JsonProperty("CreatedBy")
@JSONField(name = "CreatedBy")
private String createdBy;
+ // 鏄惁鍙敤
+ @JsonProperty("IsValid")
+ @JSONField(name = "IsValid")
+ private boolean isValid;
}
diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/phyz/ErpReportService.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/phyz/ErpReportService.java
index 11f5d31..41da840 100644
--- a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/phyz/ErpReportService.java
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/phyz/ErpReportService.java
@@ -1,13 +1,17 @@
package com.vincent.rsf.openApi.service.phyz;
+import com.alibaba.fastjson.JSONObject;
import com.vincent.rsf.openApi.entity.dto.CommonResponse;
+import com.vincent.rsf.openApi.entity.phyz.Order;
import java.io.UnsupportedEncodingException;
import java.security.NoSuchAlgorithmException;
public interface ErpReportService {
- void loginBySign() throws UnsupportedEncodingException, NoSuchAlgorithmException;
+ int addOrderToServer(Order order);
+
+ JSONObject loginBySign() throws UnsupportedEncodingException, NoSuchAlgorithmException;
CommonResponse reportInOrOutBound(Object params);
}
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..7f3cf43 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,88 @@
- // 鐧诲綍鍙傛暟渚濇涓鸿处濂桰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 int 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);
+ // asnOrder/items/save
+ ResponseEntity<String> exchange = restTemplate.exchange(wmsUrl, HttpMethod.POST, httpEntity, String.class);
+ 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 1;
+ } else {
+ return 0;
+// throw new CoolException("鏌ヨ澶辫触锛侊紒");
+ }
+ } catch (JsonProcessingException e) {
+ return 0;
+// 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 +161,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 +336,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 +395,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 +417,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 +447,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;
+// }
+// }
+
}
diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/phyz/impl/MesReportServiceImpl.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/phyz/impl/MesReportServiceImpl.java
index a0d5fce..1a1ec55 100644
--- a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/phyz/impl/MesReportServiceImpl.java
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/phyz/impl/MesReportServiceImpl.java
@@ -167,6 +167,7 @@
station.setProductionLineCode((String) map.get("ProductionLineCode"));
station.setProductionLineName((String) map.get("ProductionLineName"));
station.setCreatedBy((String) map.get("CreatedBy"));
+ station.setValid(true);
stations.add(station);
} else if (obj instanceof Station) {
stations.add((Station) obj);
@@ -258,7 +259,7 @@
log.info("Mes POST璇锋眰锛� {}锛� 璇锋眰鍙傛暟锛� {}", url, JSONObject.toJSONString(params));
HttpHeaders headers = new HttpHeaders();
- headers.add("Content-Type", "application/json;charset=utf-8"); //
+ headers.add("Content-Type", "application/json;charset=utf-8");
headers.add("Authorization", "Bearer " + token);
HttpEntity<Object> httpEntity = new HttpEntity<>(params, headers);
diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/utils/SslUtils.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/utils/SslUtils.java
new file mode 100644
index 0000000..4a8b09b
--- /dev/null
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/utils/SslUtils.java
@@ -0,0 +1,78 @@
+package com.vincent.rsf.openApi.utils;
+
+import org.springframework.http.client.SimpleClientHttpRequestFactory;
+import org.springframework.http.client.ClientHttpRequestFactory;
+import org.springframework.web.client.RestTemplate;
+
+import javax.net.ssl.*;
+import java.io.IOException;
+import java.net.HttpURLConnection;
+import java.security.KeyManagementException;
+import java.security.NoSuchAlgorithmException;
+import java.security.cert.X509Certificate;
+
+/**
+ * SSL宸ュ叿绫伙紝鐢ㄤ簬鍒涘缓蹇界暐SSL璇佷功楠岃瘉鐨凴estTemplate
+ */
+public class SslUtils {
+
+ /**
+ * 鍒涘缓蹇界暐SSL璇佷功楠岃瘉鐨凴estTemplate
+ *
+ * @return RestTemplate瀹炰緥
+ */
+ public static RestTemplate createIgnoreSSLRestTemplate() {
+ 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) {
+ }
+ }
+ };
+
+ // 瀹夎淇′换鎵�鏈夎瘉涔︾殑TrustManager
+ SSLContext sslContext = SSLContext.getInstance("TLS");
+ sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
+
+ // 鍒涘缓HttpsURLConnection鐨勫伐鍘�
+ HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());
+
+ // 鍒涘缓璺宠繃涓绘満鍚嶉獙璇佺殑HostnameVerifier
+ HostnameVerifier allHostsValid = new HostnameVerifier() {
+ public boolean verify(String hostname, SSLSession session) {
+ return true;
+ }
+ };
+
+ // 瀹夎璺宠繃涓绘満鍚嶉獙璇佺殑HostnameVerifier
+ HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);
+
+ // 鍒涘缓鑷畾涔夌殑ClientHttpRequestFactory
+ SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory() {
+ @Override
+ protected void prepareConnection(HttpURLConnection connection, String httpMethod) throws IOException {
+ if (connection instanceof HttpsURLConnection) {
+ ((HttpsURLConnection) connection).setSSLSocketFactory(sslContext.getSocketFactory());
+ ((HttpsURLConnection) connection).setHostnameVerifier(allHostsValid);
+ }
+ super.prepareConnection(connection, httpMethod);
+ }
+ };
+
+ // 鍒涘缓RestTemplate骞惰缃伐鍘�
+ RestTemplate restTemplate = new RestTemplate(factory);
+ return restTemplate;
+
+ } catch (NoSuchAlgorithmException | KeyManagementException e) {
+ throw new RuntimeException("Failed to create SSL RestTemplate", e);
+ }
+ }
+}
\ No newline at end of file
--
Gitblit v1.9.1