From 95a1f46104dadf824586498aa139a1acaf5fc77c Mon Sep 17 00:00:00 2001
From: zhizhijie <zhizhijie@users.noreply.gitee.com>
Date: 星期四, 10 九月 2026 08:58:55 +0800
Subject: [PATCH] feat: 数据导入页清空增强——支持按数据类型清空(后端 types 参数 + 弹窗多选),清空按钮移出“刷新”行改独立危险操作区防误触(含功能测试报告与工作日结)
---
traffic-audit-server/src/main/java/com/trafficaudit/dataimport/service/DataImportService.java | 223 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 216 insertions(+), 7 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 3aa4d32..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
@@ -1317,13 +1317,100 @@
}
}
- /** 娓呯┖鎸囧畾鎶ヨ〃鏈熷叏閮ㄥ凡瀵煎叆鏁版嵁涓庡鏍哥粨鏋滐紙鍚鍏ユ壒娆°�佸鏍搁�氳繃鏍囪锛夛紝鐢ㄤ簬鏁存湀閲嶅锛涙姇璧勯」鐩富妗d繚鐣� */
+ /** 鏀寔鈥滄寜绫诲瀷娓呯┖鈥濈殑鏁版嵁绫诲瀷 -> 鏁版嵁琛ㄦ搷浣滈敭锛堝悓琛ㄥ悓绫诲埆褰掑苟锛岄伩鍏嶉噸澶嶅垹闄わ級 */
+ 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) {
+ 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>()
@@ -1358,23 +1445,145 @@
.eq(WycTotalMonthly::getReportPeriod, period));
dataRows += wycOrderMapper.delete(new LambdaQueryWrapper<WycOrderMonthly>()
.eq(WycOrderMonthly::getReportPeriod, period));
- int auditRows = auditResultMapper.delete(new LambdaQueryWrapper<AuditResult>()
+ auditRows = auditResultMapper.delete(new LambdaQueryWrapper<AuditResult>()
.eq(AuditResult::getReportPeriod, period));
- int auditRunRows = auditRunMapper.delete(new LambdaQueryWrapper<AuditRun>()
+ auditRunRows = auditRunMapper.delete(new LambdaQueryWrapper<AuditRun>()
.eq(AuditRun::getReportPeriod, period));
- int batchRows = importBatchMapper.delete(new LambdaQueryWrapper<ImportBatch>()
+ 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, dataRows, auditRows, auditRunRows, 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<>();
--
Gitblit v1.9.1