From 875adbd59a28453cdf443c3244e2691ad1dd02ac Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期四, 17 九月 2026 00:13:08 +0800
Subject: [PATCH] fix: 产品父类名称适配

---
 src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java |  108 ++++++++++++++++++++++++++++++++----------------------
 1 files changed, 64 insertions(+), 44 deletions(-)

diff --git a/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java b/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
index f09323d..500b934 100644
--- a/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
+++ b/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
@@ -185,28 +185,31 @@
         LambdaQueryWrapper<PurchaseLedger> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.ge(PurchaseLedger::getEntryDate, currentMonth.atDay(1).atStartOfDay()) // 澶т簬绛変簬鏈湀绗竴澶�
                 .lt(PurchaseLedger::getEntryDate, currentMonth.plusMonths(1).atDay(1).atStartOfDay()); // 灏忎簬涓嬫湀绗竴澶�
-        // 鎵ц鏌ヨ骞惰绠楁�诲拰
+
         List<PurchaseLedger> purchaseLedgers = purchaseLedgerMapper.selectList(queryWrapper);
         if (!CollectionUtils.isEmpty(purchaseLedgers)) {
-            LambdaQueryWrapper<SalesLedgerProduct> salesLedgerProductMapperLambdaQueryWrapperCopy = new LambdaQueryWrapper<SalesLedgerProduct>();
-            salesLedgerProductMapperLambdaQueryWrapperCopy.eq(SalesLedgerProduct::getType, 2)
+            LambdaQueryWrapper<SalesLedgerProduct> salesLedgerProductMapperLambdaQueryWrapperCopy = new LambdaQueryWrapper<>();
+            salesLedgerProductMapperLambdaQueryWrapperCopy.eq(SalesLedgerProduct::getType, 2) // 閲囪喘绫诲瀷
                     .in(SalesLedgerProduct::getSalesLedgerId,
                             purchaseLedgers.stream().map(PurchaseLedger::getId).collect(Collectors.toList()));
+
             List<SalesLedgerProduct> salesLedgerProductsCopy = salesLedgerProductMapper
                     .selectList(salesLedgerProductMapperLambdaQueryWrapperCopy);
-            // 鍚堣鍚堝悓閲戦
+
+            // 鍚堣鍚堝悓鎬婚噾棰�
             BigDecimal receiveAmount = purchaseLedgers.stream()
                     .map(PurchaseLedger::getContractAmount)
                     .filter(Objects::nonNull)
                     .reduce(BigDecimal.ZERO, BigDecimal::add);
-            // 鏈紑绁ㄩ噾棰�
+
+            //  寰呬粯娆炬�婚噾棰�
             BigDecimal unReceiptPaymentAmount = salesLedgerProductsCopy.stream()
-                    .map(SalesLedgerProduct::getNoInvoiceAmount)
+                    .map(SalesLedgerProduct::getPendingTicketsTotal)
                     .filter(Objects::nonNull)
                     .reduce(BigDecimal.ZERO, BigDecimal::add);
+
             homeBusinessDto.setMonthPurchaseMoney(receiveAmount.setScale(2, RoundingMode.HALF_UP).toString());
-            homeBusinessDto
-                    .setMonthPurchaseHaveMoney(unReceiptPaymentAmount.setScale(2, RoundingMode.HALF_UP).toString());
+            homeBusinessDto.setMonthPurchaseHaveMoney(unReceiptPaymentAmount.setScale(2, RoundingMode.HALF_UP).toString());
         }
         // 缁熻搴撳瓨
         BigDecimal stockQuantityTotal = stockInventoryMapper.selectTotal();
