From 7944fe0c62ad8ac73bfc46b44bdc243c78158abb Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期一, 01 六月 2026 17:38:27 +0800
Subject: [PATCH] 销售订单数据排除反审

---
 src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java |  137 ++++++++++++++++++++++++++++-----------------
 1 files changed, 85 insertions(+), 52 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 1e94a30..24d8bc1 100644
--- a/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
+++ b/src/main/java/com/ruoyi/home/service/impl/HomeServiceImpl.java
@@ -151,7 +151,8 @@
         // 鍒涘缓LambdaQueryWrapper
         LambdaQueryWrapper<SalesLedger> salesLedgerLambdaQueryWrapper = new LambdaQueryWrapper<>();
         salesLedgerLambdaQueryWrapper.ge(SalesLedger::getEntryDate, currentMonth.atDay(1).atStartOfDay()) // 澶т簬绛変簬鏈湀绗竴澶�
-                .lt(SalesLedger::getEntryDate, currentMonth.plusMonths(1).atDay(1).atStartOfDay()); // 灏忎簬涓嬫湀绗竴澶�
+                .lt(SalesLedger::getEntryDate, currentMonth.plusMonths(1).atDay(1).atStartOfDay()) // 灏忎簬涓嬫湀绗竴澶�
+                .ne(SalesLedger::getReviewStatus, 2); // 鎺掗櫎鍙嶅鏍告暟鎹�
         List<SalesLedger> salesLedgers = salesLedgerMapper.selectList(salesLedgerLambdaQueryWrapper);
         if (!CollectionUtils.isEmpty(salesLedgers)) {
             // 鍚堣鍚堝悓閲戦
@@ -213,7 +214,7 @@
 
     @Override
     public AnalysisCustomerContractAmountsDto analysisCustomerContractAmounts() {
-        List<SalesLedger> salesLedgers = salesLedgerMapper.selectList(null);
+        List<SalesLedger> salesLedgers = salesLedgerMapper.selectList(new LambdaQueryWrapper<SalesLedger>().ne(SalesLedger::getReviewStatus, 2));
         // 鍚堣鍚堝悓閲戦
         BigDecimal contractAmount = salesLedgers.stream().map(SalesLedger::getContractAmount)
                 .filter(Objects::nonNull)
@@ -229,7 +230,8 @@
         LocalDate endOfWeek = today.with(DayOfWeek.SUNDAY);
         List<SalesLedger> salesLedgers1 = salesLedgerMapper.selectList(new LambdaQueryWrapper<SalesLedger>()
                 .ge(SalesLedger::getEntryDate, startOfWeek) // 澶т簬绛変簬鏈懆鍛ㄤ竴
-                .lt(SalesLedger::getEntryDate, endOfWeek.plusDays(1))); // 淇敼锛氫娇鐢� lt 骞跺姞涓婁竴澶╂潵鍖呭惈鍛ㄦ棩
+                .lt(SalesLedger::getEntryDate, endOfWeek.plusDays(1))
+                .ne(SalesLedger::getReviewStatus, 2)); // 淇敼锛氫娇鐢� lt 骞跺姞涓婁竴澶╂潵鍖呭惈鍛ㄦ棩
         BigDecimal weekContractAmount = salesLedgers1.stream().map(SalesLedger::getContractAmount)
                 .filter(Objects::nonNull)
                 .reduce(BigDecimal.ZERO, BigDecimal::add);
@@ -238,7 +240,8 @@
         LocalDate lastYearEndOfWeek = today.minusYears(1).with(DayOfWeek.SUNDAY);
         List<SalesLedger> salesLedgers2 = salesLedgerMapper.selectList(new LambdaQueryWrapper<SalesLedger>()
                 .ge(SalesLedger::getEntryDate, lastYearStartOfWeek) // 澶т簬绛変簬鍘诲勾鏈懆鍛ㄤ竴
-                .lt(SalesLedger::getEntryDate, lastYearEndOfWeek.plusDays(1))); // 淇敼锛氫娇鐢� lt 骞跺姞涓婁竴澶╂潵鍖呭惈鍛ㄦ棩
+                .lt(SalesLedger::getEntryDate, lastYearEndOfWeek.plusDays(1))
+                .ne(SalesLedger::getReviewStatus, 2)); // 淇敼锛氫娇鐢� lt 骞跺姞涓婁竴澶╂潵鍖呭惈鍛ㄦ棩
         BigDecimal lastYearWeekContractAmount = salesLedgers2.stream().map(SalesLedger::getContractAmount)
                 .filter(Objects::nonNull)
                 .reduce(BigDecimal.ZERO, BigDecimal::add);
