From bb7dd1f513149ecd2887895c807861fdd06a43f6 Mon Sep 17 00:00:00 2001
From: chen.lin <1442464845@qq.com>
Date: 星期三, 11 二月 2026 15:29:27 +0800
Subject: [PATCH] 展示库存明细

---
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java |   68 ++++++++++++++++++++++++++++++++++
 1 files changed, 68 insertions(+), 0 deletions(-)

diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java
index 2e999d3..a42985b 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java
@@ -8,12 +8,16 @@
 import com.vincent.rsf.framework.exception.CoolException;
 import com.vincent.rsf.server.api.utils.LocUtils;
 import com.vincent.rsf.server.common.constant.Constants;
+import com.vincent.rsf.server.common.domain.BaseParam;
+import com.vincent.rsf.server.common.domain.PageParam;
 import com.vincent.rsf.server.manager.controller.dto.ExistDto;
 import com.vincent.rsf.server.manager.controller.dto.OrderOutItemDto;
 import com.vincent.rsf.server.manager.controller.params.*;
 import com.vincent.rsf.server.manager.enums.*;
+import com.vincent.rsf.server.manager.entity.Matnr;
 import com.vincent.rsf.server.manager.entity.*;
 import com.vincent.rsf.server.manager.mapper.AsnOrderMapper;
+import com.vincent.rsf.server.manager.mapper.LocItemMapper;
 import com.vincent.rsf.server.manager.service.*;
 import com.vincent.rsf.server.manager.utils.LocManageUtil;
 import com.vincent.rsf.server.manager.utils.OptimalAlgorithmUtil;
@@ -83,7 +87,71 @@
     private WaveOrderRelaServiceImpl waveOrderRelaService;
     @Autowired
     private TaskItemService taskItemService;
+    @Autowired
+    private LocItemMapper locItemMapper;
 
+    @Override
+    public PageParam<Matnr, BaseParam> pageMatnrForOutStock(PageParam<Matnr, BaseParam> pageParam, Map<String, Object> params) {
+        PageParam<Matnr, BaseParam> page = matnrService.getMatnrPage(pageParam, params);
+        List<Matnr> records = page.getRecords();
+        if (records == null || records.isEmpty()) {
+            return page;
+        }
+        List<Long> matnrIds = records.stream().map(Matnr::getId).collect(Collectors.toList());
+        String locUseStatus = params.get("locUseStatus") != null ? params.get("locUseStatus").toString() : null;
+        List<Map<String, Object>> stockList = locItemMapper.listStockByMatnrIds(matnrIds, locUseStatus);
+        Map<Long, Double> stockQtyMap = new HashMap<>();
+        Map<Long, String> locStatusDescMap = new HashMap<>();
+        Map<Long, String> locCodesMap = new HashMap<>();
+        for (Map<String, Object> row : stockList) {
+            Long matnrId = getLong(row, "matnrId", "matnrid");
+            if (matnrId == null) continue;
+            Object qty = getAny(row, "stockQty", "stockqty");
+            double v = qty instanceof Number ? ((Number) qty).doubleValue() : 0d;
+            stockQtyMap.put(matnrId, v);
+            String locCodes = getStr(row, "locCodes", "loccodes");
+            if (locCodes != null && !locCodes.isEmpty()) {
+                locCodesMap.put(matnrId, locCodes);
+            }
+            String locStatuses = getStr(row, "locStatuses", "locstatuses");
+            if (locStatuses != null && !locStatuses.isEmpty()) {
+                String desc = Arrays.stream(locStatuses.split(","))
+                        .map(String::trim)
+                        .map(LocStsType::getDescByType)
+                        .collect(Collectors.joining(","));
+                locStatusDescMap.put(matnrId, desc);
+            } else if (locUseStatus != null && !locUseStatus.isEmpty()) {
+                locStatusDescMap.put(matnrId, LocStsType.getDescByType(locUseStatus));
+            }
+        }
+        for (Matnr record : records) {
+            record.setStockQty(stockQtyMap.getOrDefault(record.getId(), 0d));
+            record.setLocUseStatus$(locStatusDescMap.get(record.getId()));
+            record.setLocCodes$(locCodesMap.get(record.getId()));
+        }
+        return page;
+    }
+
+    private static Long getLong(Map<String, Object> map, String... keys) {
+        Object v = getAny(map, keys);
+        if (v == null) return null;
+        if (v instanceof Long) return (Long) v;
+        if (v instanceof Number) return ((Number) v).longValue();
+        try { return Long.parseLong(v.toString()); } catch (NumberFormatException e) { return null; }
+    }
+
+    private static String getStr(Map<String, Object> map, String... keys) {
+        Object v = getAny(map, keys);
+        return v != null ? v.toString() : null;
+    }
+
+    private static Object getAny(Map<String, Object> map, String... keys) {
+        for (String key : keys) {
+            Object v = map.get(key);
+            if (v != null) return v;
+        }
+        return null;
+    }
 
     /**
      * @param

--
Gitblit v1.9.1