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