@@ -258,13 +261,15 @@
         LocalDate plusDays = today.plusDays(1);
         List<SalesLedger> salesLedgers3 = salesLedgerMapper.selectList(new LambdaQueryWrapper<SalesLedger>()
                 .ge(SalesLedger::getEntryDate, today) // 澶т簬绛変簬浠婂ぉ
-                .lt(SalesLedger::getEntryDate, plusDays)); // 淇敼锛氫娇鐢� lt 骞跺姞涓婁竴澶╂潵鍖呭惈褰撳ぉ
+                .lt(SalesLedger::getEntryDate, plusDays)
+                .ne(SalesLedger::getReviewStatus, 2)); // 淇敼锛氫娇鐢� lt 骞跺姞涓婁竴澶╂潵鍖呭惈褰撳ぉ
         BigDecimal todayContractAmount = salesLedgers3.stream().map(SalesLedger::getContractAmount)
                 .filter(Objects::nonNull)
                 .reduce(BigDecimal.ZERO, BigDecimal::add);
         List<SalesLedger> salesLedgers4 = salesLedgerMapper.selectList(new LambdaQueryWrapper<SalesLedger>()
                 .ge(SalesLedger::getEntryDate, yesterday) // 澶т簬绛変簬鏄ㄥぉ
-                .lt(SalesLedger::getEntryDate, today)); // 淇敼锛氫娇鐢� lt 鑰屼笉鏄� gt
+                .lt(SalesLedger::getEntryDate, today)
+                .ne(SalesLedger::getReviewStatus, 2)); // 淇敼锛氫娇鐢� lt 鑰屼笉鏄� gt
         BigDecimal lastYearYesterdayContractAmount = salesLedgers4.stream().map(SalesLedger::getContractAmount)
                 .filter(Objects::nonNull)
                 .reduce(BigDecimal.ZERO, BigDecimal::add);
@@ -306,6 +311,47 @@
         });
         analysisCustomerContractAmountsDto.setItem(mapDtos);
         return analysisCustomerContractAmountsDto;
+    }
+
+    private static BigDecimal nz(BigDecimal v) {
+        return v == null ? BigDecimal.ZERO : v;
+    }
+
+    /**
+     * 澶у睆/鎶ヨ〃缁熻鐢ㄥ悎鏍兼暟閲忥細浠� qualified_quantity
+     */
+    private BigDecimal inspectQualifiedQtyForStat(QualityInspect item) {
+        if (item.getQualifiedQuantity() != null) {
+            return item.getQualifiedQuantity();
+        }
+        BigDecimal qty = nz(item.getQuantity());
+        if ("鍚堟牸".equals(item.getCheckResult())) {
+            return qty;
+        }
+        return BigDecimal.ZERO;
+    }
+
+    /**
+     * 澶у睆/鎶ヨ〃缁熻鐢ㄤ笉鍚堟牸鏁伴噺锛氫互 unqualified_quantity
+     */
+    private BigDecimal inspectUnqualifiedQtyForStat(QualityInspect item) {
+        if (item.getUnqualifiedQuantity() != null) {
+            return item.getUnqualifiedQuantity();
+        }
+        BigDecimal qty = nz(item.getQuantity());
+        String cr = item.getCheckResult();
+        if ("涓嶅悎鏍�".equals(cr) || "閮ㄥ垎鍚堟牸".equals(cr)) {
+            return qty;
+        }
+        return BigDecimal.ZERO;
+    }
+
+    private boolean inspectHasUnqualifiedVolume(QualityInspect item) {
+        return inspectUnqualifiedQtyForStat(item).compareTo(BigDecimal.ZERO) > 0;
+    }
+
+    private static int toStatInt(BigDecimal v) {
+        return nz(v).setScale(0, RoundingMode.HALF_UP).intValue();
     }
 
     @Override
@@ -355,29 +401,27 @@
             QualityStatisticsItem item = new QualityStatisticsItem();
             item.setDate(monthStart.format(monthFormatter)); // 鏃ユ湡鏄剧ず涓衡�滃勾鏈堚�濓紙濡� 2025-10锛�
 
