From 71eab1423adf4ba4b18161a82af8ebe2d856cf0f Mon Sep 17 00:00:00 2001 From: tangwei Date: Fri, 10 Jul 2026 15:18:07 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E6=B5=81=E9=87=8F?= =?UTF-8?q?=E7=AB=99=E7=BC=93=E5=AD=98=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/yfd/platform/config/JobRunner.java | 5 + .../zq/service/impl/ZqMonitorServiceImpl.java | 16 +++- .../qgc_job/service/IFhJobService.java | 8 ++ .../service/impl/FhJobServiceImpl.java | 95 +++++++++++++++++++ .../yfd/platform/qgc_job/vo/ZqLastDataVo.java | 27 ++++++ 5 files changed, 149 insertions(+), 2 deletions(-) create mode 100644 backend/src/main/java/com/yfd/platform/qgc_job/service/IFhJobService.java create mode 100644 backend/src/main/java/com/yfd/platform/qgc_job/service/impl/FhJobServiceImpl.java create mode 100644 backend/src/main/java/com/yfd/platform/qgc_job/vo/ZqLastDataVo.java 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 ebabd5c4..f6d180e5 100644 --- a/backend/src/main/java/com/yfd/platform/config/JobRunner.java +++ b/backend/src/main/java/com/yfd/platform/config/JobRunner.java @@ -22,6 +22,7 @@ import com.yfd.platform.qgc_env.wq.entity.ao.JobBaseAo; import com.yfd.platform.qgc_env.wq.service.EnvWqDataService; import com.yfd.platform.qgc_job.service.IDwJobService; import com.yfd.platform.qgc_job.service.IEqJobService; +import com.yfd.platform.qgc_job.service.IFhJobService; import com.yfd.platform.system.domain.QuartzJob; import com.yfd.platform.system.mapper.QuartzJobMapper; import com.yfd.platform.utils.QuartzManage; @@ -51,6 +52,7 @@ public class JobRunner implements ApplicationRunner { private final EnvWqDataService envWqDataService; private final IEqJobService eqJobService; private final IDwJobService dwJobService; + private final IFhJobService fhJobService; /** * 项目启动时重新激活启用的定时任务 @@ -81,5 +83,8 @@ public class JobRunner implements ApplicationRunner { 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_env/zq/service/impl/ZqMonitorServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/zq/service/impl/ZqMonitorServiceImpl.java index 82572567..85743199 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/zq/service/impl/ZqMonitorServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/zq/service/impl/ZqMonitorServiceImpl.java @@ -24,7 +24,9 @@ import com.yfd.platform.qgc_env.zq.entity.vo.ZqRiverDrtpDataVo; import com.yfd.platform.qgc_env.zq.entity.vo.ZqRiverDataVo; import com.yfd.platform.qgc_env.wt.utils.SiteAvoidanceUtils; import com.yfd.platform.qgc_env.zq.service.ZqMonitorService; +import com.yfd.platform.qgc_job.vo.ZqLastDataVo; import com.yfd.platform.utils.QgcQueryWrapperUtil; +import com.yfd.platform.utils.RedisCacheUtil; import com.yfd.platform.utils.SecurityUtils; import jakarta.annotation.Resource; import org.springframework.cache.annotation.Cacheable; @@ -50,7 +52,6 @@ public class ZqMonitorServiceImpl implements ZqMonitorService { private static final String ZQ_MONTH_TABLE_NAME = "SD_RIVERDRTP_S"; private static final Map ZQ_UPDATE_COLUMN_MAP = new LinkedHashMap<>(); private static final Map ZQ_FIELD_MEANING_MAP = new LinkedHashMap<>(); - static { ZQ_UPDATE_COLUMN_MAP.put("z", "Z"); ZQ_UPDATE_COLUMN_MAP.put("q", "Q"); @@ -90,6 +91,8 @@ public class ZqMonitorServiceImpl implements ZqMonitorService { @Resource private MsOperationLogDetailMapper msOperationLogDetailMapper; + @Resource + private RedisCacheUtil redisCacheUtil; @Override @Cacheable(cacheNames = "zqCache#7200", keyGenerator = "cacheKeyGenerator") @@ -2441,7 +2444,16 @@ public class ZqMonitorServiceImpl implements ZqMonitorService { Page page = QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake()); List resultList = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, ZqPoint.class); - + resultList.forEach(item->{ + //获取流量站最新数据 + ZqLastDataVo zqLastData = redisCacheUtil.fromJson(redisCacheUtil.getString("zqLastData:"+item.getStcd()), ZqLastDataVo.class); + if(zqLastData !=null){ + item.setTm(zqLastData.getTm()); + item.setQ(zqLastData.getQ()); + item.setZ(zqLastData.getZ()); + item.setV(zqLastData.getV()); + } + }); SiteAvoidanceUtils.calcSiteMapLev(resultList, ZqPoint::getStcd, ZqPoint::getLgtd, diff --git a/backend/src/main/java/com/yfd/platform/qgc_job/service/IFhJobService.java b/backend/src/main/java/com/yfd/platform/qgc_job/service/IFhJobService.java new file mode 100644 index 00000000..5b7b8f0b --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_job/service/IFhJobService.java @@ -0,0 +1,8 @@ +package com.yfd.platform.qgc_job.service; + +import com.yfd.platform.qgc_env.wq.entity.ao.JobBaseAo; + +public interface IFhJobService { + + void zqLastData(JobBaseAo ao); +} diff --git a/backend/src/main/java/com/yfd/platform/qgc_job/service/impl/FhJobServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_job/service/impl/FhJobServiceImpl.java new file mode 100644 index 00000000..149202f0 --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_job/service/impl/FhJobServiceImpl.java @@ -0,0 +1,95 @@ +package com.yfd.platform.qgc_job.service.impl; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.json.JSONUtil; +import com.yfd.platform.common.MicroservicDynamicSQLMapper; +import com.yfd.platform.qgc_env.wq.entity.ao.JobBaseAo; +import com.yfd.platform.qgc_job.service.IFhJobService; +import com.yfd.platform.qgc_job.vo.ZqLastDataVo; +import com.yfd.platform.utils.RedisCacheUtil; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +@Slf4j +@Service +public class FhJobServiceImpl implements IFhJobService { + + private static final String ZQ_LAST_DATA_KEY_PREFIX = "zqLastData:"; + + @Resource + private MicroservicDynamicSQLMapper microservicDynamicSQLMapper; + + @Resource + private RedisCacheUtil redisCacheUtil; + + @Override + public void zqLastData(JobBaseAo ao) { + Set stcds = ao == null ? null : ao.getStcds(); + List zqDataVos = getZqLastData(stcds); + if (CollUtil.isEmpty(zqDataVos)) { + return; + } + for (ZqLastDataVo zqDataVo : zqDataVos) { + if (zqDataVo == null || zqDataVo.getStcd() == null) { + continue; + } + redisCacheUtil.setString(ZQ_LAST_DATA_KEY_PREFIX + zqDataVo.getStcd(), JSONUtil.toJsonStr(zqDataVo)); + } + log.info("本次更新河道水情缓存{}条", zqDataVos.size()); + } + + private List getZqLastData(Set stcds) { + Map paramMap = new HashMap<>(); + StringBuilder sql = new StringBuilder(); + sql.append("SELECT ") + .append("t.STCD AS stcd, ") + .append("t.Z AS z, ") + .append("t.Q AS q, ") + .append("t.V AS v, ") + .append("t.TM AS tm ") + .append("FROM SD_RIVER_R t ") + .append("INNER JOIN ( ") + .append(" SELECT STCD, MAX(TM) AS tm ") + .append(" FROM SD_RIVER_R ") + .append(" WHERE NVL(IS_DELETED, 0) = 0 "); + appendInCondition(sql, paramMap, "STCD", stcds, "zqLastDataInnerStcd"); + sql.append(" GROUP BY STCD ") + .append(") t1 ON t.STCD = t1.STCD AND t.TM = t1.tm ") + .append("WHERE NVL(t.IS_DELETED, 0) = 0 "); + appendInCondition(sql, paramMap, "t.STCD", stcds, "zqLastDataOuterStcd"); + return microservicDynamicSQLMapper.getAllListWithResultType(sql.toString(), paramMap, ZqLastDataVo.class); + } + + private void appendInCondition(StringBuilder sql, + Map paramMap, + String column, + Set values, + String prefix) { + if (CollUtil.isEmpty(values)) { + return; + } + List placeholders = new ArrayList<>(); + int index = 0; + for (String value : values) { + if (value == null || value.trim().isEmpty()) { + continue; + } + String key = prefix + index++; + paramMap.put(key, value.trim()); + placeholders.add("#{map." + key + "}"); + } + if (CollUtil.isEmpty(placeholders)) { + return; + } + sql.append(" AND ").append(column).append(" IN (") + .append(String.join(", ", placeholders)) + .append(") "); + } +} diff --git a/backend/src/main/java/com/yfd/platform/qgc_job/vo/ZqLastDataVo.java b/backend/src/main/java/com/yfd/platform/qgc_job/vo/ZqLastDataVo.java new file mode 100644 index 00000000..9aff5c5b --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_job/vo/ZqLastDataVo.java @@ -0,0 +1,27 @@ +package com.yfd.platform.qgc_job.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +@Data +@Schema(description = "河道水情最新缓存") +public class ZqLastDataVo { + + @Schema(description = "站码") + private String stcd; + + @Schema(description = "水位") + private BigDecimal z; + + @Schema(description = "流量") + private BigDecimal q; + + @Schema(description = "流速") + private BigDecimal v; + + @Schema(description = "时间") + private Date tm; +}