From 6c3e93c94f74952a0cf1300822314caa21092de4 Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期四, 02 四月 2026 17:12:06 +0800
Subject: [PATCH] Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/smart_screen

---
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ClientServiceImpl.java |   80 +++++++++++++++++++++-------------------
 1 files changed, 42 insertions(+), 38 deletions(-)

diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ClientServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ClientServiceImpl.java
index a07a2a2..1cc1393 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ClientServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ClientServiceImpl.java
@@ -98,11 +98,29 @@
         List<Project> projects = projectMapper.selectList(projectWrapper);
 
         // 1. 统计项目总数及分类
-        vo.setProjectTotal(projects.size());
         long housingCount = projects.stream().filter(p -> p.getType() != null && p.getType() == 0).count();
         long municipalCount = projects.stream().filter(p -> p.getType() != null && p.getType() == 1).count();
-        vo.setHousingProjectCount((int) housingCount);
-        vo.setMunicipalProjectCount((int) municipalCount);
+
+        ClientParam clientParam = null;
+        if (clientId != null) {
+            clientParam = clientParamMapper.selectOne(
+                    new LambdaQueryWrapper<ClientParam>()
+                            .eq(ClientParam::getClientId, clientId.intValue())
+            );
+        }
+
+        int effectiveHousingCount = resolveDisplayProjectCount(
+                clientParam != null ? clientParam.getHousingProjectNum() : null,
+                housingCount
+        );
+        int effectiveMunicipalCount = resolveDisplayProjectCount(
+                clientParam != null ? clientParam.getMunicipalProjectNum() : null,
+                municipalCount
+        );
+
+        vo.setProjectTotal(effectiveHousingCount + effectiveMunicipalCount);
+        vo.setHousingProjectCount(effectiveHousingCount);
+        vo.setMunicipalProjectCount(effectiveMunicipalCount);
 
         // 计算检查覆盖率(仅当查询时间范围为当月时才计算)
         List<Integer> projectIds = projects.stream().map(Project::getId).collect(Collectors.toList());
@@ -139,15 +157,6 @@
                         .distinct()
                         .toList();
 
-                // 查询配置的项目总数
-                ClientParam clientParam = null;
-                if (clientId != null) {
-                    clientParam = clientParamMapper.selectOne(
-                        new LambdaQueryWrapper<ClientParam>()
-                            .eq(ClientParam::getClientId, clientId.intValue())
-                    );
-                }
-
                 // 房建检查覆盖率
                 List<Integer> housingProjectIds = projects.stream()
                         .filter(p -> p.getType() != null && p.getType() == 0)
@@ -157,12 +166,8 @@
                         .filter(housingProjectIds::contains)
                         .count();
 
-                // 使用配置的房建项目总数,如果没有配置则使用实际数量
-                int configuredHousingNum = (clientParam != null && clientParam.getHousingProjectNum() != null)
-                        ? clientParam.getHousingProjectNum()
-                        : (int) housingCount;
                 vo.setHousingInspectionCoverage(
-                        configuredHousingNum > 0 ? (int) Math.round(checkedHousingCount * 100.0 / configuredHousingNum) : 0
+                        effectiveHousingCount > 0 ? (int) Math.round(checkedHousingCount * 100.0 / effectiveHousingCount) : 0
                 );
 
                 // 市政检查覆盖率
@@ -174,12 +179,8 @@
                         .filter(municipalProjectIds::contains)
                         .count();
 
-                // 使用配置的市政项目总数,如果没有配置则使用实际数量
-                int configuredMunicipalNum = (clientParam != null && clientParam.getMunicipalProjectNum() != null)
-                        ? clientParam.getMunicipalProjectNum()
-                        : (int) municipalCount;
                 vo.setMunicipalInspectionCoverage(
-                        configuredMunicipalNum > 0 ? (int) Math.round(checkedMunicipalCount * 100.0 / configuredMunicipalNum) : 0
+                        effectiveMunicipalCount > 0 ? (int) Math.round(checkedMunicipalCount * 100.0 / effectiveMunicipalCount) : 0
                 );
             } else {
                 vo.setHousingInspectionCoverage(0);
@@ -269,9 +270,7 @@
             vo.setInspectedCount(0);
             vo.setInspectedHousingCount(0);
             vo.setInspectedMunicipalCount(0);
-            vo.setUninspectedCount(projects.size());
-            vo.setUninspectedHousingCount(vo.getHousingProjectCount());
-            vo.setUninspectedMunicipalCount(vo.getMunicipalProjectCount());
+            fillUninspectedProjectCounts(vo);
             return;
         }
 
@@ -287,9 +286,7 @@
             vo.setInspectedCount(0);
             vo.setInspectedHousingCount(0);
             vo.setInspectedMunicipalCount(0);
-            vo.setUninspectedCount(projects.size());
-            vo.setUninspectedHousingCount(vo.getHousingProjectCount());
-            vo.setUninspectedMunicipalCount(vo.getMunicipalProjectCount());
+            fillUninspectedProjectCounts(vo);
             return;
         }
 
@@ -327,16 +324,7 @@
         vo.setInspectedMunicipalCount((int) inspectedProjects.stream()
                 .filter(p -> p.getType() != null && p.getType() == 1).count());
 
-        // 未检查项目统计
-        List<Project> uninspectedProjects = projects.stream()
-                .filter(p -> !inspectedProjectIds.contains(p.getId()))
-                .toList();
-
-        vo.setUninspectedCount(uninspectedProjects.size());
-        vo.setUninspectedHousingCount((int) uninspectedProjects.stream()
-                .filter(p -> p.getType() != null && p.getType() == 0).count());
-        vo.setUninspectedMunicipalCount((int) uninspectedProjects.stream()
-                .filter(p -> p.getType() != null && p.getType() == 1).count());
+        fillUninspectedProjectCounts(vo);
     }
 
     /**
@@ -732,6 +720,22 @@
         return DateUtil.endOfMonth(date);
     }
 
+    private int resolveDisplayProjectCount(Integer configuredCount, long actualCount) {
+        int actualProjectCount = (int) actualCount;
+        if (configuredCount == null) {
+            return actualProjectCount;
+        }
+        return Math.max(configuredCount, actualProjectCount);
+    }
+
+    private void fillUninspectedProjectCounts(OngoingProjectDashboardVO vo) {
+        int uninspectedHousingCount = Math.max(vo.getHousingProjectCount() - vo.getInspectedHousingCount(), 0);
+        int uninspectedMunicipalCount = Math.max(vo.getMunicipalProjectCount() - vo.getInspectedMunicipalCount(), 0);
+        vo.setUninspectedHousingCount(uninspectedHousingCount);
+        vo.setUninspectedMunicipalCount(uninspectedMunicipalCount);
+        vo.setUninspectedCount(uninspectedHousingCount + uninspectedMunicipalCount);
+    }
+
     /**
      * 判断给定的日期范围是否为当前月份
      *

--
Gitblit v1.7.1