From af70e2f6f71eb24087b72b189212c92d5283f11e Mon Sep 17 00:00:00 2001
From: zhizhijie <zhizhijie@users.noreply.gitee.com>
Date: 星期四, 10 九月 2026 22:48:38 +0800
Subject: [PATCH] docs: 工作日结补充出版.docx修订记录(Markdown假表格还原为8个真表格 + 4处有误数据修正 + 6页渲染校验)
---
traffic-audit-server/src/main/java/com/trafficaudit/dataimport/service/DataImportService.java | 334 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 324 insertions(+), 10 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 4af3f35..e34a275 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
@@ -2,7 +2,9 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.trafficaudit.auditengine.entity.AuditResult;
+import com.trafficaudit.auditengine.entity.AuditRun;
import com.trafficaudit.auditengine.mapper.AuditResultMapper;
+import com.trafficaudit.auditengine.mapper.AuditRunMapper;
import com.trafficaudit.common.util.RegionUtil;
import com.trafficaudit.dataimport.entity.EnergyAuthVehicle;
import com.trafficaudit.dataimport.entity.EnergyVehicleQuarterly;
@@ -56,6 +58,7 @@
import org.apache.poi.ss.usermodel.WorkbookFactory;
import cn.hutool.core.io.IoUtil;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
@@ -142,6 +145,8 @@
private FreightTurnoverImportMapper freightTurnoverMapper;
@Resource
private AuditResultMapper auditResultMapper;
+ @Resource
+ private AuditRunMapper auditRunMapper;
@Resource
private PassengerEnterpriseMonthlyMapper passengerMapper;
@Resource
@@ -558,24 +563,30 @@
}
}
- /** 鍏矾鏃呭杩愭斂杞﹁締鏁帮紙鐙珛妯℃澘锛氫紒涓氫唬鐮�/浼佷笟鍚嶇О/杞﹁締鏁�/杞藉浣嶆暟锛� */
+ /** 鍏矾鏃呭杩愭斂杞﹁締鏁帮紙鍏煎涓ょ琛ㄥご锛氣憼 浼佷笟浠g爜/浼佷笟鍚嶇О/杞﹁締鏁�/杞藉浣嶆暟锛涒憽 杩愭斂搴撳鍑� OWNERNAME/鎬昏溅杈嗘暟/瀹綅鏁帮紝鏃犱紒涓氫唬鐮佸垪锛� */
public ImportResult importPassengerAuth(MultipartFile file, String period) throws Exception {
List<PassengerAuthVehicle> authList = new ArrayList<>();
try (Workbook wb = WorkbookFactory.create(file.getInputStream())) {
Sheet sheet = wb.getSheetAt(0);
- Map<String, Integer> colMap = buildHeaderMap(sheet.getRow(0));
- requireHeaderCols(sheet, "鏃呭杩愭斂杞﹁締鏁�", "浼佷笟鍚嶇О", "杞﹁締鏁�", "杞藉浣嶆暟");
+ Map<String, Integer> colMap = buildHeaderMapCompat(sheet.getRow(0));
+ Integer nameCol = firstColIdx(colMap, "浼佷笟鍚嶇О", "OWNERNAME");
+ Integer vehicleCol = firstColIdx(colMap, "杞﹁締鏁�", "鎬昏溅杈嗘暟");
+ Integer seatCol = firstColIdx(colMap, "杞藉浣嶆暟", "瀹綅鏁�");
+ Integer codeCol = firstColIdx(colMap, "浼佷笟浠g爜");
+ if (nameCol == null || vehicleCol == null || seatCol == null) {
+ throw new RuntimeException("鎵�閫夋暟鎹被鍨嬨�愭梾瀹㈣繍鏀胯溅杈嗘暟銆戜笌鏂囦欢鍐呭涓嶇锛氳〃澶撮渶鍚�愪紒涓氬悕绉�/杞﹁締鏁�/杞藉浣嶆暟銆戞垨銆怬WNERNAME/鎬昏溅杈嗘暟/瀹綅鏁般�戯紝璇风‘璁ゆ槸鍚﹂�夐敊浜嗘暟鎹被鍨嬫垨浣跨敤浜嗘棫妯℃澘");
+ }
for (int r = 1; r <= sheet.getLastRowNum(); r++) {
Row row = sheet.getRow(r);
if (row == null) continue;
- String name = gs(row, colMap, "浼佷笟鍚嶇О");
+ String name = getString(row, nameCol);
if (name == null || name.trim().isEmpty()) continue;
PassengerAuthVehicle auth = new PassengerAuthVehicle();
auth.setReportPeriod(period);
- auth.setEnterpriseCode(gs(row, colMap, "浼佷笟浠g爜"));
+ auth.setEnterpriseCode(codeCol == null ? null : getString(row, codeCol));
auth.setEnterpriseName(name.trim());
- auth.setVehicleCount(gi(row, colMap, "杞﹁締鏁�"));
- auth.setSeatCount(gi(row, colMap, "杞藉浣嶆暟"));
+ auth.setVehicleCount(getInt(row, vehicleCol));
+ auth.setSeatCount(getInt(row, seatCol));
authList.add(auth);
}
} catch (Exception e) {
@@ -924,10 +935,11 @@
List<ScaleSplitTransport> list = new ArrayList<>();
int failRows = 0;
try (Workbook wb = WorkbookFactory.create(file.getInputStream())) {
+ int targetMonth = Integer.parseInt(period.split("-")[1]); // 浠呭鍏ョ洰鏍囨湡鎵�鍦ㄦ湀鐨勯〉绛撅紙1-N鏈堟枃浠舵寜鐩爣鏈熷彇褰撴湀/绱锛�
boolean hasPeriodSheet = false;
for (int i = 0; i < wb.getNumberOfSheets(); i++) {
String sn = wb.getSheetAt(i).getSheetName();
- if (sn != null && (sn.contains("褰撴湀") || sn.contains("绱"))) { hasPeriodSheet = true; break; }
+ if (sn != null && (sn.contains("褰撴湀") || sn.contains("鏈堜唤") || sn.contains("绱"))) { hasPeriodSheet = true; break; }
}
if (!hasPeriodSheet) {
throw new RuntimeException("鎵�閫夋暟鎹被鍨嬨�愯涓婅涓嬫媶鍒嗐�戜笌鏂囦欢鍐呭涓嶇锛氭湭鎵惧埌鍚� 褰撴湀/绱 鐨� sheet锛岃纭鏄惁閫夐敊浜嗘暟鎹被鍨�");
@@ -936,8 +948,16 @@
Sheet sheet = wb.getSheetAt(i);
String sheetName = sheet.getSheetName();
String periodType = null;
- if (sheetName.contains("褰撴湀")) periodType = "MONTH";
- else if (sheetName.contains("绱")) periodType = "CUMULATIVE";
+ java.util.regex.Matcher mSheetMonth = java.util.regex.Pattern.compile("(\\d{1,2})\\u6708(\\u4efd|\\u7d2f\\u8ba1)").matcher(sheetName);
+ if (mSheetMonth.find()) {
+ int sheetMonth = Integer.parseInt(mSheetMonth.group(1));
+ if (sheetMonth == targetMonth) {
+ periodType = "浠�".equals(mSheetMonth.group(2)) ? "MONTH" : "CUMULATIVE";
+ }
+ } else {
+ if (sheetName.contains("褰撴湀")) periodType = "MONTH";
+ else if (sheetName.contains("绱")) periodType = "CUMULATIVE";
+ }
if (periodType == null) continue;
// 鏍¢獙 sheet 甯冨眬锛氱2琛屽簲鍚�屽競宸�/瑙勪笂浼佷笟杩愯緭閲忋�嶏紝绗�3琛屽瓙琛ㄥご搴斿惈銆屽懆杞噺銆嶆垨銆岃揣杩愰噺銆嶏紙鎵╁睍甯冨眬锛�
@@ -1297,6 +1317,273 @@
}
}
+ /** 鏀寔鈥滄寜绫诲瀷娓呯┖鈥濈殑鏁版嵁绫诲瀷 -> 鏁版嵁琛ㄦ搷浣滈敭锛堝悓琛ㄥ悓绫诲埆褰掑苟锛岄伩鍏嶉噸澶嶅垹闄わ級 */
+ private static final Map<String, String> CLEAR_TYPE_TO_OP = new LinkedHashMap<>();
+ /** 鏁版嵁绫诲瀷 -> 鍏宠仈瀹℃牳瑙勫垯绫诲瀷锛堝悓姝ユ竻闄ゅ鏍哥粨鏋滀笌宸插鏍告爣璁帮級 */
+ private static final Map<String, String[]> CLEAR_TYPE_TO_AUDIT = new HashMap<>();
+ /** 鏁版嵁绫诲瀷 -> 鍏宠仈瀵煎叆鎵规 importType锛堝悓姝ユ竻闄ゅ鍏ユ壒娆¤褰曪級 */
+ private static final Map<String, String[]> CLEAR_TYPE_TO_BATCH = new HashMap<>();
+
+ static {
+ CLEAR_TYPE_TO_OP.put("h2032", "H2032");
+ CLEAR_TYPE_TO_OP.put("transportAuth", "TRANSPORT_AUTH");
+ CLEAR_TYPE_TO_OP.put("trackMileage", "TRACK_MILEAGE");
+ CLEAR_TYPE_TO_OP.put("scaleSplit", "SCALE_SPLIT");
+ CLEAR_TYPE_TO_OP.put("freightTurnover", "FREIGHT_TURNOVER");
+ CLEAR_TYPE_TO_OP.put("passengerMonthly", "H2031");
+ CLEAR_TYPE_TO_OP.put("passengerAuth", "PASSENGER_AUTH");
+ CLEAR_TYPE_TO_OP.put("passengerIndividual", "PASSENGER_INDIVIDUAL");
+ CLEAR_TYPE_TO_OP.put("energyMonthly", "H204");
+ CLEAR_TYPE_TO_OP.put("energyAuth", "ENERGY_AUTH");
+ CLEAR_TYPE_TO_OP.put("investment", "INVEST_MONTHLY_PASSENGER");
+ CLEAR_TYPE_TO_OP.put("investCityPassenger", "INVEST_MONTHLY_PASSENGER");
+ CLEAR_TYPE_TO_OP.put("investmentLogistics", "INVEST_MONTHLY_LOGISTICS");
+ CLEAR_TYPE_TO_OP.put("investCityLogistics", "INVEST_MONTHLY_LOGISTICS");
+ CLEAR_TYPE_TO_OP.put("investmentSystem", "INVEST_SYSTEM");
+ CLEAR_TYPE_TO_OP.put("cityBus", "CITY_BUS");
+ CLEAR_TYPE_TO_OP.put("cityTaxi", "CITY_TAXI");
+ CLEAR_TYPE_TO_OP.put("cityTaxiAuth", "CITY_TAXI_AUTH");
+ CLEAR_TYPE_TO_OP.put("wycTotal", "WYC_TOTAL");
+ CLEAR_TYPE_TO_OP.put("wycOrder", "WYC_ORDER");
+
+ CLEAR_TYPE_TO_AUDIT.put("h2032", new String[]{"H2032"});
+ CLEAR_TYPE_TO_AUDIT.put("transportAuth", new String[]{"H2032"});
+ CLEAR_TYPE_TO_AUDIT.put("trackMileage", new String[]{"H2032"});
+ CLEAR_TYPE_TO_AUDIT.put("scaleSplit", new String[]{"H2032"});
+ CLEAR_TYPE_TO_AUDIT.put("freightTurnover", new String[]{"H2032"});
+ CLEAR_TYPE_TO_AUDIT.put("passengerMonthly", new String[]{"H2031"});
+ CLEAR_TYPE_TO_AUDIT.put("passengerAuth", new String[]{"H2031"});
+ CLEAR_TYPE_TO_AUDIT.put("passengerIndividual", new String[]{"H2031"});
+ CLEAR_TYPE_TO_AUDIT.put("energyMonthly", new String[]{"H204"});
+ CLEAR_TYPE_TO_AUDIT.put("energyAuth", new String[]{"H204"});
+ CLEAR_TYPE_TO_AUDIT.put("investment", new String[]{"INVEST"});
+ CLEAR_TYPE_TO_AUDIT.put("investmentLogistics", new String[]{"INVEST"});
+ CLEAR_TYPE_TO_AUDIT.put("investCityPassenger", new String[]{"INVEST"});
+ CLEAR_TYPE_TO_AUDIT.put("investCityLogistics", new String[]{"INVEST"});
+ CLEAR_TYPE_TO_AUDIT.put("investmentSystem", new String[]{"INVEST"});
+ CLEAR_TYPE_TO_AUDIT.put("cityBus", new String[]{"CITY_BUS"});
+ CLEAR_TYPE_TO_AUDIT.put("cityTaxi", new String[]{"CITY_TAXI"});
+ CLEAR_TYPE_TO_AUDIT.put("cityTaxiAuth", new String[]{"CITY_TAXI"});
+
+ String[] investPassengerBatch = {"INVEST_瀹㈣繍绔欏満", "INVEST_瀹㈣繍绔欏満_CITY"};
+ String[] investLogisticsBatch = {"INVEST_鐗╂祦鍥尯", "INVEST_鐗╂祦鍥尯_CITY"};
+ CLEAR_TYPE_TO_BATCH.put("h2032", new String[]{"H2032"});
+ CLEAR_TYPE_TO_BATCH.put("transportAuth", new String[]{"TRANSPORT_AUTH"});
+ CLEAR_TYPE_TO_BATCH.put("trackMileage", new String[]{"TRACK_MILEAGE"});
+ CLEAR_TYPE_TO_BATCH.put("scaleSplit", new String[]{"SCALE_SPLIT"});
+ CLEAR_TYPE_TO_BATCH.put("freightTurnover", new String[]{"FREIGHT_TURNOVER"});
+ CLEAR_TYPE_TO_BATCH.put("passengerMonthly", new String[]{"H2031"});
+ CLEAR_TYPE_TO_BATCH.put("passengerAuth", new String[]{"PASSENGER_AUTH"});
+ CLEAR_TYPE_TO_BATCH.put("passengerIndividual", new String[]{"PASSENGER_INDIVIDUAL"});
+ CLEAR_TYPE_TO_BATCH.put("energyMonthly", new String[]{"H204"});
+ CLEAR_TYPE_TO_BATCH.put("energyAuth", new String[]{"ENERGY_AUTH"});
+ CLEAR_TYPE_TO_BATCH.put("investment", investPassengerBatch);
+ CLEAR_TYPE_TO_BATCH.put("investCityPassenger", investPassengerBatch);
+ CLEAR_TYPE_TO_BATCH.put("investmentLogistics", investLogisticsBatch);
+ CLEAR_TYPE_TO_BATCH.put("investCityLogistics", investLogisticsBatch);
+ CLEAR_TYPE_TO_BATCH.put("investmentSystem", new String[]{"INVEST_SYSTEM"});
+ CLEAR_TYPE_TO_BATCH.put("cityBus", new String[]{"CITY_BUS"});
+ CLEAR_TYPE_TO_BATCH.put("cityTaxi", new String[]{"CITY_TAXI"});
+ CLEAR_TYPE_TO_BATCH.put("cityTaxiAuth", new String[]{"CITY_TAXI_AUTH"});
+ CLEAR_TYPE_TO_BATCH.put("wycTotal", new String[]{"WYC_TOTAL"});
+ CLEAR_TYPE_TO_BATCH.put("wycOrder", new String[]{"WYC_ORDER"});
+ }
+
+ /**
+ * 娓呯┖鎸囧畾鎶ヨ〃鏈熷凡瀵煎叆鏁版嵁涓庡鏍哥粨鏋滐紝鐢ㄤ簬鏁存湀閲嶅锛涙姇璧勯」鐩富妗d繚鐣欍��
+ *
+ * @param types 闇�娓呯┖鐨勬暟鎹被鍨嬶紙鍓嶇绫诲瀷閿紝濡� h2032/cityBus锛夛紱涓虹┖鍒欐竻绌鸿鎶ヨ〃鏈熷叏閮ㄧ被鍨�
+ */
+ @Transactional(rollbackFor = Exception.class)
+ public Map<String, Object> clearPeriod(String period, List<String> types) {
+ if (period == null || !period.matches("\\d{4}-\\d{2}")) {
+ throw new IllegalArgumentException("鎶ヨ〃鏈熸牸寮忎笉姝g‘锛屽簲涓� yyyy-MM");
+ }
+ Set<String> selected = new LinkedHashSet<>();
+ if (types != null) {
+ for (String t : types) {
+ if (t != null && !t.trim().isEmpty()) selected.add(t.trim());
+ }
+ }
+ boolean clearAll = selected.isEmpty();
+ int dataRows = 0;
+ int auditRows = 0;
+ int auditRunRows = 0;
+ int batchRows = 0;
+ if (clearAll) {
+ dataRows += h2032Mapper.delete(new LambdaQueryWrapper<H2032EnterpriseMonthly>()
+ .eq(H2032EnterpriseMonthly::getReportPeriod, period));
+ dataRows += transportAuthMapper.delete(new LambdaQueryWrapper<TransportAuthVehicle>()
+ .eq(TransportAuthVehicle::getReportPeriod, period));
+ dataRows += trackMileageMapper.delete(new LambdaQueryWrapper<VehicleTrackMileage>()
+ .eq(VehicleTrackMileage::getReportPeriod, period));
+ dataRows += scaleSplitMapper.delete(new LambdaQueryWrapper<ScaleSplitTransport>()
+ .eq(ScaleSplitTransport::getReportPeriod, period));
+ dataRows += freightTurnoverMapper.delete(new LambdaQueryWrapper<FreightTurnoverImport>()
+ .eq(FreightTurnoverImport::getReportPeriod, period));
+ dataRows += passengerMapper.delete(new LambdaQueryWrapper<PassengerEnterpriseMonthly>()
+ .eq(PassengerEnterpriseMonthly::getReportPeriod, period));
+ dataRows += passengerIndividualMapper.delete(new LambdaQueryWrapper<PassengerIndividualMonthly>()
+ .eq(PassengerIndividualMonthly::getReportPeriod, period));
+ dataRows += passengerAuthMapper.delete(new LambdaQueryWrapper<PassengerAuthVehicle>()
+ .eq(PassengerAuthVehicle::getReportPeriod, period));
+ dataRows += energyMapper.delete(new LambdaQueryWrapper<EnergyVehicleQuarterly>()
+ .eq(EnergyVehicleQuarterly::getReportPeriod, period));
+ dataRows += energyAuthMapper.delete(new LambdaQueryWrapper<EnergyAuthVehicle>()
+ .eq(EnergyAuthVehicle::getReportPeriod, period));
+ dataRows += investMonthlyMapper.delete(new LambdaQueryWrapper<InvestmentMonthly>()
+ .eq(InvestmentMonthly::getReportPeriod, period));
+ dataRows += investSystemMapper.delete(new LambdaQueryWrapper<InvestmentSystem>()
+ .eq(InvestmentSystem::getReportPeriod, period));
+ dataRows += cityBusMapper.delete(new LambdaQueryWrapper<CityBusMonthly>()
+ .eq(CityBusMonthly::getReportPeriod, period));
+ dataRows += cityTaxiMapper.delete(new LambdaQueryWrapper<CityTaxiMonthly>()
+ .eq(CityTaxiMonthly::getReportPeriod, period));
+ dataRows += cityTaxiAuthMapper.delete(new LambdaQueryWrapper<CityTaxiAuth>()
+ .eq(CityTaxiAuth::getReportPeriod, period));
+ dataRows += wycTotalMapper.delete(new LambdaQueryWrapper<WycTotalMonthly>()
+ .eq(WycTotalMonthly::getReportPeriod, period));
+ dataRows += wycOrderMapper.delete(new LambdaQueryWrapper<WycOrderMonthly>()
+ .eq(WycOrderMonthly::getReportPeriod, period));
+ auditRows = auditResultMapper.delete(new LambdaQueryWrapper<AuditResult>()
+ .eq(AuditResult::getReportPeriod, period));
+ auditRunRows = auditRunMapper.delete(new LambdaQueryWrapper<AuditRun>()
+ .eq(AuditRun::getReportPeriod, period));
+ batchRows = importBatchMapper.delete(new LambdaQueryWrapper<ImportBatch>()
+ .eq(ImportBatch::getReportPeriod, period));
+ } else {
+ Set<String> ops = new LinkedHashSet<>();
+ Set<String> auditTypes = new LinkedHashSet<>();
+ Set<String> batchTypes = new LinkedHashSet<>();
+ for (String t : selected) {
+ String op = CLEAR_TYPE_TO_OP.get(t);
+ if (op == null) {
+ log.warn("娓呯┖鏁版嵁锛氭湭鐭ユ暟鎹被鍨� {}锛屽凡蹇界暐", t);
+ continue;
+ }
+ ops.add(op);
+ String[] at = CLEAR_TYPE_TO_AUDIT.get(t);
+ if (at != null) java.util.Collections.addAll(auditTypes, at);
+ String[] bt = CLEAR_TYPE_TO_BATCH.get(t);
+ if (bt != null) java.util.Collections.addAll(batchTypes, bt);
+ }
+ if (ops.isEmpty()) {
+ throw new IllegalArgumentException("鏈寚瀹氭湁鏁堢殑鏁版嵁绫诲瀷");
+ }
+ for (String op : ops) {
+ dataRows += clearTypeData(op, period);
+ }
+ if (!auditTypes.isEmpty()) {
+ List<Long> ruleIds = new ArrayList<>();
+ for (com.trafficaudit.rulemanage.entity.AuditRule rule : ruleMapper.selectList(null)) {
+ if (rule.getReportType() != null && auditTypes.contains(rule.getReportType())) {
+ ruleIds.add(rule.getId());
+ }
+ }
+ if (!ruleIds.isEmpty()) {
+ auditRows = auditResultMapper.delete(new LambdaQueryWrapper<AuditResult>()
+ .eq(AuditResult::getReportPeriod, period)
+ .in(AuditResult::getRuleId, ruleIds));
+ }
+ for (String rt : auditTypes) {
+ auditRunRows += auditRunMapper.delete(new LambdaQueryWrapper<AuditRun>()
+ .eq(AuditRun::getReportPeriod, period)
+ .eq(AuditRun::getReportType, rt));
+ }
+ }
+ if (!batchTypes.isEmpty()) {
+ batchRows = importBatchMapper.delete(new LambdaQueryWrapper<ImportBatch>()
+ .eq(ImportBatch::getReportPeriod, period)
+ .in(ImportBatch::getImportType, batchTypes));
+ }
+ }
+ Map<String, Object> stats = new LinkedHashMap<>();
+ stats.put("period", period);
+ stats.put("scope", clearAll ? "all" : "types");
+ if (!clearAll) stats.put("types", new ArrayList<>(selected));
+ stats.put("dataRows", dataRows);
+ stats.put("auditRows", auditRows);
+ stats.put("auditRunRows", auditRunRows);
+ stats.put("batchRows", batchRows);
+ log.info("娓呯┖鎶ヨ〃鏈� {}锛坽}锛夊畬鎴愶細涓氬姟鏁版嵁 {} 琛屻�佸鏍哥粨鏋� {} 琛屻�佸鏍告爣璁� {} 琛屻�佸鍏ユ壒娆� {} 琛�",
+ period, clearAll ? "鍏ㄩ儴绫诲瀷" : String.join(",", selected), dataRows, auditRows, auditRunRows, batchRows);
+ return stats;
+ }
+
+ /** 鎸夆�滄暟鎹〃鎿嶄綔閿�濇竻绌哄搴斾笟鍔¤〃锛堟姇璧勬湀搴︽寜椤圭洰绫诲埆杩囨护锛夛紝杩斿洖鍒犻櫎琛屾暟 */
+ private int clearTypeData(String op, String period) {
+ switch (op) {
+ case "H2032":
+ return h2032Mapper.delete(new LambdaQueryWrapper<H2032EnterpriseMonthly>()
+ .eq(H2032EnterpriseMonthly::getReportPeriod, period));
+ case "TRANSPORT_AUTH":
+ return transportAuthMapper.delete(new LambdaQueryWrapper<TransportAuthVehicle>()
+ .eq(TransportAuthVehicle::getReportPeriod, period));
+ case "TRACK_MILEAGE":
+ return trackMileageMapper.delete(new LambdaQueryWrapper<VehicleTrackMileage>()
+ .eq(VehicleTrackMileage::getReportPeriod, period));
+ case "SCALE_SPLIT":
+ return scaleSplitMapper.delete(new LambdaQueryWrapper<ScaleSplitTransport>()
+ .eq(ScaleSplitTransport::getReportPeriod, period));
+ case "FREIGHT_TURNOVER":
+ return freightTurnoverMapper.delete(new LambdaQueryWrapper<FreightTurnoverImport>()
+ .eq(FreightTurnoverImport::getReportPeriod, period));
+ case "H2031":
+ return passengerMapper.delete(new LambdaQueryWrapper<PassengerEnterpriseMonthly>()
+ .eq(PassengerEnterpriseMonthly::getReportPeriod, period));
+ case "PASSENGER_AUTH":
+ return passengerAuthMapper.delete(new LambdaQueryWrapper<PassengerAuthVehicle>()
+ .eq(PassengerAuthVehicle::getReportPeriod, period));
+ case "PASSENGER_INDIVIDUAL":
+ return passengerIndividualMapper.delete(new LambdaQueryWrapper<PassengerIndividualMonthly>()
+ .eq(PassengerIndividualMonthly::getReportPeriod, period));
+ case "H204":
+ return energyMapper.delete(new LambdaQueryWrapper<EnergyVehicleQuarterly>()
+ .eq(EnergyVehicleQuarterly::getReportPeriod, period));
+ case "ENERGY_AUTH":
+ return energyAuthMapper.delete(new LambdaQueryWrapper<EnergyAuthVehicle>()
+ .eq(EnergyAuthVehicle::getReportPeriod, period));
+ case "INVEST_MONTHLY_PASSENGER":
+ return deleteInvestmentMonthly(period, "瀹㈣繍绔欏満");
+ case "INVEST_MONTHLY_LOGISTICS":
+ return deleteInvestmentMonthly(period, "鐗╂祦鍥尯");
+ case "INVEST_SYSTEM":
+ return investSystemMapper.delete(new LambdaQueryWrapper<InvestmentSystem>()
+ .eq(InvestmentSystem::getReportPeriod, period));
+ case "CITY_BUS":
+ return cityBusMapper.delete(new LambdaQueryWrapper<CityBusMonthly>()
+ .eq(CityBusMonthly::getReportPeriod, period));
+ case "CITY_TAXI":
+ return cityTaxiMapper.delete(new LambdaQueryWrapper<CityTaxiMonthly>()
+ .eq(CityTaxiMonthly::getReportPeriod, period));
+ case "CITY_TAXI_AUTH":
+ return cityTaxiAuthMapper.delete(new LambdaQueryWrapper<CityTaxiAuth>()
+ .eq(CityTaxiAuth::getReportPeriod, period));
+ case "WYC_TOTAL":
+ return wycTotalMapper.delete(new LambdaQueryWrapper<WycTotalMonthly>()
+ .eq(WycTotalMonthly::getReportPeriod, period));
+ case "WYC_ORDER":
+ return wycOrderMapper.delete(new LambdaQueryWrapper<WycOrderMonthly>()
+ .eq(WycOrderMonthly::getReportPeriod, period));
+ default:
+ log.warn("娓呯┖鏁版嵁锛氭湭鐭ユ暟鎹〃鎿嶄綔 {}", op);
+ return 0;
+ }
+ }
+
+ /** 鎶曡祫鏈堝害鎸夐」鐩被鍒竻闄わ紙鎶曡祫椤圭洰涓绘。淇濈暀锛� */
+ private int deleteInvestmentMonthly(String period, String category) {
+ List<Long> projectIds = new ArrayList<>();
+ for (InvestmentProject p : investProjectMapper.selectList(new LambdaQueryWrapper<InvestmentProject>()
+ .eq(InvestmentProject::getCategory, category))) {
+ projectIds.add(p.getId());
+ }
+ if (projectIds.isEmpty()) return 0;
+ return investMonthlyMapper.delete(new LambdaQueryWrapper<InvestmentMonthly>()
+ .eq(InvestmentMonthly::getReportPeriod, period)
+ .in(InvestmentMonthly::getProjectId, projectIds));
+ }
+
/** 鏁版嵁鍙樺寲鍚庡垹闄ゆ寚瀹氭姤琛ㄧ被鍨嬫寚瀹氭姤琛ㄦ湡鐨勫鏍哥粨鏋滐紙闇�閲嶆柊鎵ц瀹℃牳锛� */
private void deleteRuleResults(String reportType, String period) {
List<Long> ruleIds = new ArrayList<>();
@@ -1387,6 +1674,33 @@
return colMap;
}
+ /** 鍏煎琛ㄥご鏄犲皠锛氬幓寮曞彿/鍘荤┖鐧斤紱绾嫳鏂囪〃澶寸粺涓�澶у啓锛堝 'OWNERNAME' 鈫� OWNERNAME锛夛紝渚夸簬鏂版棫妯℃澘娣风敤 */
+ private Map<String, Integer> buildHeaderMapCompat(Row header) {
+ Map<String, Integer> colMap = new HashMap<>();
+ if (header == null) return colMap;
+ for (Cell cell : header) {
+ if (cell == null) continue;
+ String h = FORMATTER.formatCellValue(cell).replace("'", "").replace("\"", "").trim();
+ if (h.isEmpty()) continue;
+ boolean ascii = true;
+ for (int i = 0; i < h.length(); i++) {
+ if (h.charAt(i) > 127) { ascii = false; break; }
+ }
+ if (ascii) h = h.toUpperCase();
+ if (!colMap.containsKey(h)) colMap.put(h, cell.getColumnIndex());
+ }
+ return colMap;
+ }
+
+ /** 鎸夊埆鍚嶉『搴忓彇绗竴涓瓨鍦ㄧ殑鍒楀彿锛屽叏閮ㄧ己澶辫繑鍥� null */
+ private Integer firstColIdx(Map<String, Integer> colMap, String... aliases) {
+ for (String a : aliases) {
+ Integer idx = colMap.get(a);
+ if (idx != null) return idx;
+ }
+ return null;
+ }
+
private int colIdx(Map<String, Integer> colMap, String header) {
Integer idx = colMap.get(header);
return idx == null ? -1 : idx;
--
Gitblit v1.9.1