From 2761abd2f50ae9f3838d0746b9817a30cb9fc13a Mon Sep 17 00:00:00 2001
From: zhizhijie <zhizhijie@users.noreply.gitee.com>
Date: 星期日, 20 九月 2026 14:47:08 +0800
Subject: [PATCH] fix(汇总表): 城市客运8月/累计同比取数修正(母版删AJ辅助列+按表头定位月份列)

---
 traffic-audit-server/src/main/java/com/trafficaudit/reportexport/calc/WycSplitCalc.java |   67 ++++++++++++++++++++++++++++++---
 1 files changed, 61 insertions(+), 6 deletions(-)

diff --git a/traffic-audit-server/src/main/java/com/trafficaudit/reportexport/calc/WycSplitCalc.java b/traffic-audit-server/src/main/java/com/trafficaudit/reportexport/calc/WycSplitCalc.java
index baf3d26..3ba16bd 100644
--- a/traffic-audit-server/src/main/java/com/trafficaudit/reportexport/calc/WycSplitCalc.java
+++ b/traffic-audit-server/src/main/java/com/trafficaudit/reportexport/calc/WycSplitCalc.java
@@ -3,7 +3,11 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.trafficaudit.common.util.RegionUtil;
 import com.trafficaudit.dataimport.entity.CityTaxiMonthly;
+import com.trafficaudit.dataimport.entity.WycOrderMonthly;
+import com.trafficaudit.dataimport.entity.WycTotalMonthly;
 import com.trafficaudit.dataimport.mapper.CityTaxiMonthlyMapper;
+import com.trafficaudit.dataimport.mapper.WycOrderMonthlyMapper;
+import com.trafficaudit.dataimport.mapper.WycTotalMonthlyMapper;
 import org.apache.poi.ss.usermodel.Cell;
 import org.apache.poi.ss.usermodel.CellType;
 import org.apache.poi.ss.usermodel.DataFormatter;
@@ -76,6 +80,10 @@
 
     @Resource
     private CityTaxiMonthlyMapper cityTaxiMapper;
+    @Resource
+    private WycOrderMonthlyMapper wycOrderMapper;
+    @Resource
+    private WycTotalMonthlyMapper wycTotalMapper;
     @Value("${city-passenger.template-dir:docs/鍩庡競瀹㈣繍}")
     private String templateDir;
 
@@ -182,14 +190,17 @@
             if (r.getAvgDistanceCity() != null && r.getAvgDistanceCity() > 0) a[5] = r.getAvgDistanceCity();
         }
         for (double[] a : map.values()) {
-            if (a[4] <= 0 && a[0] > 0) a[4] = round(a[1] / a[0], 2);
-            if (a[5] <= 0 && a[2] > 0) a[5] = round(a[3] / a[2], 2);
+            // 骞冲潎杩愯窛鍏滃簳锛氬叏绮惧害淇濈暀锛屽睍绀轰綅鏁颁氦缁欏崟鍏冩牸鏍煎紡
+            if (a[4] <= 0 && a[0] > 0) a[4] = a[1] / a[0];
+            if (a[5] <= 0 && a[2] > 0) a[5] = a[3] / a[2];
         }
         return map;
     }
 
     /** 璇诲彇 docs/鍩庡競瀹㈣繍/銆婄綉绾﹁溅璁㈠崟鍙婂叏鐪佹�婚噺.xlsx銆嬶細鎸� period(yyyy-MM) 琛屽彇 pin(B-E) 涓� 17 甯傚窞璁㈠崟(G-W) */
     private Map<String, Object> loadMonthlyInput(String period) throws Exception {
+        Map<String, Object> db = loadMonthlyInputFromDb(period);
+        if (db != null) return db;
         File f = findInput();
         try (InputStream in = new FileInputStream(f);
              Workbook wb = WorkbookFactory.create(in)) {
@@ -226,6 +237,54 @@
         }
     }
 
