From cc9e229da3a5d06be13e9ade5b5254d403f47c57 Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期四, 02 四月 2026 14:42:30 +0800
Subject: [PATCH] 生产报表相关接口

---
 src/main/java/com/ruoyi/production/service/impl/ProductionStatisticServiceImpl.java |   68 ++++++++++++++++++++++++----------
 1 files changed, 48 insertions(+), 20 deletions(-)

diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionStatisticServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionStatisticServiceImpl.java
index 17dc1c4..c32593d 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionStatisticServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionStatisticServiceImpl.java
@@ -346,6 +346,8 @@
         // 瑙f瀽鏃ユ湡
         LocalDate startLocalDate = LocalDate.parse(startDate);
         LocalDate endLocalDate = LocalDate.parse(endDate);
+        Date start = Date.from(startLocalDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
+        Date end = Date.from(endLocalDate.plusDays(1).atStartOfDay(ZoneId.systemDefault()).toInstant());
 
         // 鏌ヨ鎵�鏈夊伐搴�
         List<ProductProcess> processList = productProcessMapper.selectList(null);
@@ -356,6 +358,42 @@
         while (!currentDate.isAfter(endLocalDate)) {
             dateSet.add(currentDate);
             currentDate = currentDate.plusDays(1);
+        }
+        
+        // 涓�娆℃�ф煡璇㈡墍鏈夋棩鏈熻寖鍥村唴鐨勮川閲忔楠岃褰�
+        List<QualityInspect> allQualityInspects = qualityInspectMapper.selectList(
+                new LambdaQueryWrapper<QualityInspect>()
+                        .ge(QualityInspect::getCheckTime, start)
+                        .lt(QualityInspect::getCheckTime, end)
+        );
+        
+        // 鎸夋棩鏈熷拰宸ュ簭鍒嗙粍澶勭悊鏁版嵁
+        Map<LocalDate, Map<String, BigDecimal[]>> dateProcessMap = new HashMap<>();
+        
+        for (QualityInspect inspect : allQualityInspects) {
+            if (inspect.getCheckTime() != null && inspect.getProcess() != null) {
+                // 杞崲妫�鏌ユ椂闂翠负LocalDate
+                LocalDate inspectDate = inspect.getCheckTime().toInstant()
+                        .atZone(ZoneId.systemDefault()).toLocalDate();
+                
+                // 纭繚鏃ユ湡鍦ㄦ煡璇㈣寖鍥村唴
+                if (dateSet.contains(inspectDate)) {
+                    String processName = inspect.getProcess();
+                    
+                    // 鍒濆鍖栨棩鏈熷拰宸ュ簭鏁版嵁
+                    dateProcessMap.computeIfAbsent(inspectDate, k -> new HashMap<>());
+                    BigDecimal[] quantities = dateProcessMap.get(inspectDate)
+                            .computeIfAbsent(processName, k -> new BigDecimal[]{BigDecimal.ZERO, BigDecimal.ZERO});
+                    
+                    // 绱姞鏁伴噺
+                    if (inspect.getQuantity() != null) {
+                        quantities[0] = quantities[0].add(inspect.getQuantity());
+                    }
+                    if (inspect.getDefectiveQuantity() != null) {
+                        quantities[1] = quantities[1].add(inspect.getDefectiveQuantity());
+                    }
+                }
+            }
         }
         
         // 鏋勫缓缁撴灉鏁版嵁
@@ -370,30 +408,20 @@
             // 鍒濆鍖栧伐搴忔暟鎹垪琛�
             List<Map<String, Object>> processesList = new ArrayList<>();
             
+            // 鑾峰彇璇ユ棩鏈熺殑宸ュ簭鏁版嵁
+            Map<String, BigDecimal[]> processData = dateProcessMap.getOrDefault(date, new HashMap<>());
+            
             for (ProductProcess process : processList) {
                 if (process.getName() != null) {
-                    // 鏌ヨ璇ュ伐搴忓湪鎸囧畾鏃ユ湡鐨勮川閲忔楠岃褰�
-                    List<QualityInspect> qualityInspects = qualityInspectMapper.selectList(
-                            new LambdaQueryWrapper<QualityInspect>()
-                                    .eq(QualityInspect::getProcess, process.getName())
-                                    .ge(QualityInspect::getCheckTime, Date.from(date.atStartOfDay(ZoneId.systemDefault()).toInstant()))
-                                    .lt(QualityInspect::getCheckTime, Date.from(date.plusDays(1).atStartOfDay(ZoneId.systemDefault()).toInstant()))
-                    );
+                    String processName = process.getName();
+                    BigDecimal[] quantities = processData.getOrDefault(processName, new BigDecimal[]{BigDecimal.ZERO, BigDecimal.ZERO});
                     
-                    // 璁$畻璇ュ伐搴忕殑鎬绘楠屾暟閲忓拰涓嶈壇鏁伴噺
-                    BigDecimal processTotalQuantity = BigDecimal.ZERO;
-                    BigDecimal processDefectiveQuantity = BigDecimal.ZERO;
+                    BigDecimal processTotalQuantity = quantities[0];
+                    BigDecimal processDefectiveQuantity = quantities[1];
                     
-                    for (QualityInspect inspect : qualityInspects) {
-                        if (inspect.getQuantity() != null) {
-                            processTotalQuantity = processTotalQuantity.add(inspect.getQuantity());
-                            dailyTotalQuantity = dailyTotalQuantity.add(inspect.getQuantity());
-                        }
-                        if (inspect.getDefectiveQuantity() != null) {
-                            processDefectiveQuantity = processDefectiveQuantity.add(inspect.getDefectiveQuantity());
-                            dailyDefectiveQuantity = dailyDefectiveQuantity.add(inspect.getDefectiveQuantity());
-                        }
-                    }
+                    // 绱姞姣忔棩鎬绘暟閲�
+                    dailyTotalQuantity = dailyTotalQuantity.add(processTotalQuantity);
+                    dailyDefectiveQuantity = dailyDefectiveQuantity.add(processDefectiveQuantity);
                     
                     // 璁$畻璇ュ伐搴忕殑涓嶈壇鐜�
                     double processDefectRate = 0.0;

--
Gitblit v1.9.3