From 817c3ba49d8faa26594dcc731cde811849b74c84 Mon Sep 17 00:00:00 2001 From: tangwei Date: Tue, 1 Sep 2026 11:50:51 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/yfd/platform/config/JobRunner.java | 22 +++---- .../service/impl/QgcExportServiceImpl.java | 65 +++++++++++++++---- 2 files changed, 63 insertions(+), 24 deletions(-) diff --git a/backend/src/main/java/com/yfd/platform/config/JobRunner.java b/backend/src/main/java/com/yfd/platform/config/JobRunner.java index f6d180e5..00a1f203 100644 --- a/backend/src/main/java/com/yfd/platform/config/JobRunner.java +++ b/backend/src/main/java/com/yfd/platform/config/JobRunner.java @@ -75,16 +75,16 @@ public class JobRunner implements ApplicationRunner { ao.setStartTime(DateUtil.beginOfYear(DateUtil.offset(ao.getEndTime(), DateField.YEAR,-1))); } envWqDataService.wqLastData(ao); - log.info("--------------------wq最新一条数据---------------------"); - eqJobService.eqAnchorPointLastDate(ao); - log.info("--------------------eq最新一条数据---------------------"); - eqJobService.eqAnchorPointLastDate(ao); - log.info("--------------------eq最新一条数据---------------------"); - dwJobService.wtLastData(ao); - log.info("--------------------wt最新一条数据---------------------"); - dwJobService.wtvtPointData(ao); - log.info("--------------------wt最新一条数据---------------------"); - fhJobService.zqLastData(ao); - log.info("--------------------fh最新一条数据---------------------"); +// log.info("--------------------wq最新一条数据---------------------"); +// eqJobService.eqAnchorPointLastDate(ao); +// log.info("--------------------eq最新一条数据---------------------"); +// eqJobService.eqAnchorPointLastDate(ao); +// log.info("--------------------eq最新一条数据---------------------"); +// dwJobService.wtLastData(ao); +// log.info("--------------------wt最新一条数据---------------------"); +// dwJobService.wtvtPointData(ao); +// log.info("--------------------wt最新一条数据---------------------"); +// fhJobService.zqLastData(ao); +// log.info("--------------------fh最新一条数据---------------------"); } } diff --git a/backend/src/main/java/com/yfd/platform/qgc_export/service/impl/QgcExportServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_export/service/impl/QgcExportServiceImpl.java index e3d8497f..0709d00c 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_export/service/impl/QgcExportServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_export/service/impl/QgcExportServiceImpl.java @@ -27,6 +27,7 @@ import com.yfd.platform.utils.ExportZipUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletResponse; +import org.apache.commons.collections4.CollectionUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; @@ -362,8 +363,26 @@ public class QgcExportServiceImpl implements IQgcExportService { } if (rstcdToStcd.isEmpty()) { - log.warn("指标 {} 未找到 STTP={} 的测站数据", processor.getFieldName(), sttp); - return null; + // 无对应测站时仍生成 Sheet,仅保留日期列(无电站列),避免整表缺失 + log.warn("指标 {} 未找到 STTP={} 的测站数据,生成空 Sheet(仅日期列)", processor.getFieldName(), sttp); + List> emptyRows = new ArrayList<>(); + int daysInMonth = getDaysInMonth(mr); + for (int d = 1; d <= daysInMonth; d++) { + List row = new ArrayList<>(); + row.add(String.format("%02d", d)); + emptyRows.add(row); + } + List emptyLabels = processor.isVariation() + ? VARIATION_LABELS + : (processor.hasComplianceRate() + ? List.of("日均最低", "日均最高", "月内最低", "月内最低时间", "月内最高", "月内最高时间", "月均", LABEL_COMPLIANCE) + : BASE_LABELS); + for (String label : emptyLabels) { + List row = new ArrayList<>(); + row.add(label); + emptyRows.add(row); + } + return emptyRows; } List uniqueStcds = rstcdToStcd.values().stream().distinct().toList(); @@ -466,8 +485,16 @@ public class QgcExportServiceImpl implements IQgcExportService { } } if (rstcdToStcd.isEmpty()) { - log.warn("生态流量未找到 STTP=ENG 的测站数据"); - return null; + // 未找到电站时仍生成 Sheet,仅保留子标题行(无电站数据行) + log.warn("生态流量未找到 STTP=ENG 的测站数据,生成空 Sheet"); + List subHeaders = Arrays.asList("电站名称", "所属水电基地", "生态流量限值", "日达标率", "小时达标率", "备注"); + List subRow = new ArrayList<>(); + subRow.addAll(subHeaders); + subRow.addAll(subHeaders); + subRow.addAll(subHeaders); + List> rows = new ArrayList<>(); + rows.add(subRow); + return rows; } List uniqueStcds = rstcdToStcd.values().stream().distinct().toList(); @@ -773,8 +800,20 @@ public class QgcExportServiceImpl implements IQgcExportService { } } if (rstcdToStcd.isEmpty()) { - log.warn("水质达标率未找到 STTP=WQ 的测站数据"); - return null; + // 未找到测站时仍生成 Sheet,仅保留子标题行(无电站数据行) + log.warn("水质达标率未找到 STTP=WQ 的测站数据,生成空 Sheet"); + List subRow = new ArrayList<>(); + subRow.add(""); + subRow.add("达标数"); + subRow.add("总数"); + subRow.add("达标率(%)"); + subRow.add("达标数"); + subRow.add("总数"); + subRow.add("达标率(%)"); + subRow.add(""); + List> rows = new ArrayList<>(); + rows.add(subRow); + return rows; } List uniqueStcds = rstcdToStcd.values().stream().distinct().toList(); @@ -1007,13 +1046,13 @@ public class QgcExportServiceImpl implements IQgcExportService { private StationResolution resolveStations(List rstcds, Set sttpTypes) { StationResolution result = new StationResolution(); if (rstcds == null || rstcds.isEmpty()) return result; - - List mappings = stationMappingMapper.selectList( - new LambdaQueryWrapper() - .in(StationMapping::getRstcd, rstcds) - .or() - .in(StationMapping::getStcd, rstcds) - ); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.and(w -> { + if (CollectionUtils.isNotEmpty(rstcds)) { + w.in(StationMapping::getRstcd, rstcds).or().in(StationMapping::getStcd, rstcds); + } + }); + List mappings = stationMappingMapper.selectList(wrapper); // 添加逻辑:如果 sttp 是 "ENG",则 rstcd 赋值为 stcd mappings.forEach(mapping -> {