+    /** 浼樺厛浠庡簱鍙栨暟锛坵yc_order_monthly锛夛紱搴撻噷鏃犺鏈熸垨璁㈠崟鍏ㄧ┖鏃惰繑鍥� null锛屽洖閫�璇绘瘝鐗堟枃浠� */
+    private Map<String, Object> loadMonthlyInputFromDb(String period) {
+        WycOrderMonthly row = wycOrderMapper.selectOne(new LambdaQueryWrapper<WycOrderMonthly>()
+                .eq(WycOrderMonthly::getReportPeriod, period).last("LIMIT 1"));
+        if (row == null) return null;
+        List<String> cities = RegionUtil.cityList();
+        Double[] vals = {
+                row.getOrderWuhan(), row.getOrderHuangshi(), row.getOrderShiyan(), row.getOrderYichang(),
+                row.getOrderXiangyang(), row.getOrderEzhou(), row.getOrderJingmen(), row.getOrderXiaogan(),
+                row.getOrderJingzhou(), row.getOrderHuanggang(), row.getOrderXianning(), row.getOrderSuizhou(),
+                row.getOrderEnshi(), row.getOrderXiantao(), row.getOrderQianjiang(), row.getOrderTianmen(),
+                row.getOrderShennong()
+        };
+        double[] orders = new double[cities.size()];
+        double sum = 0.0;
+        for (int i = 0; i < orders.length && i < vals.length; i++) {
+            orders[i] = vals[i] == null ? 0.0 : vals[i];
+            sum += orders[i];
+        }
+        if (sum <= 0) return null;
+        double orderSum = sum;
+        if (row.getOrderSum() != null && row.getOrderSum() > 0) orderSum = row.getOrderSum();
+        double pinK = row.getPinK() == null ? 0.0 : row.getPinK();
+        double pinCK = row.getPinCK() == null ? 0.0 : row.getPinCK();
+        double pinZ = row.getPinZ() == null ? 0.0 : row.getPinZ();
+        double pinCZ = row.getPinCZ() == null ? 0.0 : row.getPinCZ();
+        boolean pinFix = false;
+        // pin 鍏滃簳锛氳鍗曡〃 pin 鍒椾负绌�/涓� 0 鏃跺洖钀� wyc_total_monthly锛坧in 涓撹〃锛�
+        if (pinK <= 0 || pinCK <= 0 || pinZ <= 0 || pinCZ <= 0) {
+            WycTotalMonthly tot = wycTotalMapper.selectOne(new LambdaQueryWrapper<WycTotalMonthly>()
+                    .eq(WycTotalMonthly::getReportPeriod, period).last("LIMIT 1"));
+            if (tot != null) {
+                if (pinK <= 0 && tot.getPinK() != null && tot.getPinK() > 0) { pinK = tot.getPinK(); pinFix = true; }
+                if (pinCK <= 0 && tot.getPinCK() != null && tot.getPinCK() > 0) { pinCK = tot.getPinCK(); pinFix = true; }
+                if (pinZ <= 0 && tot.getPinZ() != null && tot.getPinZ() > 0) { pinZ = tot.getPinZ(); pinFix = true; }
+                if (pinCZ <= 0 && tot.getPinCZ() != null && tot.getPinCZ() > 0) { pinCZ = tot.getPinCZ(); pinFix = true; }
+            }
+        }
+        Map<String, Object> map = new LinkedHashMap<>();
+        map.put("pinK", pinK);
+        map.put("pinCK", pinCK);
+        map.put("pinZ", pinZ);
+        map.put("pinCZ", pinCZ);
+        map.put("orders", orders);
+        map.put("orderSum", orderSum);
+        map.put("source", pinFix ? "db+wyc_total" : "db");
+        return map;
+    }
     private File findInput() throws Exception {
         String rel = templateDir;
         while (rel.startsWith("./")) rel = rel.substring(2);
@@ -259,8 +318,4 @@
 
     private double nz(Double v) { return v == null ? 0.0 : v; }
 
-    private double round(double v, int scale) {
-        double factor = Math.pow(10, scale);
-        return Math.round(v * factor) / factor;
-    }
 }

--
Gitblit v1.9.1