-            // 1. 渚涘簲鍟嗘楠岋紙绫诲瀷0锛�- 鍚堟牸鏁伴噺
-            BigDecimal supplierQualified = monthInspects.stream()
+            // 1锝�3锛氭湰鏈堛�屼笉鍚堟牸鏁伴噺銆嶏紙浠呭凡鎻愪氦妫�楠岋級锛屾寜妫�楠岀被鍒媶鍒嗏�斺�旂敤浜庡浘琛ㄥ浘渚嬨�屆椕椾笉鍚堟牸鏁般��
+            BigDecimal supplierUnq = monthInspects.stream()
                     .filter(inspect -> inspect.getInspectType().equals(0)
-                            && "鍚堟牸".equals(inspect.getCheckResult()))
-                    .map(QualityInspect::getQuantity)
+                            && Objects.equals(inspect.getInspectState(), 1))
+                    .map(this::inspectUnqualifiedQtyForStat)
                     .reduce(BigDecimal.ZERO, BigDecimal::add);
-            item.setSupplierNum(supplierQualified);
+            item.setSupplierNum(supplierUnq);
 
-            // 2. 宸ュ簭妫�楠岋紙绫诲瀷1锛�- 鍚堟牸鏁伴噺
-            BigDecimal processQualified = monthInspects.stream()
+            BigDecimal processUnq = monthInspects.stream()
                     .filter(inspect -> inspect.getInspectType().equals(1)
-                            && "鍚堟牸".equals(inspect.getCheckResult()))
-                    .map(QualityInspect::getQuantity)
+                            && Objects.equals(inspect.getInspectState(), 1))
+                    .map(this::inspectUnqualifiedQtyForStat)
                     .reduce(BigDecimal.ZERO, BigDecimal::add);
-            item.setProcessNum(processQualified);
+            item.setProcessNum(processUnq);
 
-            // 3. 宸ュ巶妫�楠岋紙绫诲瀷2锛�- 鍚堟牸鏁伴噺
-            BigDecimal factoryQualified = monthInspects.stream()
+            BigDecimal factoryUnq = monthInspects.stream()
                     .filter(inspect -> inspect.getInspectType().equals(2)
-                            && "鍚堟牸".equals(inspect.getCheckResult()))
-                    .map(QualityInspect::getQuantity)
+                            && Objects.equals(inspect.getInspectState(), 1))
+                    .map(this::inspectUnqualifiedQtyForStat)
                     .reduce(BigDecimal.ZERO, BigDecimal::add);
-            item.setFactoryNum(factoryQualified);
+            item.setFactoryNum(factoryUnq);
 
             qualityStatisticsItems.add(item);
         }
@@ -464,8 +508,7 @@
         }
         // 搴旀敹
         List<SalesLedger> salesLedgers = salesLedgerMapper.selectList(new LambdaQueryWrapper<SalesLedger>()
-                // .ge(SalesLedger::getEntryDate, startDate)
-                // .lt(SalesLedger::getEntryDate, endDate)
+                .ne(SalesLedger::getReviewStatus, 2) // 鎺掗櫎鍙嶅鏍告暟鎹�
         );
         // BigDecimal receivableMoney =
         // salesLedgers.stream().map(SalesLedger::getContractAmount).reduce(BigDecimal.ZERO,
