From b80bb7253a87931fea5a1a788fc4c6ffb204d245 Mon Sep 17 00:00:00 2001
From: zhizhijie <zhizhijie@users.noreply.gitee.com>
Date: 星期日, 20 九月 2026 10:54:05 +0800
Subject: [PATCH] fix(报表): 补齐客运站/物流站场投资明细表的就绪校验与预览类型

---
 traffic-audit-server/src/main/java/com/trafficaudit/reportexport/service/ReportExportService.java |   55 +++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 51 insertions(+), 4 deletions(-)

diff --git a/traffic-audit-server/src/main/java/com/trafficaudit/reportexport/service/ReportExportService.java b/traffic-audit-server/src/main/java/com/trafficaudit/reportexport/service/ReportExportService.java
index b83bd0b..03e2803 100644
--- a/traffic-audit-server/src/main/java/com/trafficaudit/reportexport/service/ReportExportService.java
+++ b/traffic-audit-server/src/main/java/com/trafficaudit/reportexport/service/ReportExportService.java
@@ -226,6 +226,36 @@
                     }
                     break;
                 }
+                case "investPassengerDetail":
+                case "investLogisticsDetail": {
+                    boolean paxDetail = "investPassengerDetail".equals(t);
+                    String catName = paxDetail ? "瀹㈣繍绔欏満" : "鐗╂祦鍥尯";
+                    String catLabel = paxDetail ? "瀹㈣繍绔欏満鎶曡祫鏈堟姤" : "鐗╂祦鍥尯鎶曡祫鏈堟姤";
+                    List<InvestmentProject> catProjects = investProjectMapper.selectList(
+                        new LambdaQueryWrapper<InvestmentProject>().eq(InvestmentProject::getCategory, catName));
+                    final List<Long> catIds = new ArrayList<>();
+                    for (InvestmentProject cp : catProjects) catIds.add(cp.getId());
+                    if (catIds.isEmpty()) {
+                        rows = 0;
+                        notes.add("缂烘暟鎹細" + catLabel);
+                    } else {
+                        rows = addReadyCount(() -> investMonthlyMapper.selectCount(
+                            periodQw(period, mode, InvestmentMonthly::getReportPeriod)
+                                .in(InvestmentMonthly::getProjectId, catIds)), catLabel, notes);
+                    }
+                    String detTpl = paxDetail ? "妯℃澘_X鏈堝杩愮珯鎶曡祫鏄庣粏琛�.xlsx" : "妯℃澘_X鏈堢墿娴佺珯鍦烘姇璧勬槑缁�.xls";
+                    try {
+                        if (resolveAnyTemplate(investTemplateDir, detTpl) == null) {
+                            rows = 0;
+                            notes.add("docs/鎶曡祫/妯℃澘 涓嬬己灏戙��" + detTpl + "銆�");
+                        }
+                    } catch (Exception ex) {
+                        rows = 0;
+                        notes.add("姣嶇増瀹氫綅澶辫触锛�" + ex.getMessage());
+                    }
+                    auditTypes.add("INVEST");
+                    break;
+                }
                 default:
                     rows = 0;
                     notes.add("鏈煡鎶ヨ〃绫诲瀷锛�" + t);
@@ -381,7 +411,9 @@
                 coverage.addAll(investCover);
                 // 鎶曡祫涓哄綋鏈堟姤琛紙鏃� 1..N 绱鍙e緞锛夛紝鍙彁绀哄綋鏈堢己澶�
                 if (!investCover.contains(month)) missing.add(month);
-                investPreview(period, mode, summary, problems);
+                if ("investPassengerDetail".equals(t)) investPreview(period, mode, "瀹㈣繍绔欏満", summary, problems);
+                else if ("investLogisticsDetail".equals(t)) investPreview(period, mode, "鐗╂祦鍥尯", summary, problems);
+                else investPreview(period, mode, summary, problems);
             } else if ("energySummary".equals(t)) {
                 Long ec = energyMapper.selectCount(periodQw(period, mode, EnergyVehicleQuarterly::getReportPeriod));
                 if (ec != null && ec > 0) coverage.add(month);
@@ -412,7 +444,8 @@
     }
 
     private boolean isInvestType(String t) {
-        return "investPlan".equals(t) || "investFiveYearLogistics".equals(t) || "investBillion".equals(t) || "investCounty".equals(t);
+        return "investPlan".equals(t) || "investFiveYearLogistics".equals(t) || "investBillion".equals(t) || "investCounty".equals(t)
+            || "investPassengerDetail".equals(t) || "investLogisticsDetail".equals(t);
     }
 
     private boolean isEnergyType(String t) {
@@ -668,9 +701,23 @@
         if (allZero) problems.add("鍏ㄧ渷绱鍊煎叏涓� 0锛堝叕浜�/鍑虹鏈堟姤鍙兘鏈鍏ワ級");
     }
 
-    /** 鎶曡祫鎽樿锛氶」鐩暟 + 鏈湀瀹屾垚/鑷勾鍒�/鑷紑濮嬬疮璁� */
+    /** 鎶曡祫鎽樿锛氶」鐩暟 + 鏈湀瀹屾垚/鑷勾鍒�/鑷紑濮嬬疮璁★紙鍏ㄦ姇璧勬湀鎶ュ悎璁★紝涓嶅垎绫诲埆锛� */
     private void investPreview(String period, String mode, List<Map<String, Object>> summary, List<String> problems) {
-        List<InvestmentMonthly> list = investMonthlyMapper.selectList(periodQw(period, mode, InvestmentMonthly::getReportPeriod));
+        investPreview(period, mode, null, summary, problems);
+    }
+
+    /** 鎶曡祫鎽樿锛坈ategory 闈炵┖鏃跺彧缁熻璇ョ被鍒紝濡傚杩愮珯鍦�/鐗╂祦鍥尯鎶曡祫鏄庣粏琛級 */
+    private void investPreview(String period, String mode, String category, List<Map<String, Object>> summary, List<String> problems) {
+        LambdaQueryWrapper<InvestmentMonthly> qw = periodQw(period, mode, InvestmentMonthly::getReportPeriod);
+        if (category != null) {
+            List<InvestmentProject> ps = investProjectMapper.selectList(
+                new LambdaQueryWrapper<InvestmentProject>().eq(InvestmentProject::getCategory, category));
+            List<Long> ids = new ArrayList<>();
+            for (InvestmentProject p : ps) ids.add(p.getId());
+            if (ids.isEmpty()) { problems.add("缂烘暟鎹細搴撳唴娌℃湁銆�" + category + "銆嶉」鐩富妗�"); return; }
+            qw.in(InvestmentMonthly::getProjectId, ids);
+        }
+        List<InvestmentMonthly> list = investMonthlyMapper.selectList(qw);
         Set<Long> proj = new HashSet<>();
         double monthDone = 0.0, yearCum = 0.0, startCum = 0.0;
         for (InvestmentMonthly m : list) {

--
Gitblit v1.9.1