From 513d43f848fe94e591ac42d7cc4316c887df7062 Mon Sep 17 00:00:00 2001
From: yiwenpeng <ywp303@163.com>
Date: Wed, 28 Feb 2024 14:19:04 +0800
Subject: [PATCH] feat: 库存监控相同库位code和物料code合并qty显示

---
 src/main/java/com/huaheng/pc/config/location/controller/LocationController.java | 46 ++++++++++++++++++++++++++++++++++++++++++----
 1 file changed, 42 insertions(+), 4 deletions(-)

diff --git a/src/main/java/com/huaheng/pc/config/location/controller/LocationController.java b/src/main/java/com/huaheng/pc/config/location/controller/LocationController.java
index 4b92dcd..df18496 100644
--- a/src/main/java/com/huaheng/pc/config/location/controller/LocationController.java
+++ b/src/main/java/com/huaheng/pc/config/location/controller/LocationController.java
@@ -41,13 +41,10 @@ import org.springframework.stereotype.Controller;
 import org.springframework.ui.ModelMap;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.*;
 import javax.annotation.Resource;
 import javax.sql.DataSource;
 import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
 import java.util.stream.Collectors;
 
 @Api(tags = {"库位操作类"})
@@ -314,6 +311,8 @@ public class LocationController extends BaseController {
         List<Location> locations = locationService.list(locationLambdaQueryWrapper);
         List<InventoryDetail> inventoryDetailList = inventoryDetailService.list();
 
+        inventoryDetailList = mergeAndSumQuantities(inventoryDetailList);
+
         for (Location location1 : locations) {
             InventoryDetail inventoryDetail = null;
             for (InventoryDetail inventoryDetail2 : inventoryDetailList) {
@@ -391,6 +390,45 @@ public class LocationController extends BaseController {
     }
 
 
+    // 库位和物料code相同的合并
+    public static List<InventoryDetail> mergeAndSumQuantities(List<InventoryDetail> inventoryDetailList) {
+        // 创建一个 HashMap 用于存储相同 MaterialCode 和 LocationCode 的总数量
+        Map<String, BigDecimal> mergedQuantities = new HashMap<>();
+
+        // 遍历列表,将相同 MaterialCode 和 LocationCode 的数量进行累加
+        for (InventoryDetail detail : inventoryDetailList) {
+            String key = detail.getMaterialCode() + "-" + detail.getLocationCode();
+            BigDecimal qty = detail.getQty();
+
+            // 如果 HashMap 中已存在相同的 key,则将数量累加起来,否则将新的 key-value 添加到 HashMap 中
+            mergedQuantities.merge(key, qty, BigDecimal::add);
+        }
+
+        // 创建一个新的列表来存储合并后的数量
+        List<InventoryDetail> mergedList = new ArrayList<>();
+        // 创建一个集合用于跟踪已处理的 key
+        Set<String> processedKeys = new HashSet<>();
+
+        // 遍历原始列表,并将每个 MaterialCode 和 LocationCode 的第一个出现的项添加到合并列表中
+        for (InventoryDetail detail : inventoryDetailList) {
+            String key = detail.getMaterialCode() + "-" + detail.getLocationCode();
+
+            // 检查是否已处理过该 key,如果是则跳过
+            if (processedKeys.contains(key)) {
+                continue;
+            }
+
+            // 设置合并后的数量,并将其添加到合并列表中
+            detail.setQty(mergedQuantities.get(key));
+            mergedList.add(detail);
+
+            // 标记该 key 已处理
+            processedKeys.add(key);
+        }
+
+        return mergedList;
+    }
+
     @Log(title = "配置-库存资料-库位条码", operating = "库位条码打印", action = BusinessType.OTHER)
     //  @ResponseBody // 错误1ajax是json数据而没有添加该注解返回值不为json所以不能够返回common.ajaxSetup.textStatus= "parsererror"报错
     @GetMapping("/print/{ids}")
--
libgit2 0.22.2