@@ -1085,26 +1088,17 @@
 
     @Override
     public List<Map<String, Object>> productInOutAnalysis(Integer type) {
-        String targetName;
+        // 0-鍘熸潗鏂� 1-鍗婃垚鍝� 2-鎴愬搧
+        Integer modelType;
         if (type == 1) {
-            targetName = "鍘熸潗鏂�";
+            modelType = 0;
         } else if (type == 2) {
-            targetName = "鎴愬搧";
+            modelType = 2;
         } else if (type == 3) {
-            targetName = "鍗婃垚鍝�";
+            modelType = 1;
         } else {
             return new ArrayList<>();
         }
-
-        LambdaQueryWrapper<Product> queryWrapper = new LambdaQueryWrapper<>();
-        queryWrapper.eq(Product::getProductName, targetName).isNull(Product::getParentId);
-        Product rootCategory = productMapper.selectOne(queryWrapper);
-
-        if (rootCategory == null) {
-            log.warn("鏈壘鍒板悕绉颁负 {} 鐨勯《绾т骇鍝佸垎绫�", targetName);
-            return new ArrayList<>();
-        }
-        Long rootCategoryId = rootCategory.getId();
 
         LocalDate now = LocalDate.now();
         DateTimeFormatter displayDtf = DateTimeFormatter.ofPattern("M/d");
@@ -1112,10 +1106,10 @@
         String startDate = now.minusDays(6).toString();
         String endDate = now.toString();
 
-        List<Map<String, Object>> inCounts = stockInventoryMapper.selectDailyStockInCounts(rootCategoryId, startDate,
+        List<Map<String, Object>> inCounts = stockInventoryMapper.selectDailyStockInCounts(modelType, startDate,
                 endDate + " 23:59:59");
 
-        List<Map<String, Object>> outCounts = stockInventoryMapper.selectDailyStockOutCounts(rootCategoryId, startDate,
+        List<Map<String, Object>> outCounts = stockInventoryMapper.selectDailyStockOutCounts(modelType, startDate,
                 endDate + " 23:59:59");
 
         Map<LocalDate, BigDecimal> inMap = inCounts.stream()
@@ -2110,33 +2104,23 @@
                 continue;
             }
 
-            // 鎵惧埌浜у搧澶х被
-            Product parent = product.getParentId() == null
-                    ? product
-                    : productMap.get(product.getParentId());
+            // 鎵惧埌浜у搧搴撴牴鑺傜偣锛堜骇鍝佸ぇ绫伙級
+            Product rootProduct = findRootProduct(product, productMap);
 
-            if (parent == null) {
-                continue;
-            }
+            String categoryTitle = resolveProductCategory(rootProduct.getProductName());
 
-            switch (parent.getProductName()) {
-                case "鍘熸潗鏂�":
-                    rawMaterialCount = rawMaterialCount.add(quantity);
-                    break;
-                case "鍗婃垚鍝�":
-                    semiFinishedCount = semiFinishedCount.add(quantity);
-                    break;
-                case "鎴愬搧":
-                    finishedCount = finishedCount.add(quantity);
-                    break;
-                default:
-                    break;
+            if ("鍘熸潗鏂�".equals(categoryTitle)) {
+                rawMaterialCount = rawMaterialCount.add(quantity);
+            } else if ("鍗婃垚鍝�".equals(categoryTitle)) {
+                semiFinishedCount = semiFinishedCount.add(quantity);
+            } else if ("鎴愬搧".equals(categoryTitle)) {
+                finishedCount = finishedCount.add(quantity);
             }
 
             // 缁勮鏄庣粏
             NonComplianceWarningDto.Item child = new NonComplianceWarningDto.Item();
             // child.setProductTitle(item.getProductName());
-            child.setParentProductTitle(parent.getProductName());
+            child.setParentProductTitle(categoryTitle);
             child.setProductTitle(item.getProductName());
             child.setDescription(item.getDefectivePhenomena());
             child.setDate(formatDate(item.getCheckTime()));
@@ -2155,6 +2139,42 @@
         return dto;
     }
 
+    /**
+     * 鍚戜笂鏌ユ壘浜у搧搴撴牴鑺傜偣锛堜骇鍝佸ぇ绫伙級
+     */
+    private Product findRootProduct(Product product, Map<Long, Product> productMap) {
+        Product current = product;
+        int depth = 0;
+        while (current.getParentId() != null && depth++ < 20) {
+            Product parent = productMap.get(current.getParentId());
+            if (parent == null) {
+                break;
+            }
+            current = parent;
+        }
+        return current;
+    }
+
+    /**
+     * 鏍规嵁浜у搧搴撴牴鑺傜偣鍚嶇О璇嗗埆浜у搧澶х被锛氬師鏉愭枡/鍗婃垚鍝�/鎴愬搧
+     * 娉ㄦ剰鍏堝垽鏂崐鎴愬搧锛岄伩鍏嶈鎴愬搧鍖呭惈
+     */
+    private String resolveProductCategory(String rootName) {
+        if (rootName == null) {
+            return "";
+        }
+        if (rootName.contains("鍗婃垚鍝�")) {
+            return "鍗婃垚鍝�";
+        }
+        if (rootName.contains("鎴愬搧")) {
+            return "鎴愬搧";
+        }
+        if (rootName.contains("鍘熸潗鏂�")) {
+            return "鍘熸潗鏂�";
+        }
+        return rootName;
+    }
+
     private BigDecimal calcRate(BigDecimal part, BigDecimal total) {
         if (total == null || total.compareTo(BigDecimal.ZERO) == 0) {
             return BigDecimal.ZERO.setScale(2);

--
Gitblit v1.9.3