@@ -760,7 +803,8 @@
         List<SalesLedger> list = salesLedgerMapper.selectList(new LambdaQueryWrapper<SalesLedger>()
                 .eq(SalesLedger::getCustomerId, customerId)
                 .ge(SalesLedger::getEntryDate, start)
-                .le(SalesLedger::getEntryDate, end));
+                .le(SalesLedger::getEntryDate, end)
+                .ne(SalesLedger::getReviewStatus, 2));
 
         if (groupByMonth) {
             for (int i = 0; i < 3; i++) {
@@ -1902,17 +1946,14 @@
         BigDecimal unqualifiedCount = BigDecimal.ZERO;
 
         for (QualityInspect item : list) {
-            if ("鍚堟牸".equals(item.getCheckResult())) {
-                qualifiedCount = qualifiedCount.add(item.getQuantity());
-            } else {
-                unqualifiedCount = unqualifiedCount.add(item.getQuantity());
-            }
+            qualifiedCount = qualifiedCount.add(inspectQualifiedQtyForStat(item));
+            unqualifiedCount = unqualifiedCount.add(inspectUnqualifiedQtyForStat(item));
         }
 
         BigDecimal totalCount = qualifiedCount.add(unqualifiedCount);
 
-        dto.setQualifiedCount(qualifiedCount.intValue());
-        dto.setUnqualifiedCount(unqualifiedCount.intValue());
+        dto.setQualifiedCount(toStatInt(qualifiedCount));
+        dto.setUnqualifiedCount(toStatInt(unqualifiedCount));
 
         if (totalCount.compareTo(BigDecimal.ZERO) == 0) {
             dto.setQualifiedRate(BigDecimal.ZERO.setScale(2));
@@ -2175,13 +2216,8 @@
                 continue;
             }
 
-            BigDecimal quantity = item.getQuantity();
-
-            if ("鍚堟牸".equals(item.getCheckResult())) {
-                dto.setQualifiedCount(dto.getQualifiedCount().add(quantity));
-            } else {
-                dto.setUnqualifiedCount(dto.getUnqualifiedCount().add(quantity));
-            }
+            dto.setQualifiedCount(dto.getQualifiedCount().add(inspectQualifiedQtyForStat(item)));
+            dto.setUnqualifiedCount(dto.getUnqualifiedCount().add(inspectUnqualifiedQtyForStat(item)));
         }
 
         // 璁$畻鍚堟牸鐜�
@@ -2222,14 +2258,11 @@
             BigDecimal unqualifiedCount = BigDecimal.ZERO;
 
             for (QualityInspect item : items) {
-                BigDecimal qty = item.getQuantity();
+                BigDecimal qty = nz(item.getQuantity());
                 totalCount = totalCount.add(qty);
 
-                if ("鍚堟牸".equals(item.getCheckResult())) {
-                    qualifiedCount = qualifiedCount.add(qty);
-                } else {
-                    unqualifiedCount = unqualifiedCount.add(qty);
-                }
+                qualifiedCount = qualifiedCount.add(inspectQualifiedQtyForStat(item));
+                unqualifiedCount = unqualifiedCount.add(inspectUnqualifiedQtyForStat(item));
             }
 
             if (totalCount.compareTo(BigDecimal.ZERO) == 0) {
@@ -2358,10 +2391,10 @@
         dto.setProcessNum(sumQuantity(qualityInspectList, 1)); // 杩囩▼
         dto.setFactoryNum(sumQuantity(qualityInspectList, 2)); // 鍑哄巶
 
-        // 鍋囪 qualityInspectList 鏄竴涓� List<QualityInspect> 绫诲瀷鐨勯泦鍚�
-        Map<String, List<QualityInspect>> groupedByCheckResult = qualityInspectList.stream()
-                .collect(Collectors.groupingBy(QualityInspect::getCheckResult));
-        List<QualityInspect> qualityInspects = groupedByCheckResult.get("涓嶅悎鏍�");
+        // 瀛樺湪涓嶅悎鏍兼暟閲忕殑妫�楠屽崟锛堝惈鎸夋暟閲忔媶鍒嗙殑鏂版暟鎹紱鏃ф暟鎹粛鍙敤妫�娴嬬粨鏋滃厹搴曪級
+        List<QualityInspect> qualityInspects = qualityInspectList.stream()
+                .filter(this::inspectHasUnqualifiedVolume)
+                .collect(Collectors.toList());
         if (ObjectUtils.isNull(qualityInspects) || qualityInspects.size() == 0) {
             return dto;
         }
@@ -2416,11 +2449,11 @@
         QualityStatisticsItem item = new QualityStatisticsItem();
         item.setDate(dateLabel);
 
-        item.setSupplierNum(list.stream().filter(i -> i.getInspectType() == 0).map(QualityInspect::getQuantity)
+        item.setSupplierNum(list.stream().filter(i -> i.getInspectType() == 0).map(this::inspectUnqualifiedQtyForStat)
                 .reduce(BigDecimal.ZERO, BigDecimal::add));
-        item.setProcessNum(list.stream().filter(i -> i.getInspectType() == 1).map(QualityInspect::getQuantity)
+        item.setProcessNum(list.stream().filter(i -> i.getInspectType() == 1).map(this::inspectUnqualifiedQtyForStat)
                 .reduce(BigDecimal.ZERO, BigDecimal::add));
-        item.setFactoryNum(list.stream().filter(i -> i.getInspectType() == 2).map(QualityInspect::getQuantity)
+        item.setFactoryNum(list.stream().filter(i -> i.getInspectType() == 2).map(this::inspectUnqualifiedQtyForStat)
                 .reduce(BigDecimal.ZERO, BigDecimal::add));
 
         return item;
@@ -2459,4 +2492,4 @@
 
         return productProcessMapper.calculateProductionStatistics(startDateTime, endDateTime, userId, processIds);
     }
-}
+}
\ No newline at end of file

--
Gitblit v1.9.3