From 89a0e7cd7ec202e57e6971e27559b85c3c971aaf Mon Sep 17 00:00:00 2001
From: zhizhijie <zhizhijie@users.noreply.gitee.com>
Date: 星期一, 12 十月 2026 16:00:43 +0800
Subject: [PATCH] docs(交接): 记录 9 月导入核验与出表抽查结果、仍缺数据清单
---
traffic-audit-server/src/main/java/com/trafficaudit/dataimport/service/DataImportService.java | 284 ++++++++++++++++++++++++++++++++++++--------------------
1 files changed, 181 insertions(+), 103 deletions(-)
diff --git a/traffic-audit-server/src/main/java/com/trafficaudit/dataimport/service/DataImportService.java b/traffic-audit-server/src/main/java/com/trafficaudit/dataimport/service/DataImportService.java
index 446043d..23d340e 100644
--- a/traffic-audit-server/src/main/java/com/trafficaudit/dataimport/service/DataImportService.java
+++ b/traffic-audit-server/src/main/java/com/trafficaudit/dataimport/service/DataImportService.java
@@ -1808,6 +1808,43 @@
}
}
+ /** 鍙牎楠屻�屽繀闇�鍒楁寜鍚嶅瓨鍦ㄣ�嶏紙涓嶆牎楠屽垪浣嶏級锛氱敤浜庡吋瀹瑰悓浜嬬増妯℃澘鐨勫垪浣嶅樊寮� */
+ private void requireHeaderColsByName(Sheet sheet, String typeLabel, String templateHint, String[] keywords) {
+ Row header = sheet == null ? null : sheet.getRow(0);
+ if (header == null) {
+ throw new RuntimeException("鎵�閫夋暟鎹被鍨嬨��" + typeLabel + "銆戞枃浠惰〃澶寸己澶憋紝璇蜂娇鐢ㄧ郴缁熸ā鏉裤��" + templateHint + "銆嬫暣鐞嗗悗鍐嶅鍏�");
+ }
+ List<String> missing = new ArrayList<>();
+ for (String keyword : keywords) {
+ if (findColByKeywords(header, keyword) < 0) missing.add(keyword);
+ }
+ if (!missing.isEmpty()) {
+ throw new RuntimeException("鎵�閫夋暟鎹被鍨嬨��" + typeLabel + "銆戜笌鏂囦欢鍐呭涓嶇锛氳〃澶寸己灏戝繀闇�鍒椼��"
+ + String.join("銆戙��", missing) + "銆戯紝璇风‘璁ゆ槸鍚﹂�夐敊浜嗘暟鎹被鍨嬶紙妯℃澘锛�" + templateHint + "锛�");
+ }
+ }
+
+ /** 琛ㄥご鍚� 鈫� 鍒楀彿锛堥娆″嚭鐜帮級锛涙湭鍛戒腑鏃跺洖閫� fallback锛屼繚鎸佸鏃фā鏉垮吋瀹� */
+ private int colByName(Row header, int fallback, String name) {
+ return colByName(header, fallback, name, 1);
+ }
+
+ /** 琛ㄥご鍚� 鈫� 鍒楀彿锛堢 occurrence 娆″嚭鐜帮級锛涙湭鍛戒腑鏃跺洖閫� fallback */
+ private int colByName(Row header, int fallback, String name, int occurrence) {
+ if (header == null) return fallback;
+ int hit = 0;
+ for (int c = 0; c <= header.getLastCellNum(); c++) {
+ Cell cell = header.getCell(c);
+ if (cell == null) continue;
+ String v = FORMATTER.formatCellValue(cell).trim();
+ if (v.contains(name)) {
+ hit++;
+ if (hit == occurrence) return c;
+ }
+ }
+ return fallback;
+ }
+
/** 鎸夎〃澶村叧閿瓧瀹氫綅鍒楀彿锛氫粠绗� 1 鍒楀悜鍙虫壂锛屽懡涓换涓�鍏抽敭瀛楀嵆杩斿洖璇ュ垪锛涙湭鍛戒腑杩斿洖 -1 */
private int findColByKeywords(Row header, String... keywords) {
if (header == null) return -1;
@@ -2442,6 +2479,41 @@
|| normDash.contains(period) || normDash.contains(period.replace("-0", "-"));
}
+ /**
+ * 鎶ヨ〃鏈熷崟鍏冩牸鍛戒腑锛氭壂鎻� sheet 鍓� 8 琛岋紝鎵惧舰濡� 2026.08 / 2026骞�8鏈� / 2026-08-24 鐨勬姤琛ㄦ湡鏂囧瓧鎴栨棩鏈熷崟鍏冩牸銆�
+ * 鑳屾櫙锛�2026-09-22锛夛細娼滄睙鍗曡〃鍚� 20 涓巻鍙� sheet锛堟綔姹燂紙1鏈堬級鈥︽綔姹燂紙8鏈堬級鈥︼級锛屾棫閫昏緫鍙寜銆�8鏈堛�嶅尮閰� sheet 鍚嶏紝
+ * 浼氭妸 2018 骞寸殑銆屾綔姹燂紙8鏈堬級銆嶅綋鎴� 2026-08锛屽鍏ユ垚 2018 骞存暟鎹紱褰撴湡 sheet 鍚嶆槸銆屾綔姹燂紙2022.3锛夈�嶏紝
+ * 鍙兘闈犺〃鍐呮姤琛ㄦ湡锛�2026.08.24锛夎瘑鍒��
+ */
+ private boolean investSheetPeriodCellHit(Sheet sh, String period) {
+ if (sh == null || period == null || !period.matches("\\d{4}-\\d{2}")) return false;
+ String year = period.substring(0, 4);
+ int month = Integer.parseInt(period.substring(5, 7));
+ int last = Math.min(sh.getLastRowNum(), 7);
+ for (int r = 0; r <= last; r++) {
+ Row row = sh.getRow(r);
+ if (row == null) continue;
+ int lastCell = Math.max(1, row.getLastCellNum());
+ for (int c = 0; c < Math.min(lastCell, 12); c++) {
+ Cell cell = row.getCell(c);
+ if (cell == null) continue;
+ if (cell.getCellType() == CellType.NUMERIC && DateUtil.isCellDateFormatted(cell)) {
+ java.time.LocalDate d = cell.getLocalDateTimeCellValue().toLocalDate();
+ if (d.getYear() == Integer.parseInt(year) && d.getMonthValue() == month) return true;
+ continue;
+ }
+ String v = cellStr(row, c);
+ if (v == null) continue;
+ String t = v.trim().replace(" ", "");
+ if (t.isEmpty() || t.length() > 30) continue;
+ java.util.regex.Matcher mm = java.util.regex.Pattern
+ .compile("(\\d{4})\\s*[骞�.\\-/]\\s*(\\d{1,2})").matcher(t);
+ if (mm.find() && year.equals(mm.group(1)) && month == Integer.parseInt(mm.group(2))) return true;
+ }
+ }
+ return false;
+ }
+
/** 瑙f瀽鍗曚釜甯傚窞鎶ヨ〃锛氶�� sheet锛堟姤琛ㄦ湡鍚嶄紭鍏� + 鏁版嵁琛屾暟锛夛紝鎸夊垪鍚嶆槧灏勬彁鍙栭」鐩 */
private void parseInvestCityWorkbook(Workbook wb, String fileName, String category, String period,
Set<String> fiveYearNames, List<InvestCityRow> rows, Map<String, Object> fr) {
@@ -2453,7 +2525,10 @@
Map<String, Integer> col = findInvestHeader(sh);
if (col == null) continue;
int cnt = countInvestRows(sh, col);
- int score = cnt + (cnt > 0 && investSheetMatchesPeriod(sh, period) ? 1000000 : 0);
+ // 2026-09-22锛氳〃鍐呮姤琛ㄦ湡锛堝崟鍏冩牸锛夊懡涓潈閲嶆渶楂樷�斺�斿巻鍙插悓鏈� sheet锛堝娼滄睙锛�8鏈堬級锛変笉鑳界洊杩囧綋鏈� sheet
+ boolean cellHit = cnt > 0 && investSheetPeriodCellHit(sh, period);
+ int score = cnt + (cnt > 0 && investSheetMatchesPeriod(sh, period) ? 1000000 : 0)
+ + (cellHit ? 2000000 : 0);
if (cnt > 0 && investSheetMatchesPeriod(sh, period)) {
// 褰撴湡鐪熷疄鎶ヨ〃 sheet 鍚嶉�氬父甯﹀勾浠斤紙濡� 2026.8/2026骞�8鏈堬級锛屽巻鍙瞫heet澶氫负绾湀浠藉悕锛�8鏈堬級锛氬甫骞翠唤鐨勪紭鍏�
String norm = sh.getSheetName() == null ? "" : sh.getSheetName().replace(" ", "");
@@ -2618,25 +2693,28 @@
/** 鍗曚釜琛ㄥご鍗曞厓鏍� -> 瀛楁閿紙null 琛ㄧず涓嶆槸琛ㄥご瀛楁锛夛紱渚涜〃澶磋鍒ゅ畾涓庡垪鏄犲皠鍏辩敤 */
private String investHeaderKey(String v) {
if (v == null) return null;
- String flat = v.replace(" ", "");
- if (v.contains("椤圭洰鍚嶇О")) return "name";
+ // 2026-09-22锛氳〃澶村崟鍏冩牸甯稿甫鎹㈣/鍏ㄨ绌烘牸锛堝澶╅棬銆岃嚜寮�濮嬪缓\n璁剧疮璁″畬\n鎴愭姇璧刓n(涓囧厓)銆嶏級锛�
+ // 缁熶竴鍘绘帀鍏ㄩ儴绌虹櫧鍚庡啀鍒ゅ畾鍏抽敭璇嶏紱鍚﹀垯 H(鑷紑濮嬪缓璁剧疮璁�)/J(鑷勾鍒濈疮璁�)/K(鏈湀瀹屾垚) 浼氬尮閰嶅け璐ワ紝
+ // 鍒楁槧灏勮惤鍒� -1 鈫� 涓変釜鏁板�艰鍐欐垚 0锛堝ぉ闂� 2026-08 灏辨槸杩欐牱涓㈢殑 16677.7/16677.7/500锛夈��
+ String flat = v.replaceAll("[\\s\\u3000]+", "");
+ if (flat.contains("椤圭洰鍚嶇О")) return "name";
// 銆屽幙锛堝競銆佸尯锛夈�嶇殑鍚勭鍐欐硶锛氬崐/鍏ㄨ鎷彿銆侀】鍙�/閫楀彿銆佹湁鏃犳嫭鍙凤紝缁熶竴褰掍竴鍖栧悗鍐嶅垽瀹�
String flatCounty = flat.replace("锛�", "(").replace("锛�", ")").replace("銆�", "").replace("锛�", "").replace(",", "");
if (flatCounty.contains("鍘�(甯傚尯)") || flatCounty.contains("鍘垮競鍖�") || flatCounty.contains("鍖哄幙")) return "county";
- if (v.contains("鎶曡祫寤鸿") || v.contains("寤鸿鍗曚綅") || v.contains("椤圭洰涓氫富")) return "builder";
- if (v.contains("寤鸿鎬ц川")) return "nature";
- if (v.contains("寮�宸�")) return "start";
- if (v.contains("绔e伐") || v.contains("寤烘垚")) return "end";
- if ((v.contains("璁″垝鎬绘姇璧�") || v.contains("鎬绘姇璧�")) && !v.contains("绱")) return "total";
- if (v.contains("鑷紑濮嬪缓璁�")) return "startcum";
- if (v.contains("鏈勾璁″垝")) return "yearplan";
- if (v.contains("鑷勾鍒濈疮璁�")) return "yearcum";
- if (v.contains("鏈湀瀹屾垚")) return "monthdone";
- if (v.contains("寤鸿闃舵")) return "stage";
- if (v.contains("褰㈣薄杩涘害") || v.contains("寤鸿杩涘睍")) return "desc";
- if (v.contains("宸ュ彲") && !v.contains("椤圭洰鍚嶇О")) return "gk";
- if (v.contains("鍒濊") && !v.contains("椤圭洰鍚嶇О")) return "cs";
- if (v.contains("寤虹瓚闈㈢Н") && !v.contains("鏂板")) return "area";
+ if (flat.contains("鎶曡祫寤鸿") || flat.contains("寤鸿鍗曚綅") || flat.contains("椤圭洰涓氫富")) return "builder";
+ if (flat.contains("寤鸿鎬ц川")) return "nature";
+ if (flat.contains("寮�宸�")) return "start";
+ if (flat.contains("绔e伐") || flat.contains("寤烘垚")) return "end";
+ if ((flat.contains("璁″垝鎬绘姇璧�") || flat.contains("鎬绘姇璧�")) && !flat.contains("绱")) return "total";
+ if (flat.contains("鑷紑濮嬪缓璁�")) return "startcum";
+ if (flat.contains("鏈勾璁″垝")) return "yearplan";
+ if (flat.contains("鑷勾鍒濈疮璁�")) return "yearcum";
+ if (flat.contains("鏈湀瀹屾垚")) return "monthdone";
+ if (flat.contains("寤鸿闃舵")) return "stage";
+ if (flat.contains("褰㈣薄杩涘害") || flat.contains("寤鸿杩涘睍")) return "desc";
+ if (flat.contains("宸ュ彲") && !flat.contains("椤圭洰鍚嶇О")) return "gk";
+ if (flat.contains("鍒濊") && !flat.contains("椤圭洰鍚嶇О")) return "cs";
+ if (flat.contains("寤虹瓚闈㈢Н") && !flat.contains("鏂板")) return "area";
return null;
}
@@ -3030,59 +3108,59 @@
List<CityBusRow> rows = new ArrayList<>();
try (Workbook wb = WorkbookFactory.create(file.getInputStream())) {
Sheet sheet = wb.getSheetAt(0);
- requireHeaderLayout(sheet, "鍩庡競鍏氦", "妯℃澘_浜や紒缁烾203琛╛鍩庡競鍏叡浜ら�氭湀搴﹁繍钀ユ儏鍐碉紙2026骞�7鏈堬級.xls",
- CITY_BUS_HEADER_COLS, CITY_BUS_HEADER_KEYWORDS);
+ Row hdr = sheet.getRow(0);
+ requireHeaderColsByName(sheet, "鍩庡競鍏氦", "妯℃澘_浜や紒缁烾203琛╛鍩庡競鍏叡浜ら�氭湀搴﹁繍钀ユ儏鍐碉紙2026骞�7鏈堬級.xls", CITY_BUS_HEADER_KEYWORDS);
for (int r = 1; r <= sheet.getLastRowNum(); r++) {
Row row = sheet.getRow(r);
if (row == null) continue;
- String name = getString(row, 2);
+ String name = getString(row, colByName(hdr, 2, "浼佷笟鍚嶇О"));
if (name == null || name.trim().isEmpty()) continue;
CityBusMonthly item = new CityBusMonthly();
item.setReportPeriod(period);
- item.setRegionCode(getString(row, 0));
- item.setCity(RegionUtil.cityByCode(getString(row, 0)));
- item.setEnterpriseCode(getString(row, 1));
+ item.setRegionCode(getString(row, colByName(hdr, 0, "鎵�灞炲湴鍖�")));
+ item.setCity(RegionUtil.cityByCode(getString(row, colByName(hdr, 0, "鎵�灞炲湴鍖�"))));
+ item.setEnterpriseCode(getString(row, colByName(hdr, 1, "浼佷笟浠g爜")));
item.setEnterpriseName(name.trim());
- item.setOpVehicles(getDecimal(row, 5));
- item.setStopTotal(getDecimal(row, 6));
- item.setStopCity(getDecimal(row, 7));
- item.setPassengerVolume(getDecimal(row, 8));
- item.setPassengerCity(getDecimal(row, 9));
- item.setTurnover(getDecimal(row, 10));
- item.setTurnoverCity(getDecimal(row, 11));
- item.setRailPassengerVolume(getDecimal(row, 13));
- item.setRailTurnover(getDecimal(row, 14));
- item.setFerryPassengerVolume(getDecimal(row, 17));
- item.setFerryTurnover(getDecimal(row, 18));
- item.setAvgDistance(getDecimal(row, 19));
- item.setAvgDistanceCity(getDecimal(row, 20));
- item.setContactPerson(getString(row, 24));
- item.setContactPhone(getString(row, 25));
- item.setReportDate(getDateString(row, 26));
- item.setRateOpVehiclesMom(getDecimal(row, 29));
- item.setRatePassengerMom(getDecimal(row, 30));
- item.setRatePassengerCityMom(getDecimal(row, 31));
- item.setRateChengxiangMom(getDecimal(row, 32));
- item.setRateChengxiangTurnoverMom(getDecimal(row, 33));
- item.setAvgDistanceMomChange(getDecimal(row, 34));
- item.setAvgDistanceCityMomChange(getDecimal(row, 35));
- item.setDailyPassengerPerVehicle(getDecimal(row, 36));
- item.setRateOpVehiclesYoy(getDecimal(row, 39));
- item.setRatePassengerYoy(getDecimal(row, 40));
- item.setRatePassengerCityYoy(getDecimal(row, 41));
- item.setRateChengxiangYoy(getDecimal(row, 42));
- item.setRateChengxiangTurnoverYoy(getDecimal(row, 43));
- item.setStopCityRatio(getDecimal(row, 44));
- item.setPassengerCityRatio(getDecimal(row, 45));
- item.setChengxiangRatio(getDecimal(row, 46));
- item.setRateTurnoverYoy(getDecimal(row, 47));
- item.setRateTurnoverMom(getDecimal(row, 48));
- item.setPassengerChengxiang(getDecimal(row, 49));
- item.setTurnoverChengxiang(getDecimal(row, 50));
- item.setAvgDistanceChengxiang(getDecimal(row, 51));
- item.setVerifyExplanation(getString(row, 65));
- item.setReportNote(getString(row, 66));
- item.setModifyRecord(getString(row, 67));
+ item.setOpVehicles(getDecimal(row, colByName(hdr, 5, "鍏叡姹界數杞杩愯惀杞︽暟")));
+ item.setStopTotal(getDecimal(row, colByName(hdr, 6, "杩愯惀绔欑偣鎬讳釜鏁�")));
+ item.setStopCity(getDecimal(row, colByName(hdr, 7, "鍏朵腑锛氬煄甯傚唴")));
+ item.setPassengerVolume(getDecimal(row, colByName(hdr, 8, "鍏叡姹界數杞瀹㈣繍閲�")));
+ item.setPassengerCity(getDecimal(row, colByName(hdr, 9, "鍏朵腑锛氬煄甯傚唴", 2)));
+ item.setTurnover(getDecimal(row, colByName(hdr, 10, "鏂板鍏叡姹界數杞︽梾瀹㈠懆杞噺")));
+ item.setTurnoverCity(getDecimal(row, colByName(hdr, 11, "鏂板鍏叡姹界數杞︽梾瀹㈠懆杞噺_鍏朵腑鍩庡競鍐�")));
+ item.setRailPassengerVolume(getDecimal(row, colByName(hdr, 13, "杞ㄩ亾浜ら�歘瀹㈣繍閲�")));
+ item.setRailTurnover(getDecimal(row, colByName(hdr, 14, "杞ㄩ亾浜ら�歘鏃呭鍛ㄨ浆閲�")));
+ item.setFerryPassengerVolume(getDecimal(row, colByName(hdr, 17, "鍩庡競瀹㈣繍杞浮_瀹㈣繍閲�")));
+ item.setFerryTurnover(getDecimal(row, colByName(hdr, 18, "鍩庡競瀹㈣繍杞浮鏃呭鍛ㄨ浆閲�")));
+ item.setAvgDistance(getDecimal(row, colByName(hdr, 19, "鍏叡姹界數杞﹀钩鍧囪繍璺�")));
+ item.setAvgDistanceCity(getDecimal(row, colByName(hdr, 20, "鍏叡姹界數杞﹀煄甯傚唴骞冲潎杩愯窛")));
+ item.setContactPerson(getString(row, colByName(hdr, 24, "濉〃浜�")));
+ item.setContactPhone(getString(row, colByName(hdr, 25, "鑱旂郴鐢佃瘽")));
+ item.setReportDate(getDateString(row, colByName(hdr, 26, "鎶ュ嚭鏃ユ湡")));
+ item.setRateOpVehiclesMom(getDecimal(row, colByName(hdr, 29, "鍏叡姹界數杞杩愯惀杞︽暟鐜瘮澧為��")));
+ item.setRatePassengerMom(getDecimal(row, colByName(hdr, 30, "鍏叡姹界數杞瀹㈣繍閲忕幆姣斿閫�")));
+ item.setRatePassengerCityMom(getDecimal(row, colByName(hdr, 31, "鍩庡競鍐呭杩愰噺鐜瘮")));
+ item.setRateChengxiangMom(getDecimal(row, colByName(hdr, 32, "鍩庨檯鍩庝埂瀹㈣繍閲忕幆姣斿閫�")));
+ item.setRateChengxiangTurnoverMom(getDecimal(row, colByName(hdr, 33, "鍩庨檯鍩庝埂鏃呭鍛ㄨ浆閲忕幆姣斿閫�")));
+ item.setAvgDistanceMomChange(getDecimal(row, colByName(hdr, 34, "骞冲潎杩愯窛鐜瘮澧炲噺锛堝叕閲岋級")));
+ item.setAvgDistanceCityMomChange(getDecimal(row, colByName(hdr, 35, "骞冲潎杩愯窛_鍩庡競鍐呯幆姣斿鍑忥紙鍏噷锛�")));
+ item.setDailyPassengerPerVehicle(getDecimal(row, colByName(hdr, 36, "鍏叡姹界數杞鍗曡溅鏃ュ潎瀹㈣繍閲�")));
+ item.setRateOpVehiclesYoy(getDecimal(row, colByName(hdr, 39, "鍏叡姹界數杞杩愯惀杞︽暟鍚屾瘮澧為��")));
+ item.setRatePassengerYoy(getDecimal(row, colByName(hdr, 40, "鍏叡姹界數杞瀹㈣繍閲忓悓姣斿閫�")));
+ item.setRatePassengerCityYoy(getDecimal(row, colByName(hdr, 41, "瀹㈣繍閲廮鍩庡競鍐呭悓姣斿閫�")));
+ item.setRateChengxiangYoy(getDecimal(row, colByName(hdr, 42, "鍩庨檯鍩庝埂瀹㈣繍閲忓悓姣斿閫�")));
+ item.setRateChengxiangTurnoverYoy(getDecimal(row, colByName(hdr, 43, "鍩庨檯鍩庝埂鏃呭鍛ㄨ浆閲忓悓姣斿閫�")));
+ item.setStopCityRatio(getDecimal(row, colByName(hdr, 44, "鍩庡競鍐呰繍钀ョ珯鐐瑰崰姣�")));
+ item.setPassengerCityRatio(getDecimal(row, colByName(hdr, 45, "鍩庡競鍐呭杩愰噺鍗犳瘮")));
+ item.setChengxiangRatio(getDecimal(row, colByName(hdr, 46, "鍩庨檯鍩庝埂瀹㈣繍閲忓崰姣�")));
+ item.setRateTurnoverYoy(getDecimal(row, colByName(hdr, 47, "鏃呭鍛ㄨ浆閲忓悓姣斿閫�")));
+ item.setRateTurnoverMom(getDecimal(row, colByName(hdr, 48, "鏃呭鍛ㄨ浆閲忕幆姣斿閫�")));
+ item.setPassengerChengxiang(getDecimal(row, colByName(hdr, 49, "鍩庨檯鍩庝埂瀹㈣繍閲�")));
+ item.setTurnoverChengxiang(getDecimal(row, colByName(hdr, 50, "鍩庨檯鍩庝埂鏃呭鍛ㄨ浆閲�")));
+ item.setAvgDistanceChengxiang(getDecimal(row, colByName(hdr, 51, "鍩庨檯鍩庝埂骞冲潎杩愯窛")));
+ item.setVerifyExplanation(getString(row, colByName(hdr, 65, "鏍稿疄鎬у師鍥犺В閲�")));
+ item.setReportNote(getString(row, colByName(hdr, 66, "涓婃姤璇存槑")));
+ item.setModifyRecord(getString(row, colByName(hdr, 67, "淇敼璁板綍")));
rows.add(new CityBusRow(r + 1, item));
}
} catch (Exception e) {
@@ -3145,52 +3223,52 @@
List<TaxiRow> rows = new ArrayList<>();
try (Workbook wb = WorkbookFactory.create(file.getInputStream())) {
Sheet sheet = wb.getSheetAt(0);
- requireHeaderLayout(sheet, "宸℃父鍑虹", "妯℃澘_浜よ缁烾402琛�-宸℃父鍑虹姹借溅杩愯惀鏈嶅姟鎯呭喌鏈堟姤(2026).xls",
- CITY_TAXI_HEADER_COLS, CITY_TAXI_HEADER_KEYWORDS);
+ Row hdr = sheet.getRow(0);
+ requireHeaderColsByName(sheet, "宸℃父鍑虹", "妯℃澘_浜よ缁烾402琛�-宸℃父鍑虹姹借溅杩愯惀鏈嶅姟鎯呭喌鏈堟姤(2026).xls", CITY_TAXI_HEADER_KEYWORDS);
for (int r = 1; r <= sheet.getLastRowNum(); r++) {
Row row = sheet.getRow(r);
if (row == null) continue;
- String name = getString(row, 2);
+ String name = getString(row, colByName(hdr, 2, "浼佷笟鍚嶇О"));
if (name == null || name.trim().isEmpty()) continue;
CityTaxiMonthly item = new CityTaxiMonthly();
item.setReportPeriod(period);
- item.setRegionCode(getString(row, 0));
- item.setCity(cityOf(getString(row, 0), name));
- item.setTripTotal(getDecimal(row, 4));
- item.setTripCity(getDecimal(row, 5));
- item.setPassengerVolume(getDecimal(row, 6));
- item.setPassengerCity(getDecimal(row, 7));
- item.setTurnover(getDecimal(row, 8));
- item.setTurnoverCity(getDecimal(row, 9));
- item.setOpVehicles(getDecimal(row, 10));
- item.setAvgDistance(getDecimal(row, 11));
- item.setAvgDistanceCity(getDecimal(row, 12));
- item.setContactPerson(getString(row, 15));
- item.setContactPhone(getString(row, 16));
- item.setReportDate(getDateString(row, 17));
- item.setDailyTripsPerVehicle(getDecimal(row, 18));
- item.setDailyPassengerPerVehicle(getDecimal(row, 19));
- item.setPassengersPerTrip(getDecimal(row, 20));
- item.setRateOpVehiclesMom(getDecimal(row, 21));
- item.setRateOpVehiclesYoy(getDecimal(row, 22));
- item.setRateTripMom(getDecimal(row, 23));
- item.setRateTripYoy(getDecimal(row, 24));
- item.setRatePassengerMom(getDecimal(row, 25));
- item.setRatePassengerYoy(getDecimal(row, 26));
- item.setAvgDistanceMomChange(getDecimal(row, 27));
- item.setPassengersPerTripCity(getDecimal(row, 28));
- item.setRateTripCityMom(getDecimal(row, 29));
- item.setRatePassengerCityMom(getDecimal(row, 30));
- item.setAvgDistanceCityMomChange(getDecimal(row, 31));
- item.setTripCityRatio(getDecimal(row, 32));
- item.setPassengerCityRatio(getDecimal(row, 33));
- item.setPassengersPerTripChengxiang(getDecimal(row, 34));
- item.setRateTripChengxiangMom(getDecimal(row, 35));
- item.setRatePassengerChengxiangMom(getDecimal(row, 36));
- item.setAvgDistanceChengxiang(getDecimal(row, 37));
- item.setVerifyExplanation(getString(row, 38));
- item.setReportNote(getString(row, 39));
- item.setModifyRecord(getString(row, 40));
+ item.setRegionCode(getString(row, colByName(hdr, 0, "鎵�灞炲湴鍖�")));
+ item.setCity(cityOf(getString(row, colByName(hdr, 0, "鎵�灞炲湴鍖�")), name));
+ item.setTripTotal(getDecimal(row, colByName(hdr, 4, "杞藉杞︽鎬绘暟")));
+ item.setTripCity(getDecimal(row, colByName(hdr, 5, "杞藉杞︽鎬绘暟_鍩庡競鍐�")));
+ item.setPassengerVolume(getDecimal(row, colByName(hdr, 6, "瀹㈣繍閲�")));
+ item.setPassengerCity(getDecimal(row, colByName(hdr, 7, "瀹㈣繍閲廮鍏朵腑鍩庡競鍐�")));
+ item.setTurnover(getDecimal(row, colByName(hdr, 8, "鏃呭鍛ㄨ浆閲�")));
+ item.setTurnoverCity(getDecimal(row, colByName(hdr, 9, "鏃呭鍛ㄨ浆閲廮鍩庡競鍐�")));
+ item.setOpVehicles(getDecimal(row, colByName(hdr, 10, "杩愯惀杞﹁締鏁�")));
+ item.setAvgDistance(getDecimal(row, colByName(hdr, 11, "宸℃父鍑虹姹借溅骞冲潎杩愯窛")));
+ item.setAvgDistanceCity(getDecimal(row, colByName(hdr, 12, "鍩庡競鍐呭钩鍧囪繍璺�")));
+ item.setContactPerson(getString(row, colByName(hdr, 15, "濉〃浜�")));
+ item.setContactPhone(getString(row, colByName(hdr, 16, "鑱旂郴鐢佃瘽")));
+ item.setReportDate(getDateString(row, colByName(hdr, 17, "鎶ュ嚭鏃ユ湡")));
+ item.setDailyTripsPerVehicle(getDecimal(row, colByName(hdr, 18, "鍗曡溅鏃ュ潎杞藉杞︽")));
+ item.setDailyPassengerPerVehicle(getDecimal(row, colByName(hdr, 19, "鍗曡溅鏃ュ潎瀹㈣繍閲�")));
+ item.setPassengersPerTrip(getDecimal(row, colByName(hdr, 20, "鍗曡溅娆¤浇瀹汉鏁�")));
+ item.setRateOpVehiclesMom(getDecimal(row, colByName(hdr, 21, "杩愯惀杞︽暟鐜瘮澧為��")));
+ item.setRateOpVehiclesYoy(getDecimal(row, colByName(hdr, 22, "杩愯惀杞︽暟鍚屾瘮澧為��")));
+ item.setRateTripMom(getDecimal(row, colByName(hdr, 23, "杞藉杞︽鎬绘暟鐜瘮澧為��")));
+ item.setRateTripYoy(getDecimal(row, colByName(hdr, 24, "杞藉杞︽鍚屾瘮澧為��")));
+ item.setRatePassengerMom(getDecimal(row, colByName(hdr, 25, "瀹㈣繍閲忕幆姣斿閫�")));
+ item.setRatePassengerYoy(getDecimal(row, colByName(hdr, 26, "瀹㈣繍閲忓悓姣斿閫�")));
+ item.setAvgDistanceMomChange(getDecimal(row, colByName(hdr, 27, "骞冲潎杩愯窛鐜瘮澧炲噺")));
+ item.setPassengersPerTripCity(getDecimal(row, colByName(hdr, 28, "鍗曡溅娆¤浇瀹汉鏁癬鍩庡競鍐�")));
+ item.setRateTripCityMom(getDecimal(row, colByName(hdr, 29, "杞藉杞︽鎬绘暟鐜瘮澧為�焈鍩庡競鍐�")));
+ item.setRatePassengerCityMom(getDecimal(row, colByName(hdr, 30, "瀹㈣繍閲忕幆姣斿閫焈鍩庡競鍐�")));
+ item.setAvgDistanceCityMomChange(getDecimal(row, colByName(hdr, 31, "骞冲潎杩愯窛_鍩庡競鍐呯幆姣斿鍑�")));
+ item.setTripCityRatio(getDecimal(row, colByName(hdr, 32, "杞藉杞︽鎬绘暟_鍩庡競鍐呭崰姣�")));
+ item.setPassengerCityRatio(getDecimal(row, colByName(hdr, 33, "瀹㈣繍閲廮鍩庡競鍐呭崰姣�")));
+ item.setPassengersPerTripChengxiang(getDecimal(row, colByName(hdr, 34, "鍗曡溅娆¤浇瀹汉鏁癬鍩庨檯鍩庝埂")));
+ item.setRateTripChengxiangMom(getDecimal(row, colByName(hdr, 35, "杞藉杞︽鎬绘暟_鍩庨檯鍩庝埂鐜瘮澧為��")));
+ item.setRatePassengerChengxiangMom(getDecimal(row, colByName(hdr, 36, "瀹㈣繍閲廮鍩庨檯鍩庝埂鐜瘮澧為��")));
+ item.setAvgDistanceChengxiang(getDecimal(row, colByName(hdr, 37, "骞冲潎杩愯窛_鍩庨檯鍩庝埂")));
+ item.setVerifyExplanation(getString(row, colByName(hdr, 38, "鏍稿疄鎬у師鍥犺В閲�")));
+ item.setReportNote(getString(row, colByName(hdr, 39, "涓婃姤璇存槑")));
+ item.setModifyRecord(getString(row, colByName(hdr, 40, "淇敼璁板綍")));
rows.add(new TaxiRow(r + 1, item));
}
} catch (Exception e) {
--
Gitblit v1.9.1