From b3fe06c151dc8455649bf0a46e481ceb83e3ea2a Mon Sep 17 00:00:00 2001
From: 吴羡 <16976746+Xian-TT3@user.noreply.gitee.com>
Date: 星期六, 07 十一月 2026 13:37:54 +0800
Subject: [PATCH] feat: 完成好水川 MOM 需求1/2/4/5/8(装箱、BOM成本、销售合同、劳动合同、留样)

---
 yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/api/purchase/ErpPurchaseOrderApiImpl.java |   43 +++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 43 insertions(+), 0 deletions(-)

diff --git a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/api/purchase/ErpPurchaseOrderApiImpl.java b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/api/purchase/ErpPurchaseOrderApiImpl.java
index 3a81eae..2fa2a19 100644
--- a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/api/purchase/ErpPurchaseOrderApiImpl.java
+++ b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/api/purchase/ErpPurchaseOrderApiImpl.java
@@ -17,8 +17,12 @@
 import org.springframework.web.bind.annotation.RestController;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.Collection;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
 
@@ -134,4 +138,43 @@
         return success(BeanUtils.toBean(items, ErpPurchaseOrderItemRespDTO.class));
     }
 
+    @Override
+    public CommonResult<Map<Long, BigDecimal>> getItemAveragePurchasePriceMap(Collection<Long> productIds) {
+        if (productIds == null || productIds.isEmpty()) {
+            return success(Collections.emptyMap());
+        }
+        // 1. 鏌ヨ宸插鏍搁噰璐鍗曚腑杩欎簺鐗╂枡鐨勬槑缁�
+        List<ErpPurchaseOrderItemDO> items = purchaseOrderItemMapper
+                .selectListByApprovedOrderAndProductIds(productIds);
+        if (items.isEmpty()) {
+            return success(Collections.emptyMap());
+        }
+        // 2. 鎸夌墿鏂欐眹鎬绘暟閲忓拰閲戦锛岃绠楀姞鏉冨钩鍧囦环锛歋UM(鎬讳环) / SUM(鏁伴噺)
+        Map<Long, BigDecimal> totalPriceMap = new HashMap<>();
+        Map<Long, BigDecimal> totalCountMap = new HashMap<>();
+        for (ErpPurchaseOrderItemDO item : items) {
+            if (item.getProductId() == null || item.getCount() == null
+                    || item.getCount().compareTo(BigDecimal.ZERO) <= 0) {
+                continue;
+            }
+            BigDecimal totalPrice = item.getTotalPrice();
+            if (totalPrice == null && item.getProductPrice() != null) {
+                totalPrice = item.getProductPrice().multiply(item.getCount());
+            }
+            if (totalPrice == null) {
+                continue;
+            }
+            totalPriceMap.merge(item.getProductId(), totalPrice, BigDecimal::add);
+            totalCountMap.merge(item.getProductId(), item.getCount(), BigDecimal::add);
+        }
+        Map<Long, BigDecimal> result = new HashMap<>(totalCountMap.size());
+        totalCountMap.forEach((productId, totalCount) -> {
+            BigDecimal totalPrice = totalPriceMap.get(productId);
+            if (totalPrice != null && totalCount.compareTo(BigDecimal.ZERO) > 0) {
+                result.put(productId, totalPrice.divide(totalCount, 6, RoundingMode.HALF_UP));
+            }
+        });
+        return success(result);
+    }
+
 }
\ No newline at end of file

--
Gitblit v1.9.3