From a38d4a8619b886e2544cdefe421f171765ad2229 Mon Sep 17 00:00:00 2001
From: chen.lin <1442464845@qq.com>
Date: 星期二, 03 二月 2026 10:11:51 +0800
Subject: [PATCH] 库存汇总
---
rsf-open-api/src/main/java/com/vincent/rsf/openApi/controller/phyz/ERPController.java | 178 +++++++++++--------
rsf-open-api/src/main/java/com/vincent/rsf/openApi/feign/wms/fallback/WmsServerFeignClientFallback.java | 85 +++++++++
rsf-server/src/main/java/com/vincent/rsf/server/api/service/ReceiveMsgService.java | 7
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java | 182 ++++++++++++++++++++
rsf-open-api/src/main/java/com/vincent/rsf/openApi/feign/wms/WmsServerFeignClient.java | 8
rsf-server/src/main/java/com/vincent/rsf/server/api/controller/erp/ErpQueryController.java | 18 ++
rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/phyz/InventorySummary.java | 2
rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/constant/WmsConstant.java | 3
8 files changed, 404 insertions(+), 79 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 8da1005..d2f59c7 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
@@ -2,17 +2,16 @@
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
import com.vincent.rsf.framework.common.R;
import com.vincent.rsf.framework.exception.CoolException;
import com.vincent.rsf.openApi.entity.dto.CommonResponse;
import com.vincent.rsf.openApi.entity.phyz.*;
import com.vincent.rsf.openApi.feign.wms.WmsServerFeignClient;
+import com.vincent.rsf.openApi.feign.wms.fallback.WmsServerFeignClientFallback;
import com.vincent.rsf.openApi.service.phyz.ErpReportService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.compress.utils.Lists;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@@ -257,87 +256,114 @@
}
} catch (Exception e) {
log.error("搴撳瓨鏌ヨ鏄庣粏澶辫触", e);
- // 杩囨护閿欒娑堟伅涓殑URL锛屽彧淇濈暀閿欒绫诲瀷
- String errorMessage = e.getMessage();
- if (errorMessage != null) {
- // 濡傛灉鍖呭惈"executing"锛岃鏄庢槸HTTP璇锋眰閿欒锛屽幓鎺塙RL閮ㄥ垎
- if (errorMessage.contains("executing")) {
- int executingIndex = errorMessage.indexOf("executing");
- if (executingIndex > 0) {
- // 鎻愬彇"executing"涔嬪墠鐨勯儴鍒嗭紙濡�"Read timed out"锛�
- errorMessage = errorMessage.substring(0, executingIndex).trim();
- } else {
- // 濡傛灉"executing"鍦ㄥ紑澶达紝浣跨敤榛樿閿欒娑堟伅
- errorMessage = "璇锋眰瓒呮椂";
- }
- }
- // 濡傛灉鍖呭惈"http://"鎴�"https://"锛屼篃灏濊瘯鍘绘帀URL閮ㄥ垎
- else if (errorMessage.contains("http://") || errorMessage.contains("https://")) {
- // 浣跨敤姝e垯琛ㄨ揪寮忓幓鎺塙RL
- errorMessage = errorMessage.replaceAll("https?://[^\\s]+", "").trim();
- if (errorMessage.isEmpty()) {
- errorMessage = "璇锋眰澶辫触";
- }
- }
- }
- return CommonResponse.error("鏌ヨ澶辫触锛�" + (errorMessage != null && !errorMessage.isEmpty() ? errorMessage : "鏈煡閿欒"));
+ String errorMessage = WmsServerFeignClientFallback.filterErrorMessage(e);
+ return CommonResponse.error(errorMessage);
}
}
+ @ApiOperation("搴撳瓨鏌ヨ姹囨�伙紙琛ㄥ崟鎻愪氦锛�")
+ @PostMapping(value = "/inventory/summary", consumes = "application/x-www-form-urlencoded")
+ public CommonResponse queryInventorySummaryForm(HttpServletRequest request) {
+ // 浠庤〃鍗曞弬鏁版瀯寤烘煡璇㈡潯浠�
+ InventoryQueryCondition condition = buildConditionFromRequestParams(request);
+ // 璋冪敤JSON澶勭悊鏂规硶
+ return queryInventorySummary(condition);
+ }
+
@ApiOperation("搴撳瓨鏌ヨ姹囨��")
- @PostMapping("/inventory/summary")
- public CommonResponse queryInventorySummary(@RequestBody JSONObject params) {
+ @PostMapping(value = "/inventory/summary", consumes = "application/json")
+ public CommonResponse queryInventorySummary(@RequestBody(required = false) InventoryQueryCondition condition) {
+ // JSON鏂瑰紡锛氭敮鎸佷笉浼犻�掑弬鏁帮紙{}鎴杗ull鎴栫┖璇锋眰浣擄級锛屽垱寤洪粯璁ょ殑绌烘煡璇㈡潯浠跺璞�
+ if (condition == null) {
+ condition = new InventoryQueryCondition();
+ }
+
if (SIMULATED_DATA_ENABLE.equals("1")) {
- String s = "{\n" +
- " \"code\": 200,\n" +
- " \"msg\": \"鎿嶄綔鎴愬姛\",\n" +
- " \"data\": [\n" +
- " {\n" +
- " \"wareHouseId\": \"WH001\",\n" +
- " \"wareHouseName\": \"鍘熸枡浠撳簱\",\n" +
- " \"matNr\": \"MAT10001\",\n" +
- " \"makTx\": \"閽㈡潗Q235\",\n" +
- " \"spec\": \"鍥芥爣GB/T700-2006\",\n" +
- " \"anfme\": 10.5,\n" +
- " \"unit\": \"鍚╘",\n" +
- " \"stockOrgId\": \"ORG001\",\n" +
- " \"batch\": \"BATCH20260106001\",\n" +
- " \"planNo\": \"Plan20260106006\"\n" +
- " },\n" +
- " {\n" +
- " \"wareHouseId\": \"WH001\",\n" +
- " \"wareHouseName\": \"鍘熸枡浠撳簱\",\n" +
- " \"matNr\": \"MAT10002\",\n" +
- " \"makTx\": \"閾濆瀷鏉�6061\",\n" +
- " \"spec\": \"鍥芥爣GB/T3190-2008\",\n" +
- " \"anfme\": 20.3,\n" +
- " \"unit\": \"鍚╘",\n" +
- " \"stockOrgId\": \"ORG001\",\n" +
- " \"batch\": \"BATCH20260106002\",\n" +
- " \"planNo\": \"Plan20260106005\"\n" +
- " },\n" +
- " {\n" +
- " \"wareHouseId\": \"WH002\",\n" +
- " \"wareHouseName\": \"鎴愬搧浠撳簱\",\n" +
- " \"matNr\": \"MAT30001\",\n" +
- " \"makTx\": \"鐢垫満鎴愬搧\",\n" +
- " \"spec\": \"380V 50Hz 15KW\",\n" +
- " \"anfme\": 100,\n" +
- " \"unit\": \"鍙癨",\n" +
- " \"stockOrgId\": \"ORG001\",\n" +
- " \"batch\": \"BATCH20260106003\",\n" +
- " \"planNo\": \"Plan20260106004\"\n" +
- " }\n" +
- " ]\n" +
- "}";
- return JSONObject.parseObject(s, CommonResponse.class);
+ String x = "[\n" +
+ " {\n" +
+ " \"wareHouseId\": \"WH001\",\n" +
+ " \"wareHouseName\": \"鍘熸枡浠撳簱\",\n" +
+ " \"matNr\": \"MAT10001\",\n" +
+ " \"matTx\": \"閽㈡潗Q235\",\n" +
+ " \"spec\": \"鍥芥爣GB/T700-2006\",\n" +
+ " \"anfme\": 10.5,\n" +
+ " \"unit\": \"鍚╘",\n" +
+ " \"stockOrgId\": \"ORG001\",\n" +
+ " \"batch\": \"BATCH20260106001\",\n" +
+ " \"planNo\": \"Plan20260106006\"\n" +
+ " },\n" +
+ " {\n" +
+ " \"wareHouseId\": \"WH001\",\n" +
+ " \"wareHouseName\": \"鍘熸枡浠撳簱\",\n" +
+ " \"matNr\": \"MAT10002\",\n" +
+ " \"matTx\": \"閾濆瀷鏉�6061\",\n" +
+ " \"spec\": \"鍥芥爣GB/T3190-2008\",\n" +
+ " \"anfme\": 20.3,\n" +
+ " \"unit\": \"鍚╘",\n" +
+ " \"stockOrgId\": \"ORG001\",\n" +
+ " \"batch\": \"BATCH20260106002\",\n" +
+ " \"planNo\": \"Plan20260106005\"\n" +
+ " },\n" +
+ " {\n" +
+ " \"wareHouseId\": \"WH002\",\n" +
+ " \"wareHouseName\": \"鎴愬搧浠撳簱\",\n" +
+ " \"matNr\": \"MAT30001\",\n" +
+ " \"matTx\": \"鐢垫満鎴愬搧\",\n" +
+ " \"spec\": \"380V 50Hz 15KW\",\n" +
+ " \"anfme\": 100,\n" +
+ " \"unit\": \"鍙癨",\n" +
+ " \"stockOrgId\": \"ORG001\",\n" +
+ " \"batch\": \"BATCH20260106003\",\n" +
+ " \"planNo\": \"Plan20260106004\"\n" +
+ " }\n" +
+ "]";
+ return CommonResponse.ok(JSONArray.parseArray(x, InventorySummary.class));
}
- InventoryQueryCondition condition = JSON.parseObject(params.toJSONString(), InventoryQueryCondition.class);
- // 鏁版嵁澶勭悊锛岃浆鍙憇erver
- List<InventorySummary> inventorySummaries = Lists.newArrayList();
- return new CommonResponse().setCode(200).setData(inventorySummaries);
-
+ try {
+ if (wmsServerFeignClient == null) {
+ log.warn("WmsServerFeignClient鏈敞鍏ワ紝鏃犳硶杩涜璋冪敤");
+ return CommonResponse.error("鏈嶅姟鏈垵濮嬪寲");
+ }
+
+ log.info("搴撳瓨鏌ヨ姹囨�昏姹傚弬鏁帮細 {}", JSON.toJSONString(condition));
+
+ // 鐩存帴浼犻�掑疄浣撶被锛孎eign浼氳嚜鍔ㄥ簭鍒楀寲涓篔SON
+ R result = wmsServerFeignClient.queryInventorySummary(condition);
+
+ log.info("搴撳瓨鏌ヨ姹囨�昏繑鍥炵粨鏋滐細 {}", JSON.toJSONString(result));
+
+ if (result != null) {
+ // R绫荤户鎵胯嚜HashMap锛屼娇鐢╣et鏂规硶鑾峰彇鍊�
+ Integer code = (Integer) result.get("code");
+ String msg = (String) result.get("msg");
+ Object data = result.get("data");
+
+ if (code != null && code == 200) {
+ // 灏哅ap鍒楄〃杞崲涓篒nventorySummary鍒楄〃
+ if (data != null) {
+ @SuppressWarnings("unchecked")
+ List<Map<String, Object>> dataList = (List<Map<String, Object>>) data;
+ List<InventorySummary> inventorySummaries = new ArrayList<>();
+ for (Map<String, Object> item : dataList) {
+ InventorySummary summary = JSON.parseObject(JSON.toJSONString(item), InventorySummary.class);
+ inventorySummaries.add(summary);
+ }
+ return CommonResponse.ok(inventorySummaries);
+ } else {
+ return CommonResponse.ok(new ArrayList<>());
+ }
+ } else {
+ return CommonResponse.error(msg != null ? msg : "鏌ヨ澶辫触");
+ }
+ } else {
+ return CommonResponse.error("鏌ヨ澶辫触锛氳繑鍥炵粨鏋滀负绌�");
+ }
+ } catch (Exception e) {
+ log.error("搴撳瓨鏌ヨ姹囨�诲け璐�", e);
+ String errorMessage = WmsServerFeignClientFallback.filterErrorMessage(e);
+ return CommonResponse.error(errorMessage);
+ }
}
@ApiOperation("鐩樼偣缁撴灉纭")
diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/constant/WmsConstant.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/constant/WmsConstant.java
index f36148d..73da571 100644
--- a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/constant/WmsConstant.java
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/constant/WmsConstant.java
@@ -43,5 +43,8 @@
//搴撳瓨鏌ヨ鏄庣粏锛圗RP鎺ュ彛锛屽搴攐pen-api鐨�/inventory/details锛�
public static final String QUERY_INVENTORY_DETAILS = "/rsf-server/erp/inventory/details";
+ //搴撳瓨鏌ヨ姹囨�伙紙ERP鎺ュ彛锛屽搴攐pen-api鐨�/inventory/summary锛�
+ public static final String QUERY_INVENTORY_SUMMARY = "/rsf-server/erp/inventory/summary";
+
}
diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/phyz/InventorySummary.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/phyz/InventorySummary.java
index 7d51252..1fcfd78 100644
--- a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/phyz/InventorySummary.java
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/phyz/InventorySummary.java
@@ -18,7 +18,7 @@
// 鐗╂枡缂栫爜
private String matNr;
// 鐗╂枡鍚嶇О
- private String makTx;
+ private String matTx;
// 瑙勬牸
private String spec;
// 鏁伴噺锛屽皬鏁扮偣鏈�闀�6浣�
diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/feign/wms/WmsServerFeignClient.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/feign/wms/WmsServerFeignClient.java
index e48e236..299c917 100644
--- a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/feign/wms/WmsServerFeignClient.java
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/feign/wms/WmsServerFeignClient.java
@@ -31,4 +31,12 @@
*/
@PostMapping(WmsConstant.QUERY_INVENTORY_DETAILS)
R queryInventoryDetails(@RequestBody InventoryQueryCondition condition);
+
+ /**
+ * 搴撳瓨鏌ヨ姹囨�伙紙璋冪敤server绔殑erpQueryInventorySummary鏂规硶锛�
+ * @param condition 鏌ヨ鏉′欢瀹炰綋绫�
+ * @return 搴撳瓨姹囨�诲垪琛�
+ */
+ @PostMapping(WmsConstant.QUERY_INVENTORY_SUMMARY)
+ R queryInventorySummary(@RequestBody InventoryQueryCondition condition);
}
diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/feign/wms/fallback/WmsServerFeignClientFallback.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/feign/wms/fallback/WmsServerFeignClientFallback.java
index 0c846f7..2e33cf4 100644
--- a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/feign/wms/fallback/WmsServerFeignClientFallback.java
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/feign/wms/fallback/WmsServerFeignClientFallback.java
@@ -15,7 +15,88 @@
@Override
public R queryInventoryDetails(InventoryQueryCondition condition) {
- log.error("璋冪敤WMS Server搴撳瓨鏌ヨ鏄庣粏鎺ュ彛澶辫触锛岃Е鍙戦檷绾у鐞�");
- return R.error("鏈嶅姟璋冪敤澶辫触锛岃绋嶅悗閲嶈瘯");
+ return queryInventoryDetails(condition, null);
+ }
+
+ /**
+ * 搴撳瓨鏌ヨ鏄庣粏闄嶇骇澶勭悊锛堝甫寮傚父淇℃伅锛�
+ * @param condition 鏌ヨ鏉′欢
+ * @param throwable 寮傚父淇℃伅锛堝彲閫夛級
+ * @return 閿欒鍝嶅簲
+ */
+ public R queryInventoryDetails(InventoryQueryCondition condition, Throwable throwable) {
+ log.error("璋冪敤WMS Server搴撳瓨鏌ヨ鏄庣粏鎺ュ彛澶辫触锛岃Е鍙戦檷绾у鐞�", throwable);
+ String errorMessage = filterErrorMessage(throwable);
+ return R.error(errorMessage);
+ }
+
+ @Override
+ public R queryInventorySummary(InventoryQueryCondition condition) {
+ return queryInventorySummary(condition, null);
+ }
+
+ /**
+ * 搴撳瓨鏌ヨ姹囨�婚檷绾у鐞嗭紙甯﹀紓甯镐俊鎭級
+ * @param condition 鏌ヨ鏉′欢
+ * @param throwable 寮傚父淇℃伅锛堝彲閫夛級
+ * @return 閿欒鍝嶅簲
+ */
+ public R queryInventorySummary(InventoryQueryCondition condition, Throwable throwable) {
+ log.error("璋冪敤WMS Server搴撳瓨鏌ヨ姹囨�绘帴鍙eけ璐ワ紝瑙﹀彂闄嶇骇澶勭悊", throwable);
+ String errorMessage = filterErrorMessage(throwable);
+ return R.error(errorMessage);
+ }
+
+ /**
+ * 杩囨护閿欒娑堟伅涓殑URL锛屽彧淇濈暀閿欒绫诲瀷
+ * @param throwable 寮傚父瀵硅薄锛堝彲閫夛級
+ * @return 杩囨护鍚庣殑瀹屾暣閿欒娑堟伅锛堝寘鍚�"鏌ヨ澶辫触锛�"鍓嶇紑锛�
+ */
+ public static String filterErrorMessage(Throwable throwable) {
+ if (throwable == null) {
+ return "鏌ヨ澶辫触锛氭湇鍔¤皟鐢ㄥけ璐ワ紝璇风◢鍚庨噸璇�";
+ }
+ return filterErrorMessage(throwable.getMessage());
+ }
+
+ /**
+ * 杩囨护閿欒娑堟伅涓殑URL锛屽彧淇濈暀閿欒绫诲瀷
+ * @param errorMessage 閿欒娑堟伅瀛楃涓诧紙鍙�夛級
+ * @return 杩囨护鍚庣殑瀹屾暣閿欒娑堟伅锛堝寘鍚�"鏌ヨ澶辫触锛�"鍓嶇紑锛�
+ */
+ public static String filterErrorMessage(String errorMessage) {
+ if (errorMessage == null || errorMessage.isEmpty()) {
+ return "鏌ヨ澶辫触锛氭湭鐭ラ敊璇�";
+ }
+
+ String filteredMessage = errorMessage;
+
+ // 濡傛灉鍖呭惈"executing"锛岃鏄庢槸HTTP璇锋眰閿欒锛屽幓鎺塙RL閮ㄥ垎
+ if (filteredMessage.contains("executing")) {
+ int executingIndex = filteredMessage.indexOf("executing");
+ if (executingIndex > 0) {
+ // 鎻愬彇"executing"涔嬪墠鐨勯儴鍒嗭紙濡�"Read timed out"锛�
+ filteredMessage = filteredMessage.substring(0, executingIndex).trim();
+ } else {
+ // 濡傛灉"executing"鍦ㄥ紑澶达紝浣跨敤榛樿閿欒娑堟伅
+ filteredMessage = "璇锋眰瓒呮椂";
+ }
+ }
+ // 濡傛灉鍖呭惈"http://"鎴�"https://"锛屼篃灏濊瘯鍘绘帀URL閮ㄥ垎
+ else if (filteredMessage.contains("http://") || filteredMessage.contains("https://")) {
+ // 浣跨敤姝e垯琛ㄨ揪寮忓幓鎺塙RL
+ filteredMessage = filteredMessage.replaceAll("https?://[^\\s]+", "").trim();
+ if (filteredMessage.isEmpty()) {
+ filteredMessage = "璇锋眰澶辫触";
+ }
+ }
+
+ // 濡傛灉杩囨护鍚庣殑娑堟伅涓虹┖锛屼娇鐢ㄩ粯璁ら敊璇秷鎭�
+ if (filteredMessage.isEmpty()) {
+ filteredMessage = "鏈煡閿欒";
+ }
+
+ // 杩斿洖鍖呭惈"鏌ヨ澶辫触锛�"鍓嶇紑鐨勫畬鏁撮敊璇秷鎭�
+ return "鏌ヨ澶辫触锛�" + filteredMessage;
}
}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/erp/ErpQueryController.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/erp/ErpQueryController.java
index c70bf3d..36457c8 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/erp/ErpQueryController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/erp/ErpQueryController.java
@@ -121,4 +121,22 @@
return receiveMsgService.erpQueryInventoryDetails(condition);
}
+ /**
+ * ERP搴撳瓨鏌ヨ姹囨�伙紙渚沷pen-api妯″潡璋冪敤锛�
+ * 瀵瑰簲open-api鐨� /inventory/summary 鎺ュ彛
+ * @param condition 鏌ヨ鏉′欢
+ * @return 搴撳瓨姹囨�诲垪琛�
+ */
+ @PostMapping("/inventory/summary")
+ @ApiOperation(value = "ERP搴撳瓨鏌ヨ姹囨��", hidden = true)
+ @OperationLog("ERP搴撳瓨鏌ヨ姹囨��")
+ public R erpQueryInventorySummary(@RequestBody InventoryQueryConditionParam condition) {
+ // 鍙傛暟楠岃瘉
+ if (condition == null) {
+ return R.error("鏌ヨ鏉′欢涓嶈兘涓虹┖");
+ }
+
+ return receiveMsgService.erpQueryInventorySummary(condition);
+ }
+
}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/ReceiveMsgService.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/ReceiveMsgService.java
index 78a0464..f9b7559 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/ReceiveMsgService.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/ReceiveMsgService.java
@@ -159,4 +159,11 @@
* @return 搴撳瓨鏄庣粏鍒楄〃
*/
R erpQueryInventoryDetails(InventoryQueryConditionParam condition);
+
+ /**
+ * 搴撳瓨鏌ヨ姹囨�伙紙渚沷pen-api璋冪敤锛�
+ * @param condition 鏌ヨ鏉′欢
+ * @return 搴撳瓨姹囨�诲垪琛�
+ */
+ R erpQueryInventorySummary(InventoryQueryConditionParam condition);
}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java
index f771b8f..cd0ab43 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java
@@ -1200,4 +1200,186 @@
return details;
}
+
+ /**
+ * 搴撳瓨鏌ヨ姹囨�伙紙渚沷pen-api璋冪敤锛�
+ *
+ * @param condition 鏌ヨ鏉′欢瀹炰綋绫�
+ * @return 搴撳瓨姹囨�诲垪琛�
+ */
+ @Override
+ public R erpQueryInventorySummary(InventoryQueryConditionParam condition) {
+ try {
+ // 鍙傛暟楠岃瘉
+ if (condition == null) {
+ return R.error("鏌ヨ鏉′欢涓嶈兘涓虹┖");
+ }
+
+ // 灏咵RP鍙傛暟鏄犲皠涓烘暟鎹簱瀛楁鍚嶏紙涓嬪垝绾挎牸寮忥級
+ Map<String, Object> queryMap = new HashMap<>();
+
+ // 浠庡疄浣撶被涓彁鍙栨煡璇㈡潯浠讹紝鏄犲皠涓虹湡瀹炵殑鏁版嵁搴撳瓧娈靛悕
+ if (StringUtils.isNotBlank(condition.getMatNr())) {
+ queryMap.put("matnr_code", condition.getMatNr());
+ }
+ if (StringUtils.isNotBlank(condition.getPlanNo())) {
+ queryMap.put("track_code", condition.getPlanNo());
+ }
+ if (StringUtils.isNotBlank(condition.getBatch())) {
+ queryMap.put("batch", condition.getBatch());
+ }
+
+ BaseParam baseParam = new BaseParam();
+ baseParam.syncMap(queryMap);
+ PageParam<LocItem, BaseParam> pageParam = new PageParam<>(baseParam, LocItem.class);
+
+ QueryWrapper<LocItem> wrapper = pageParam.buildWrapper(false);
+
+ // 鐗╂枡缁勶紙闇�瑕侀�氳繃鐗╂枡琛ㄥ叧鑱旀煡璇級
+ if (StringUtils.isNotBlank(condition.getMatGroup())) {
+ // 璋冪敤鐗╂枡Service鏌ヨ鐗╂枡缁勫搴旂殑鐗╂枡ID鍒楄〃锛堝鐢ㄥ凡鏈夋柟娉曪級
+ LambdaQueryWrapper<Matnr> matnrWrapper = new LambdaQueryWrapper<>();
+ matnrWrapper.eq(Matnr::getGroupId, condition.getMatGroup());
+ List<Matnr> matnrs = matnrService.list(matnrWrapper);
+ if (!matnrs.isEmpty()) {
+ List<Long> matnrIds = matnrs.stream().map(Matnr::getId).collect(Collectors.toList());
+ wrapper.in("matnr_id", matnrIds);
+ } else {
+ // 濡傛灉娌℃湁鎵惧埌鐗╂枡锛岃繑鍥炵┖缁撴灉
+ return R.ok().add(new ArrayList<>());
+ }
+ }
+
+ // 鍙煡璇㈡甯哥姸鎬佺殑搴撳瓨锛坰tatus=1琛ㄧず姝e父锛�
+ wrapper.eq("status", 1);
+
+ // 璁剧疆鍒嗛〉鍙傛暟锛屾煡璇㈡墍鏈夋暟鎹敤浜庢眹鎬�
+ pageParam.setCurrent(1);
+ pageParam.setSize(Integer.MAX_VALUE);
+ PageParam<LocItem, BaseParam> pageResult = locItemService.page(pageParam, wrapper);
+ List<LocItem> locItems = pageResult.getRecords();
+
+ if (locItems.isEmpty()) {
+ return R.ok().add(new ArrayList<>());
+ }
+
+ // 鑾峰彇鎵�鏈夐渶瑕佸叧鑱旂殑ID
+ List<Long> locIds = locItems.stream()
+ .map(LocItem::getLocId)
+ .filter(Objects::nonNull)
+ .distinct()
+ .collect(Collectors.toList());
+
+ List<Long> warehouseIds = new ArrayList<>();
+
+ // 璋冪敤LocService鏌ヨ搴撲綅淇℃伅锛堝鐢⊿ervice灞傛柟娉曪級
+ Map<Long, Loc> locMap = new HashMap<>();
+ if (!locIds.isEmpty()) {
+ List<Loc> locs = locService.listByIds(locIds);
+ locMap = locs.stream().collect(Collectors.toMap(Loc::getId, loc -> loc));
+
+ // 鏀堕泦浠撳簱ID
+ warehouseIds = locs.stream()
+ .map(Loc::getWarehouseId)
+ .filter(Objects::nonNull)
+ .distinct()
+ .collect(Collectors.toList());
+ }
+
+ // 浠撳簱缂栫爜杩囨护
+ if (StringUtils.isNotBlank(condition.getWareHouseId())) {
+ String wareHouseId = condition.getWareHouseId();
+ LambdaQueryWrapper<Warehouse> whWrapper = new LambdaQueryWrapper<>();
+ whWrapper.eq(Warehouse::getCode, wareHouseId);
+ // 璋冪敤WarehouseService鏌ヨ浠撳簱淇℃伅锛堝鐢⊿ervice灞傛柟娉曪級
+ List<Warehouse> warehouses = warehouseService.list(whWrapper);
+ if (!warehouses.isEmpty()) {
+ Long targetWarehouseId = warehouses.get(0).getId();
+ // 杩囨护搴撲綅锛屽彧淇濈暀鐩爣浠撳簱鐨勫簱浣�
+ locMap = locMap.entrySet().stream()
+ .filter(entry -> Objects.equals(entry.getValue().getWarehouseId(), targetWarehouseId))
+ .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
+
+ // 杩囨护locItems锛屽彧淇濈暀鐩爣浠撳簱鐨�
+ Set<Long> validLocIds = locMap.keySet();
+ locItems = locItems.stream()
+ .filter(item -> item.getLocId() != null && validLocIds.contains(item.getLocId()))
+ .collect(Collectors.toList());
+
+ warehouseIds = Collections.singletonList(targetWarehouseId);
+ } else {
+ return R.ok().add(new ArrayList<>());
+ }
+ }
+
+ // 璋冪敤WarehouseService鏌ヨ浠撳簱淇℃伅锛堝鐢⊿ervice灞傛柟娉曪級
+ Map<Long, Warehouse> warehouseMap = new HashMap<>();
+ if (!warehouseIds.isEmpty()) {
+ List<Warehouse> warehouses = warehouseService.listByIds(warehouseIds);
+ warehouseMap = warehouses.stream().collect(Collectors.toMap(Warehouse::getId, wh -> wh));
+ }
+
+ // 鎸変粨搴撱�佺墿鏂欍�佹壒鍙枫�佸簱瀛樼粍缁囧垎缁勬眹鎬�
+ // 浣跨敤Map鐨刱ey浣滀负鍒嗙粍閿細wareHouseId_matNr_batch_stockOrgId
+ Map<String, Map<String, Object>> summaryMap = new HashMap<>();
+
+ for (LocItem locItem : locItems) {
+ // 鑾峰彇浠撳簱淇℃伅
+ Loc loc = null;
+ if (locItem.getLocId() != null) {
+ loc = locMap.get(locItem.getLocId());
+ }
+
+ if (loc == null) {
+ continue;
+ }
+
+ Warehouse warehouse = null;
+ if (loc.getWarehouseId() != null && warehouseMap.containsKey(loc.getWarehouseId())) {
+ warehouse = warehouseMap.get(loc.getWarehouseId());
+ }
+
+ if (warehouse == null) {
+ continue;
+ }
+
+ // 鏋勫缓鍒嗙粍閿細wareHouseId_matNr_batch_stockOrgId
+ String wareHouseId = warehouse.getCode();
+ String matNr = locItem.getMatnrCode();
+ String batch = locItem.getBatch() != null ? locItem.getBatch() : "";
+ String stockOrgId = locItem.getUseOrgId() != null ? locItem.getUseOrgId() : "";
+ String groupKey = wareHouseId + "_" + matNr + "_" + batch + "_" + stockOrgId;
+
+ // 濡傛灉璇ュ垎缁勫凡瀛樺湪锛岀疮鍔犳暟閲�
+ if (summaryMap.containsKey(groupKey)) {
+ Map<String, Object> summary = summaryMap.get(groupKey);
+ Double currentAnfme = (Double) summary.get("anfme");
+ Double newAnfme = currentAnfme + (locItem.getAnfme() != null ? locItem.getAnfme() : 0.0);
+ summary.put("anfme", newAnfme);
+ } else {
+ // 鍒涘缓鏂扮殑姹囨�昏褰�
+ Map<String, Object> summary = new HashMap<>();
+ summary.put("wareHouseId", wareHouseId);
+ summary.put("wareHouseName", warehouse.getName());
+ summary.put("matNr", matNr);
+ summary.put("matTx", locItem.getMaktx());
+ summary.put("spec", locItem.getSpec());
+ summary.put("unit", locItem.getUnit());
+ summary.put("anfme", locItem.getAnfme() != null ? locItem.getAnfme() : 0.0);
+ summary.put("batch", locItem.getBatch());
+ summary.put("stockOrgId", locItem.getUseOrgId());
+ summary.put("planNo", locItem.getTrackCode());
+ summaryMap.put(groupKey, summary);
+ }
+ }
+
+ // 杞崲涓哄垪琛�
+ List<Map<String, Object>> result = new ArrayList<>(summaryMap.values());
+
+ return R.ok().add(result);
+ } catch (Exception e) {
+ log.error("搴撳瓨鏌ヨ姹囨�诲け璐�", e);
+ return R.error("鏌ヨ澶辫触锛�" + e.getMessage());
+ }
+ }
}
--
Gitblit v1.9.1