From f6e2d49558eaee4559bdd22946cbd1dcacc22477 Mon Sep 17 00:00:00 2001 From: tangwei Date: Mon, 6 Jul 2026 09:05:54 +0800 Subject: [PATCH 01/26] =?UTF-8?q?feat:=20=E7=94=9F=E6=80=81=E6=B5=81?= =?UTF-8?q?=E9=87=8F=E6=B3=84=E6=94=BE=E8=AE=BE=E6=96=BD=E6=8F=8F=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../eq/controller/EngEqDataController.java | 6 + .../qgc_eng/eq/entity/vo/EngEqdsVo.java | 101 +++++++++++++++ .../qgc_eng/eq/service/EngEqDataService.java | 3 + .../eq/service/impl/EngEqDataServiceImpl.java | 121 ++++++++++++++++++ .../src/main/resources/application-prod.yml | 5 +- 5 files changed, 234 insertions(+), 2 deletions(-) create mode 100644 backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/EngEqdsVo.java diff --git a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/controller/EngEqDataController.java b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/controller/EngEqDataController.java index 962d0667..1773f5d0 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/controller/EngEqDataController.java +++ b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/controller/EngEqDataController.java @@ -181,4 +181,10 @@ public class EngEqDataController { StcdInfoVo result = engEqDataService.getStInfoByStcd(stcd); return ResponseResult.successData(result); } + + @PostMapping("/eqds/GetKendoListCust") + @Operation(summary = "生态流量泄放设施描点") + public ResponseResult getEqdsKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) { + return ResponseResult.successData(engEqDataService.getEqdsKendoListCust(dataSourceRequest)); + } } diff --git a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/EngEqdsVo.java b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/EngEqdsVo.java new file mode 100644 index 00000000..043eb2c0 --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/EngEqdsVo.java @@ -0,0 +1,101 @@ +package com.yfd.platform.qgc_eng.eq.entity.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.math.BigDecimal; + +@Data +@Schema(description = "生态流量泄放设施描点VO") +public class EngEqdsVo { + + @Schema(description = "设施编码") + private String stcd; + + @Schema(description = "设施名称") + private String stnm; + + @Schema(description = "电站编码") + private String rstcd; + + @Schema(description = "电站名称") + private String ennm; + + @Schema(description = "生态流量泄放方式") + private Integer eqtp; + + @Schema(description = "孔口尺寸") + private String flksz; + + @Schema(description = "进水口地板高程") + private BigDecimal jskdbgc; + + @Schema(description = "出水口地板高程") + private BigDecimal cskdbgc; + + @Schema(description = "死水位时保证流量") + private BigDecimal ddzgq; + + @Schema(description = "基荷发电工况") + private BigDecimal jhfdgk; + + @Schema(description = "最大泄放流量") + private String flkq; + + @Schema(description = "基地") + private String baseId; + + @Schema(description = "流域") + private String rvcd; + + @Schema(description = "行政区") + private String addvcd; + + @Schema(description = "经度") + private BigDecimal lgtd; + + @Schema(description = "纬度") + private BigDecimal lttd; + + @Schema(description = "高程") + private BigDecimal dtmel; + + @Schema(description = "工程类型") + private String sttp; + + @Schema(description = "工程类型名称") + private String sttpName; + + @Schema(description = "锚点类型") + private String sttpMap; + + @Schema(description = "设施类型") + private String sttpCode; + + @Schema(description = "图例编码") + private String anchoPointState; + + @Schema(description = "弹窗名称") + private String titleName; + + @Schema(description = "生态流量限值") + private BigDecimal qecLimit; + + @Schema(description = "地图避让") + private Integer distance; + + @Schema(description = "建设状态 0=规划,1=在建,2=已建") + private String bldsttCode; + + @Schema(description = "沿程排序") + private Integer siteStepSort; + + @Schema(description = "流域排序") + private Integer rvcdStepSort; + + @Schema(description = "电站排序") + private Integer rstcdStepSort; + + @Schema(description = "基地排序") + private Integer baseStepSort; +} \ No newline at end of file diff --git a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/EngEqDataService.java b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/EngEqDataService.java index f2fbf60c..260c2bba 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/EngEqDataService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/EngEqDataService.java @@ -7,6 +7,7 @@ import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqBaseVmsstbprptVo; import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqDayDataVo; import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqDrtpDataVo; import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqDayIntervalVo; +import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqdsVo; import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqHourIntervalVo; import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqIntervalVo; import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqLimitQueryVo; @@ -65,4 +66,6 @@ public interface EngEqDataService { DataSourceResult getDefaultYear(DataSourceRequest dataSourceRequest); StcdInfoVo getStInfoByStcd(String stcd); + + DataSourceResult getEqdsKendoListCust(DataSourceRequest dataSourceRequest); } diff --git a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/impl/EngEqDataServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/impl/EngEqDataServiceImpl.java index ce231794..6cc84b77 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/impl/EngEqDataServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/impl/EngEqDataServiceImpl.java @@ -18,6 +18,7 @@ import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqDataVo; import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqDayDataVo; import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqDrtpDataVo; import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqDayIntervalVo; +import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqdsVo; import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqLimitQueryVo; import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqLimitVo; import com.yfd.platform.qgc_eng.eq.entity.vo.EngFidVo; @@ -36,6 +37,7 @@ import com.yfd.platform.qgc_eng.eq.entity.vo.WbsbVo; import com.yfd.platform.qgc_eng.eq.entity.vo.StBaseInfo; import com.yfd.platform.qgc_eng.eq.entity.vo.StcdInfoVo; import com.yfd.platform.qgc_eng.eq.service.EngEqDataService; +import com.yfd.platform.qgc_env.wt.utils.SiteAvoidanceUtils; import com.yfd.platform.utils.QgcQueryWrapperUtil; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; @@ -5889,4 +5891,123 @@ public class EngEqDataServiceImpl implements EngEqDataService { } return dataSourceResult; } + + @Override + public DataSourceResult getEqdsKendoListCust(DataSourceRequest dataSourceRequest) { + DataSourceResult dataSourceResult = new DataSourceResult<>(); + dataSourceResult.setAggregates(new HashMap<>()); + + if (dataSourceRequest == null) { + dataSourceResult.setData(new ArrayList<>()); + dataSourceResult.setTotal(0L); + return dataSourceResult; + } + + StringBuilder sql = new StringBuilder(); + sql.append("SELECT ") + .append("a.STCD AS stcd, ") + .append("a.STNM AS stnm, ") + .append("a.RSTCD AS rstcd, ") + .append("eng.ENNM AS ennm, ") + .append("a.STTP AS sttp, ") + .append("a.BASE_ID AS baseId, ") + .append("a.LGTD AS lgtd, ") + .append("a.LTTD AS lttd, ") + .append("a.ELEV AS dtmel, ") + .append("a.BLDSTT_CODE AS bldsttCode, ") + .append("a.RVCD AS rvcd, ") + .append("a.ADDVCD AS addvcd, ") + .append("NVL(siteSort.SORT, 999999) AS siteStepSort, ") + .append("NVL(along.ORDER_INDEX, 999999) AS rvcdStepSort, ") + .append("NVL(rstSort.SORT, 999999) AS rstcdStepSort, ") + .append("NVL(hb.ORDER_INDEX, 999999) AS baseStepSort ") + .append("FROM SD_EQ_B_H a ") + .append("LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = a.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 ") + .append("LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = eng.BASE_ID AND NVL(hb.IS_DELETED, 0) = 0 ") + .append("LEFT JOIN MS_ALONG_B along ON along.RVCD = eng.HBRVCD AND along.CODE = 'common' AND NVL(along.IS_DELETED, 0) = 0 ") + .append("LEFT JOIN ( ") + .append(" SELECT det.SORT, cfg.RVCD, det.STCD ") + .append(" FROM MS_ALONGDET_B det ") + .append(" INNER JOIN MS_ALONG_B cfg ON det.ALONG_ID = cfg.ID ") + .append(" WHERE NVL(det.IS_DELETED, 0) = 0 AND NVL(cfg.IS_DELETED, 0) = 0 AND cfg.CODE = 'common' ") + .append(") rstSort ON rstSort.RVCD = eng.HBRVCD AND rstSort.STCD = a.RSTCD ") + .append("LEFT JOIN ( ") + .append(" SELECT det.SORT, cfg.RVCD, det.STCD ") + .append(" FROM MS_ALONGDET_B det ") + .append(" INNER JOIN MS_ALONG_B cfg ON det.ALONG_ID = cfg.ID ") + .append(" WHERE NVL(det.IS_DELETED, 0) = 0 AND NVL(cfg.IS_DELETED, 0) = 0 AND cfg.CODE = 'common' ") + .append(") siteSort ON siteSort.RVCD = eng.HBRVCD AND siteSort.STCD = a.STCD ") + .append("WHERE NVL(a.IS_DELETED, 0) = 0 ") + .append("AND NVL(a.USFL, 1) = 1 ") + .append("AND a.LGTD IS NOT NULL ") + .append("AND a.LTTD IS NOT NULL ") + .append("AND a.STTP IN (SELECT STTP_CODE FROM SD_STTP_B WHERE DESCRIPTION = 'EQ') ") + .append("AND a.RSTCD IS NOT NULL ") + .append("ORDER BY NVL(siteSort.SORT, 999999), NVL(along.ORDER_INDEX, 999999), NVL(rstSort.SORT, 999999), NVL(hb.ORDER_INDEX, 999999), a.STNM "); + + DataSourceLoadOptionsBase loadOptions = dataSourceRequest.toDevRequest(); + Page page = loadOptions == null ? null : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake()); + List eqdsVoList = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), new HashMap<>(), EngEqdsVo.class); + + List resultList = new ArrayList<>(); + for (EngEqdsVo eqdsVo : eqdsVoList) { + String sttpCode = eqdsVo.getSttp(); + List sttpCodeSplit = StrUtil.split(sttpCode, "_"); + eqdsVo.setSttpMap(sttpCodeSplit.get(0)); + eqdsVo.setEqtp(Integer.valueOf(sttpCodeSplit.get(1))); + eqdsVo.setSttp(sttpCodeSplit.get(0)); + eqdsVo.setTitleName(eqdsVo.getStnm()); + + String bldsttCode = eqdsVo.getBldsttCode(); + if ("2".equals(bldsttCode)) { + eqdsVo.setAnchoPointState(sttpCode); + } else { + eqdsVo.setAnchoPointState(sttpCode + "_incomplete"); + } + + eqdsVo.setSttpCode("EQ"); + + String rstcd = eqdsVo.getRstcd(); + if (rstcd != null && rstcd.contains(",")) { + EngEqdsVo eqdsVoNew = new EngEqdsVo(); + eqdsVoNew.setStcd(eqdsVo.getStcd()); + eqdsVoNew.setStnm(eqdsVo.getStnm()); + eqdsVoNew.setSttp(eqdsVo.getSttp()); + eqdsVoNew.setSttpMap(eqdsVo.getSttpMap()); + eqdsVoNew.setSttpCode(eqdsVo.getSttpCode()); + eqdsVoNew.setEqtp(eqdsVo.getEqtp()); + eqdsVoNew.setAnchoPointState(eqdsVo.getAnchoPointState()); + eqdsVoNew.setTitleName(eqdsVo.getTitleName()); + eqdsVoNew.setLgtd(eqdsVo.getLgtd()); + eqdsVoNew.setLttd(eqdsVo.getLttd()); + eqdsVoNew.setDtmel(eqdsVo.getDtmel()); + eqdsVoNew.setBaseId(eqdsVo.getBaseId()); + eqdsVoNew.setBldsttCode(eqdsVo.getBldsttCode()); + + List stcdSplit = StrUtil.split(rstcd, ','); + eqdsVo.setRstcd(stcdSplit.get(0)); + eqdsVoNew.setRstcd(stcdSplit.get(1)); + + String ennm = eqdsVo.getEnnm(); + if (ennm != null && ennm.contains(",")) { + List ennmSplit = StrUtil.split(ennm, ','); + eqdsVo.setEnnm(ennmSplit.get(0)); + eqdsVoNew.setEnnm(ennmSplit.get(1)); + } + resultList.add(eqdsVoNew); + } + resultList.add(eqdsVo); + } + + SiteAvoidanceUtils.calcSiteMapLev(resultList, + EngEqdsVo::getStcd, + EngEqdsVo::getLgtd, + EngEqdsVo::getLttd, + EngEqdsVo::getAnchoPointState, + EngEqdsVo::setDistance); + + dataSourceResult.setData(resultList); + dataSourceResult.setTotal(page == null ? resultList.size() : page.getTotal()); + return dataSourceResult; + } } diff --git a/backend/src/main/resources/application-prod.yml b/backend/src/main/resources/application-prod.yml index 294c61ea..48e5a037 100644 --- a/backend/src/main/resources/application-prod.yml +++ b/backend/src/main/resources/application-prod.yml @@ -111,9 +111,10 @@ spring: matching-strategy: ant_path_matcher data: redis: - host: ${REDIS_HOST:localhost} + host: ${REDIS_HOST:172.16.21.142} port: ${REDIS_PORT:6379} - password: ${REDIS_PASSWORD:} + password: ${REDIS_PASSWORD:zny5678} + database: ${REDIS_DATABASE:15} timeout: 10000ms lettuce: pool: From 85cf3bc3580e1acc921eec725c612c0c024c58d9 Mon Sep 17 00:00:00 2001 From: tangwei Date: Mon, 6 Jul 2026 09:46:43 +0800 Subject: [PATCH 02/26] =?UTF-8?q?feat:=20=E6=A0=96=E6=81=AF=E5=9C=B0/?= =?UTF-8?q?=E7=8F=8D=E7=A8=80=E6=A4=8D=E7=89=A9=E5=9B=AD/=E5=8A=A8?= =?UTF-8?q?=E7=89=A9=E6=95=91=E5=8A=A9=E7=AB=99=E6=8F=8F=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fb/service/impl/FbStationServiceImpl.java | 4 +- .../fh/controller/FhHabitatController.java | 6 ++ .../qgc_env/fh/entity/vo/FhHaVapVo.java | 28 +++++++ .../qgc_env/fh/service/FhHabitatService.java | 3 + .../fh/service/impl/FhHabitatServiceImpl.java | 74 +++++++++++++++++++ .../fp/service/impl/FpRunServiceImpl.java | 6 +- .../service/impl/WarnDataServiceImpl.java | 4 +- .../impl/SmsVerifyCodeServiceImpl.java | 3 +- 8 files changed, 120 insertions(+), 8 deletions(-) create mode 100644 backend/src/main/java/com/yfd/platform/qgc_env/fh/entity/vo/FhHaVapVo.java diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fb/service/impl/FbStationServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/fb/service/impl/FbStationServiceImpl.java index 7963c7c4..f3b3df70 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/fb/service/impl/FbStationServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fb/service/impl/FbStationServiceImpl.java @@ -4643,8 +4643,8 @@ public class FbStationServiceImpl implements FbStationService { .append(" SELECT t.RSTCD AS stcd, COUNT(1) AS lcjStatus ") .append(" FROM SD_ENGFR_R t ") .append(" INNER JOIN SD_RPIMNFISH_R t1 ON t.ID = t1.RPIMN_ID ") - .append(" WHERE (t.TASK_STATUS IS NULL OR t.TASK_STATUS = 'Approved') ") - .append(" AND NVL(t.IS_DELETED, 0) = 0 AND NVL(t1.IS_DELETED, 0) = 0 ") + .append(" WHERE 1=1 ") + .append(" AND t.IS_DELETED = 0 AND t1.IS_DELETED = 0 ") .append(" AND t.TM BETWEEN ADD_MONTHS(SYSDATE, -12) AND SYSDATE ") .append(" GROUP BY t.RSTCD ") .append(") b ON a.STCD = b.stcd ") diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fh/controller/FhHabitatController.java b/backend/src/main/java/com/yfd/platform/qgc_env/fh/controller/FhHabitatController.java index 8a5ee63d..1ab1d44d 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/fh/controller/FhHabitatController.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fh/controller/FhHabitatController.java @@ -71,4 +71,10 @@ public class FhHabitatController { public ResponseResult getStTbYsBVoKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) { return ResponseResult.successData(fhHabitatService.getStTbYsBVoKendoListCust(dataSourceRequest)); } + + @PostMapping("/fhvap/GetKendoListCust") + @Operation(summary = "栖息地/珍稀植物园/动物救助站描点") + public ResponseResult getFhvapKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) { + return ResponseResult.successData(fhHabitatService.getFhvapKendoListCust(dataSourceRequest)); + } } diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fh/entity/vo/FhHaVapVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/fh/entity/vo/FhHaVapVo.java new file mode 100644 index 00000000..9be9c376 --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fh/entity/vo/FhHaVapVo.java @@ -0,0 +1,28 @@ +package com.yfd.platform.qgc_env.fh.entity.vo; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class FhHaVapVo { + private String baseId; + private String baseName; + private String stcd; + private String stnm; + private String sttp; + private String sttpCode; + private String sttpMap; + private String anchoPointState; + private String rstcd; + private String ennm; + private String rvcd; + private String rvcdName; + private BigDecimal lgtd; + private BigDecimal lttd; + private String bldsttCcode; + private BigDecimal dtmel; + private Integer dtin; + private Integer distance; + private String titleName; +} \ No newline at end of file diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fh/service/FhHabitatService.java b/backend/src/main/java/com/yfd/platform/qgc_env/fh/service/FhHabitatService.java index 267ff509..12e188e6 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/fh/service/FhHabitatService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fh/service/FhHabitatService.java @@ -5,6 +5,7 @@ import com.yfd.platform.common.DataSourceResult; import com.yfd.platform.qgc_env.fh.entity.ao.FhDefaultAo; import com.yfd.platform.qgc_env.fh.entity.vo.FhBaseInfoVo; import com.yfd.platform.qgc_env.fh.entity.vo.FhDefaultVo; +import com.yfd.platform.qgc_env.fh.entity.vo.FhHaVapVo; import com.yfd.platform.qgc_env.fh.entity.vo.HabitatVo; public interface FhHabitatService { @@ -24,4 +25,6 @@ public interface FhHabitatService { FhBaseInfoVo getStcdInfo(String stcd); DataSourceResult getStTbYsBVoKendoListCust(DataSourceRequest dataSourceRequest); + + DataSourceResult getFhvapKendoListCust(DataSourceRequest dataSourceRequest); } diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fh/service/impl/FhHabitatServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/fh/service/impl/FhHabitatServiceImpl.java index cef364cf..3cca065f 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/fh/service/impl/FhHabitatServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fh/service/impl/FhHabitatServiceImpl.java @@ -16,11 +16,13 @@ import com.yfd.platform.common.exception.BizException; import com.yfd.platform.qgc_env.fh.entity.ao.FhDefaultAo; import com.yfd.platform.qgc_env.fh.entity.vo.FhBaseInfoVo; import com.yfd.platform.qgc_env.fh.entity.vo.FhDefaultVo; +import com.yfd.platform.qgc_env.fh.entity.vo.FhHaVapVo; import com.yfd.platform.qgc_env.fh.entity.vo.HabitatVo; import com.yfd.platform.qgc_env.fh.entity.vo.FhMsstbprptVo; import com.yfd.platform.qgc_env.fh.entity.vo.FhSdriverdayVo; import com.yfd.platform.qgc_env.fh.entity.vo.FhSdrvwtsVo; import com.yfd.platform.qgc_env.fh.service.FhHabitatService; +import com.yfd.platform.qgc_env.wt.utils.SiteAvoidanceUtils; import com.yfd.platform.qgc_env.wq.entity.vo.StTbYsVo; import com.yfd.platform.utils.QgcQueryWrapperUtil; import jakarta.annotation.Resource; @@ -1920,4 +1922,76 @@ public class FhHabitatServiceImpl implements FhHabitatService { } return sql.toString(); } + + @Override + public DataSourceResult getFhvapKendoListCust(DataSourceRequest dataSourceRequest) { + DataSourceResult dataSourceResult = new DataSourceResult<>(); + dataSourceResult.setAggregates(new HashMap<>()); + + if (dataSourceRequest == null) { + dataSourceResult.setData(new ArrayList<>()); + dataSourceResult.setTotal(0L); + return dataSourceResult; + } + + StringBuilder sql = new StringBuilder(); + sql.append("SELECT ") + .append("t.BASE_ID AS baseId, ") + .append("hb.BASENAME AS baseName, ") + .append("t.STCD AS stcd, ") + .append("t.STNM AS stnm, ") + .append("t.STTP_CODE AS sttp, ") + .append("t.STTP_CODE AS sttpCode, ") + .append("t.STTP_CODE AS sttpMap, ") + .append("t.STTP_CODE AS anchoPointState, ") + .append("t.RSTCD AS rstcd, ") + .append("eng.ENNM AS ennm, ") + .append("NVL(t.HBRVCD, eng.HBRVCD) AS rvcd, ") + .append("t.LGTD AS lgtd, ") + .append("t.LTTD AS lttd, ") + .append("t.BLDSTT_CCODE AS bldsttCcode, ") + .append("t.ELEV AS dtmel, ") + .append("t.DTIN AS dtin ") + .append("FROM ( ") + .append(" SELECT STCD, STNM, 'FH' AS STTP_CODE, RSTCD, BASE_ID, HBRVCD, LGTD, LTTD, BLPRD AS BLDSTT_CCODE, ELEV, DTIN ") + .append(" FROM SD_FHBT_B_H WHERE NVL(IS_DELETED, 0) = 0 AND USFL = 1 ") + .append(" UNION ALL ") + .append(" SELECT STCD, STNM, STTP AS STTP_CODE, RSTCD, BASE_ID, HBRVCD, LGTD, LTTD, BLDSTT_CODE AS BLDSTT_CCODE, ELEV, DTIN ") + .append(" FROM SD_VA_B_H WHERE NVL(IS_DELETED, 0) = 0 AND USFL = 1 ") + .append(" UNION ALL ") + .append(" SELECT STCD, STNM, STTP AS STTP_CODE, RSTCD, BASE_ID, HBRVCD, LGTD, LTTD, BLDSTT_CODE AS BLDSTT_CCODE, ELEV, DTIN ") + .append(" FROM SD_VP_B_H WHERE NVL(IS_DELETED, 0) = 0 AND USFL = 1 ") + .append(") t ") + .append("LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = t.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 ") + .append("LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = NVL(t.BASE_ID, eng.BASE_ID) AND NVL(hb.IS_DELETED, 0) = 0 ") + .append("WHERE t.LGTD IS NOT NULL AND t.LTTD IS NOT NULL "); + + DataSourceLoadOptionsBase loadOptions = dataSourceRequest.toDevRequest(); + Page page = loadOptions == null ? null : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake()); + List vaVpList = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), new HashMap<>(), FhHaVapVo.class); + + for (FhHaVapVo vo : vaVpList) { + String bldsttCcode = vo.getBldsttCcode(); + if (!"2".equals(bldsttCcode)) { + if ("VP".equals(vo.getSttp())) { + vo.setAnchoPointState("VP_INCOMPLETE"); + } else if ("VA".equals(vo.getSttp())) { + vo.setAnchoPointState("VA_INCOMPLETE"); + } + } + vo.setTitleName(vo.getStnm()); + vo.setSttpCode(vo.getSttp()); + } + + SiteAvoidanceUtils.calcSiteMapLev(vaVpList, + FhHaVapVo::getStcd, + FhHaVapVo::getLgtd, + FhHaVapVo::getLttd, + FhHaVapVo::getAnchoPointState, + FhHaVapVo::setDistance); + + dataSourceResult.setData(vaVpList); + dataSourceResult.setTotal(page == null ? vaVpList.size() : page.getTotal()); + return dataSourceResult; + } } diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fp/service/impl/FpRunServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/fp/service/impl/FpRunServiceImpl.java index c81bf512..cdaec94d 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/fp/service/impl/FpRunServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fp/service/impl/FpRunServiceImpl.java @@ -2332,7 +2332,7 @@ public class FpRunServiceImpl implements FpRunService { " FROM ( " + " SELECT STCD, FTP " + " FROM SD_FPRUNPLAN_B " + - " WHERE (TASK_STATUS = 'Approved' OR TASK_STATUS IS NULL) " + + " WHERE 1=1 " + " AND IS_DELETED = 0 " + " AND STCD = #{map.stcd} " + " AND TO_CHAR(START_TIME, 'yyyy') = #{map.yr} " + @@ -2356,7 +2356,7 @@ public class FpRunServiceImpl implements FpRunService { " FROM ( " + " SELECT STCD, TO_CHAR(START_TIME, 'mm') AS stm, TO_CHAR(END_TIME, 'mm') AS edm, PYCNT AS pycnt " + " FROM SD_FPRUNPLAN_B " + - " WHERE (TASK_STATUS = 'Approved' OR TASK_STATUS IS NULL) " + + " WHERE 1=1 " + " AND IS_DELETED = 0 " + " AND STCD = #{map.stcd} " + " AND TO_CHAR(START_TIME, 'yyyy') = #{map.yr} " + @@ -2368,7 +2368,7 @@ public class FpRunServiceImpl implements FpRunService { " AND STCD NOT IN ( " + " SELECT STCD " + " FROM SD_FPRUNPLAN_B " + - " WHERE (TASK_STATUS = 'Approved' OR TASK_STATUS IS NULL) " + + " WHERE 1=1 " + " AND IS_DELETED = 0 " + " AND STCD = #{map.stcd} " + " AND TO_CHAR(START_TIME, 'yyyy') = #{map.yr} " + diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/warn/service/impl/WarnDataServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/warn/service/impl/WarnDataServiceImpl.java index ac9bf4e7..01cd74b5 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/warn/service/impl/WarnDataServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/warn/service/impl/WarnDataServiceImpl.java @@ -523,8 +523,8 @@ public class WarnDataServiceImpl implements WarnDataService { sql.append("LEFT JOIN MS_ALONG_B along ON b.HBRVCD = along.RVCD AND along.CODE = 'common' AND NVL(along.IS_DELETED, 0) = 0 "); sql.append("LEFT JOIN (SELECT det.SORT, cfg.RVCD, det.STCD FROM MS_ALONGDET_B det INNER JOIN MS_ALONG_B cfg ON det.ALONG_ID = cfg.ID WHERE NVL(det.IS_DELETED, 0) = 0 AND NVL(cfg.IS_DELETED, 0) = 0 AND cfg.CODE = 'common') rstSort ON rstSort.RVCD = b.HBRVCD AND rstSort.STCD = b.RSTCD "); sql.append("LEFT JOIN (SELECT det.SORT, cfg.RVCD, det.STCD FROM MS_ALONGDET_B det INNER JOIN MS_ALONG_B cfg ON det.ALONG_ID = cfg.ID WHERE NVL(det.IS_DELETED, 0) = 0 AND NVL(cfg.IS_DELETED, 0) = 0 AND cfg.CODE = 'common') siteSort ON siteSort.RVCD = b.HBRVCD AND siteSort.STCD = b.STCD "); - sql.append("WHERE NVL(a.IS_DELETED, 0) = 0 "); - sql.append("AND (a.TASK_STATUS IS NULL OR a.TASK_STATUS = 'Approved') "); + sql.append("WHERE a.IS_DELETED = 0 "); +// sql.append("AND (a.TASK_STATUS IS NULL OR a.TASK_STATUS = 'Approved') "); sql.append("AND a.FID NOT LIKE '%ORA-%' AND a.FID NOT LIKE '%Out%' "); if (StrUtil.isNotBlank(type)) { diff --git a/backend/src/main/java/com/yfd/platform/system/service/impl/SmsVerifyCodeServiceImpl.java b/backend/src/main/java/com/yfd/platform/system/service/impl/SmsVerifyCodeServiceImpl.java index 20f531d7..de1c5d31 100644 --- a/backend/src/main/java/com/yfd/platform/system/service/impl/SmsVerifyCodeServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/system/service/impl/SmsVerifyCodeServiceImpl.java @@ -17,6 +17,7 @@ import org.springframework.transaction.annotation.Transactional; import java.util.Date; import java.util.List; import java.util.Random; +import java.util.Set; import java.util.regex.Pattern; import java.util.stream.Collectors; @@ -162,7 +163,7 @@ public class SmsVerifyCodeServiceImpl extends ServiceImpl validPhones = sysUsers.stream().map(SysUser::getPhone).filter(this::isValidPhone).toList(); + Set validPhones = sysUsers.stream().map(SysUser::getPhone).filter(this::isValidPhone).collect(Collectors.toSet()); if (validPhones.isEmpty()) { log.warn("催促短信发送失败:没有合规的手机号"); From 275cb5e4549bebdb3fe93792528f7c938f560bf4 Mon Sep 17 00:00:00 2001 From: tangwei Date: Mon, 6 Jul 2026 10:18:43 +0800 Subject: [PATCH 03/26] =?UTF-8?q?feat:=20=E7=94=B5=E7=AB=99=E5=87=BA?= =?UTF-8?q?=E5=85=A5=E5=BA=93=E6=B0=B4=E6=B8=A9=E6=8F=8F=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wt/controller/SdWTMonitorController.java | 6 + .../qgc_env/wt/entity/vo/WaterTempMapVO.java | 104 ++++++++++++++++ .../wt/service/SdWtMonitorService.java | 3 + .../service/impl/SdWtMonitorServiceImpl.java | 114 ++++++++++++++++++ 4 files changed, 227 insertions(+) create mode 100644 backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/WaterTempMapVO.java diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/wt/controller/SdWTMonitorController.java b/backend/src/main/java/com/yfd/platform/qgc_env/wt/controller/SdWTMonitorController.java index 828e4caf..ca3533ee 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/wt/controller/SdWTMonitorController.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wt/controller/SdWTMonitorController.java @@ -327,4 +327,10 @@ public class SdWTMonitorController { public ResponseResult getFacilityPointKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) { return ResponseResult.successData(sdWtMonitorService.getFacilityPointKendoListCust(dataSourceRequest)); } + + @PostMapping("/getEngTempPointList/GetKendoListCust") + @Operation(summary = "电站出入库水温描点") + public ResponseResult getEngTempPointListKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) { + return ResponseResult.successData(sdWtMonitorService.getEngTempPointListKendoListCust(dataSourceRequest)); + } } diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/WaterTempMapVO.java b/backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/WaterTempMapVO.java new file mode 100644 index 00000000..d5808d99 --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wt/entity/vo/WaterTempMapVO.java @@ -0,0 +1,104 @@ +package com.yfd.platform.qgc_env.wt.entity.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +@Data +@Schema(description = "水温监测点描点VO") +public class WaterTempMapVO { + + @Schema(description = "站点编码") + private String stcd; + + @Schema(description = "站名") + private String stnm; + + @Schema(description = "关联电站名称") + private String ennm; + + @Schema(description = "站点类型编码") + private String sttpCode; + + @Schema(description = "数据接入类型:0=自建,1=国家建,2=人工") + private String dtinType; + + @Schema(description = "站点类型") + private String sttp; + + @Schema(description = "锚点类型") + private String sttpMap; + + @Schema(description = "栖息地名称") + private String fhstnm; + + @Schema(description = "是否是垂向水温,0=否 1=是") + private Integer enfc; + + @Schema(description = "所在位置") + private String location; + + @Schema(description = "运行状态") + private String status = "1"; + + @Schema(description = "水温") + private BigDecimal temperature; + + @Schema(description = "日期") + private Date tm; + + @Schema(description = "经度") + private BigDecimal lgtd; + + @Schema(description = "纬度") + private BigDecimal lttd; + + @Schema(description = "高程") + private BigDecimal dtmel; + + @Schema(description = "弹框站点名称") + private String titleName; + + @Schema(description = "监测方式") + private Integer mway; + + @Schema(description = "垂向水温类型:1=浮动式 2=固定式") + private Integer deviceType; + + @Schema(description = "流域编码") + private String rvcd; + + @Schema(description = "行政编码") + private String addvcd; + + @Schema(description = "基地编码") + private String baseId; + + @Schema(description = "关联电站编码") + private String rstcds; + + @Schema(description = "描点状态") + private String anchoPointState; + + @Schema(description = "地图避让") + private Integer distance; + + @Schema(description = "垂向水温站点浮窗数据") + private Object wtvtInfo; + + @Schema(description = "水温值") + private BigDecimal value; + + @Schema(description = "排序") + private Integer orderIndex; + + @Schema(description = "出入库标识 (1 入库水温, 2 出库水温 ,3 非出入库水温)") + private Integer ioType; + + public void setTemperature(BigDecimal temperature) { + this.temperature = temperature; + this.value = temperature; + } +} \ No newline at end of file diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/wt/service/SdWtMonitorService.java b/backend/src/main/java/com/yfd/platform/qgc_env/wt/service/SdWtMonitorService.java index ba092d0a..60398c1e 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/wt/service/SdWtMonitorService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wt/service/SdWtMonitorService.java @@ -14,6 +14,7 @@ import com.yfd.platform.qgc_env.wt.entity.vo.WtrvAmendSaveVo; import com.yfd.platform.qgc_env.wt.entity.vo.WtrvVo; import com.yfd.platform.qgc_env.wt.entity.vo.WtrvAmendResultVo; import com.yfd.platform.qgc_env.wt.entity.vo.DwSlowFacilityMapVO; +import com.yfd.platform.qgc_env.wt.entity.vo.WaterTempMapVO; import java.util.List; @@ -54,4 +55,6 @@ public interface SdWtMonitorService { List getWtvtDefaultTreeStcd(DataSourceRequest dataSourceRequest); DataSourceResult getFacilityPointKendoListCust(DataSourceRequest dataSourceRequest); + + DataSourceResult getEngTempPointListKendoListCust(DataSourceRequest dataSourceRequest); } diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/wt/service/impl/SdWtMonitorServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/wt/service/impl/SdWtMonitorServiceImpl.java index b6ce2afd..87a25b85 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/wt/service/impl/SdWtMonitorServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wt/service/impl/SdWtMonitorServiceImpl.java @@ -21,6 +21,7 @@ import com.yfd.platform.qgc_env.wt.entity.vo.WtrvAmendResultVo; import com.yfd.platform.qgc_env.wt.entity.vo.WtrvAmendSaveVo; import com.yfd.platform.qgc_env.wt.entity.vo.WtrvVo; import com.yfd.platform.qgc_env.wt.entity.vo.DwSlowFacilityMapVO; +import com.yfd.platform.qgc_env.wt.entity.vo.WaterTempMapVO; import com.yfd.platform.qgc_env.wt.mapper.SdWtMonitorMapper; import com.yfd.platform.qgc_env.wt.utils.SiteAvoidanceUtils; import com.yfd.platform.qgc_env.wt.service.SdWtMonitorService; @@ -2921,4 +2922,117 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService { return dataSourceResult; } + @Override + public DataSourceResult getEngTempPointListKendoListCust(DataSourceRequest dataSourceRequest) { + DataSourceResult dataSourceResult = new DataSourceResult<>(); + dataSourceResult.setAggregates(new HashMap<>()); + + if (dataSourceRequest == null) { + dataSourceResult.setData(new ArrayList<>()); + dataSourceResult.setTotal(0L); + return dataSourceResult; + } + + DataSourceLoadOptionsBase loadOptions = dataSourceRequest.toDevRequest(); + String dtinType = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "flag"); + String sttpCode = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "sttpCode"); + String fhFlag = QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "fhFlag"); + + StringBuilder sql = new StringBuilder("SELECT\n" + + " wt.STCD AS stcd,\n" + + " wt.STNM AS stnm,\n" + + " wt.STNM AS titleName,\n" + + " wt.RSTCD AS rstcds,\n" + + " CASE\n" + + " WHEN wt.STTP = 'WTVT' THEN 1\n" + + " ELSE 0\n" + + " END AS enfc,\n" + + " 'WT' AS sttp,\n" + + " wt.STTP AS sttpCode,\n" + + " 'WT' AS sttpMap,\n" + + " wt.LGTD AS lgtd,\n" + + " wt.LTTD AS lttd,\n" + + " wt.WT_DEVICE_TYPE AS deviceType,\n" + + " wt.ELEV AS dtmel,\n" + + " wt.FHSTNM AS fhstnm,\n" + + " wt.MWAY AS mway,\n" + + " eng.RVCD AS rvcd,\n" + + " eng.ADDVCD AS addvcd,\n" + + " eng.BASE_ID AS baseId,\n" + + " eng.ENNM AS ennm,\n" + + " wt.ORDER_INDEX AS orderIndex,\n" + + " wt.DTIN_TYPE AS dtinType,\n" + + " (CASE\n" + + " WHEN wt.STTP = 'WTRV' AND rel.ENG_IWT_CODE IS NOT NULL THEN 1\n" + + " WHEN wt.STTP = 'WTRV' AND rel.ENG_DWT_CODE IS NOT NULL THEN 2\n" + + " WHEN wt.STTP = 'WTRV' AND rel.ENG_IWT_CODE IS NULL AND rel.ENG_DWT_CODE IS NULL THEN 3\n" + + " END) AS ioType\n" + + "FROM SD_WT_B_H wt\n" + + "LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = wt.RSTCD AND NVL(eng.IS_DELETED, 0) = 0\n" + + "LEFT JOIN SD_WTENGRLTN_B rel ON rel.STCD = wt.STCD AND NVL(rel.IS_DELETED, 0) = 0\n" + + "WHERE NVL(wt.IS_DELETED, 0) = 0 AND wt.STTP IN ('WTRV', 'WTVT') AND wt.LGTD IS NOT NULL AND wt.LTTD IS NOT NULL "); + + if (StrUtil.isNotBlank(sttpCode)) { + sql.append(" AND wt.STTP = #{map.sttpCode} "); + } + if (StrUtil.isNotBlank(dtinType)) { + sql.append(" AND wt.DTIN_TYPE = #{map.dtinType} "); + } + + Map paramMap = new HashMap<>(); + if (StrUtil.isNotBlank(sttpCode)) { + paramMap.put("sttpCode", sttpCode); + } + if (StrUtil.isNotBlank(dtinType)) { + paramMap.put("dtinType", dtinType); + } + + List sort = dataSourceRequest.getSort(); + if (sort != null && !sort.isEmpty()) { + sql.append(" ORDER BY "); + for (int i = 0; i < sort.size(); i++) { + String field = sort.get(i).getField(); + String dir = sort.get(i).getDir(); + sql.append(field).append(" ").append(dir); + if (i < sort.size() - 1) { + sql.append(","); + } + } + } else { + sql.append(" ORDER BY wt.ORDER_INDEX ASC "); + } + + Page page = QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake()); + List resultList = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, WaterTempMapVO.class); + + for (WaterTempMapVO vo : resultList) { + if (StrUtil.isNotBlank(fhFlag)) { + vo.setAnchoPointState("fhwt_legend"); + } else if (StrUtil.isNotBlank(dtinType)) { + if ("0".equals(dtinType)) { + vo.setAnchoPointState("stinfo_wtzj_legend"); + } else if ("2".equals(dtinType)) { + vo.setAnchoPointState("stinfo_wtrg_legend"); + } + } else { + if (vo.getMway() != null && vo.getMway() == 1) { + vo.setAnchoPointState("WT_1"); + } else if (vo.getMway() != null && vo.getMway() == 2) { + vo.setAnchoPointState("WT_2"); + } + } + } + + SiteAvoidanceUtils.calcSiteMapLev(resultList, + WaterTempMapVO::getStcd, + WaterTempMapVO::getLgtd, + WaterTempMapVO::getLttd, + WaterTempMapVO::getAnchoPointState, + WaterTempMapVO::setDistance); + + dataSourceResult.setData(resultList); + dataSourceResult.setTotal(page == null ? resultList.size() : page.getTotal()); + return dataSourceResult; + } + } From aa71489035d4b59b9b0c8eb24c8cead38e700751 Mon Sep 17 00:00:00 2001 From: tangwei Date: Mon, 6 Jul 2026 10:34:48 +0800 Subject: [PATCH 04/26] =?UTF-8?q?feat:=20=E6=B5=81=E9=87=8F=E7=AB=99?= =?UTF-8?q?=E9=94=9A=E7=82=B9=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../zq/controller/ZqMonitorController.java | 6 ++ .../qgc_env/zq/entity/vo/ZqPoint.java | 93 +++++++++++++++++++ .../qgc_env/zq/service/ZqMonitorService.java | 3 + .../zq/service/impl/ZqMonitorServiceImpl.java | 76 +++++++++++++++ 4 files changed, 178 insertions(+) create mode 100644 backend/src/main/java/com/yfd/platform/qgc_env/zq/entity/vo/ZqPoint.java diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/zq/controller/ZqMonitorController.java b/backend/src/main/java/com/yfd/platform/qgc_env/zq/controller/ZqMonitorController.java index 7629326f..6f166ed8 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/zq/controller/ZqMonitorController.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/zq/controller/ZqMonitorController.java @@ -82,4 +82,10 @@ public class ZqMonitorController { public ResponseResult getStcdInfo(@RequestParam String stcd) { return ResponseResult.successData(zqMonitorService.getStcdInfo(stcd)); } + + @PostMapping("/zqpoint/GetKendoListCust") + @Operation(summary = "流量站锚点接口") + public ResponseResult getZqPointKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) { + return ResponseResult.successData(zqMonitorService.getZqPointKendoListCust(dataSourceRequest)); + } } diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/zq/entity/vo/ZqPoint.java b/backend/src/main/java/com/yfd/platform/qgc_env/zq/entity/vo/ZqPoint.java new file mode 100644 index 00000000..1ebb5502 --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_env/zq/entity/vo/ZqPoint.java @@ -0,0 +1,93 @@ +package com.yfd.platform.qgc_env.zq.entity.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +@Data +@Schema(description = "流量站锚点VO") +public class ZqPoint { + + @Schema(description = "站点编码") + private String stcd; + + @Schema(description = "站名") + private String stnm; + + @Schema(description = "流域名称") + private String rvnm; + + @Schema(description = "关联电站名称") + private String ennm; + + @Schema(description = "栖息地编码") + private String fhstcd; + + @Schema(description = "栖息地名称") + private String fhstnm; + + @Schema(description = "站点类型名称") + private String sttpName; + + @Schema(description = "日期") + private Date tm; + + @Schema(description = "水位") + private BigDecimal z; + + @Schema(description = "流量") + private BigDecimal q; + + @Schema(description = "流速") + private BigDecimal v; + + @Schema(description = "数据接入类型") + private String dtinType; + + @Schema(description = "站点排序") + private Integer siteStepSort; + + @Schema(description = "站点类型编码") + private String sttpCode; + + @Schema(description = "站点类型") + private String sttp; + + @Schema(description = "锚点类型") + private String sttpMap; + + @Schema(description = "经度") + private BigDecimal lgtd; + + @Schema(description = "纬度") + private BigDecimal lttd; + + @Schema(description = "高程") + private BigDecimal dtmel; + + @Schema(description = "描点状态") + private String anchoPointState; + + @Schema(description = "弹框站点名称") + private String titleName; + + @Schema(description = "流域编码") + private String rvcd; + + @Schema(description = "行政编码") + private String addvcd; + + @Schema(description = "基地编码") + private String baseId; + + @Schema(description = "关联电站编码") + private String rstcds; + + @Schema(description = "地图避让") + private Integer distance; + + @Schema(description = "站址") + private String stlc; +} \ No newline at end of file diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/zq/service/ZqMonitorService.java b/backend/src/main/java/com/yfd/platform/qgc_env/zq/service/ZqMonitorService.java index f2468d65..f7fc85cb 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/zq/service/ZqMonitorService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/zq/service/ZqMonitorService.java @@ -4,6 +4,7 @@ import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.common.DataSourceResult; import com.yfd.platform.qgc_base.entity.vo.BatchDeleteAo; import com.yfd.platform.qgc_env.zq.entity.vo.ZqBaseInfoVo; +import com.yfd.platform.qgc_env.zq.entity.vo.ZqPoint; import com.yfd.platform.qgc_env.zq.entity.vo.ZqRiverDayDataVo; import com.yfd.platform.qgc_env.zq.entity.vo.ZqRiverDrtpDataVo; import com.yfd.platform.qgc_env.zq.entity.vo.ZqRiverDataVo; @@ -25,4 +26,6 @@ public interface ZqMonitorService { boolean updateRiverRData(java.util.Map updateData, String source); ZqBaseInfoVo getStcdInfo(String stcd); + + DataSourceResult getZqPointKendoListCust(DataSourceRequest dataSourceRequest); } 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 a573ce04..e5f8e482 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 @@ -18,9 +18,11 @@ import com.yfd.platform.qgc_base.mapper.MsOperationLogDetailMapper; import com.yfd.platform.qgc_base.mapper.MsOperationLogMapper; import com.yfd.platform.qgc_env.fh.entity.vo.HabitatVo; import com.yfd.platform.qgc_env.zq.entity.vo.ZqBaseInfoVo; +import com.yfd.platform.qgc_env.zq.entity.vo.ZqPoint; import com.yfd.platform.qgc_env.zq.entity.vo.ZqRiverDayDataVo; 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.utils.QgcQueryWrapperUtil; import com.yfd.platform.utils.SecurityUtils; @@ -2370,4 +2372,78 @@ public class ZqMonitorServiceImpl implements ZqMonitorService { } return " ORDER BY " + String.join(", ", orderColumns); } + + @Override + public DataSourceResult getZqPointKendoListCust(DataSourceRequest dataSourceRequest) { + DataSourceResult dataSourceResult = new DataSourceResult<>(); + dataSourceResult.setAggregates(new HashMap<>()); + + if (dataSourceRequest == null) { + dataSourceResult.setData(new ArrayList<>()); + dataSourceResult.setTotal(0L); + return dataSourceResult; + } + + StringBuilder sql = new StringBuilder("SELECT\n" + + " rb.STCD AS stcd,\n" + + " rb.STNM AS stnm,\n" + + " rb.STNM AS titleName,\n" + + " rb.RSTCD AS rstcds,\n" + + " CASE\n" + + " WHEN rb.DTIN_TYPE = 0 THEN 'zjllz'\n" + + " WHEN rb.DTIN_TYPE = 1 THEN 'gjllz'\n" + + " ELSE ''\n" + + " END AS anchoPointState,\n" + + " 'ZQ' AS sttpMap,\n" + + " rb.STTP AS sttp,\n" + + " rb.STTP AS sttpCode,\n" + + " rb.LGTD AS lgtd,\n" + + " rb.LTTD AS lttd,\n" + + " rb.ELEV AS dtmel,\n" + + " rb.STLC AS stlc,\n" + + " eng.RVCD AS rvcd,\n" + + " eng.ADDVCD AS addvcd,\n" + + " rv.RVNM AS rvnm,\n" + + " eng.BASE_ID AS baseId,\n" + + " eng.ENNM AS ennm,\n" + + " rb.FHSTCD AS fhstcd,\n" + + " fh.STNM AS fhstnm,\n" + + " rb.DTIN_TYPE AS dtinType,\n" + + " NVL(siteSort.SORT, 999999) AS siteStepSort\n" + + "FROM SD_RIVER_B_H rb\n" + + "LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = rb.RSTCD AND NVL(eng.IS_DELETED, 0) = 0\n" + + "LEFT JOIN SD_RVCD_DIC rv ON rv.RVCD = eng.RVCD\n" + + "LEFT JOIN SD_RIVER_B_H fh ON fh.STCD = rb.FHSTCD AND NVL(fh.IS_DELETED, 0) = 0\n" + + "LEFT JOIN (\n" + + " SELECT det.SORT, cfg.RVCD, det.STCD\n" + + " FROM MS_ALONGDET_B det\n" + + " INNER JOIN MS_ALONG_B cfg ON det.ALONG_ID = cfg.ID\n" + + " WHERE NVL(det.IS_DELETED, 0) = 0 AND NVL(cfg.IS_DELETED, 0) = 0 AND cfg.CODE = 'common'\n" + + ") siteSort ON siteSort.RVCD = eng.HBRVCD AND siteSort.STCD = rb.STCD\n" + + "WHERE NVL(rb.IS_DELETED, 0) = 0 AND rb.STTP = 'ZQ' AND rb.LGTD IS NOT NULL AND rb.LTTD IS NOT NULL "); + + Map paramMap = new HashMap<>(); + + DataSourceLoadOptionsBase loadOptions = dataSourceRequest.toDevRequest(); + String filterSql = buildMsstbprptFilterCondition(loadOptions.getFilter(), paramMap, new int[]{0}); + if (StrUtil.isNotBlank(filterSql)) { + sql.append(" AND ").append(filterSql).append(" "); + } + + sql.append(" ORDER BY siteStepSort ASC "); + + Page page = QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake()); + List resultList = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, ZqPoint.class); + + SiteAvoidanceUtils.calcSiteMapLev(resultList, + ZqPoint::getStcd, + ZqPoint::getLgtd, + ZqPoint::getLttd, + ZqPoint::getAnchoPointState, + ZqPoint::setDistance); + + dataSourceResult.setData(resultList); + dataSourceResult.setTotal(page == null ? resultList.size() : page.getTotal()); + return dataSourceResult; + } } From c056d30682d0261d2a8ef67a8f6598efddbadb08 Mon Sep 17 00:00:00 2001 From: tangwei Date: Mon, 6 Jul 2026 10:49:40 +0800 Subject: [PATCH 05/26] =?UTF-8?q?feat:=20=E8=BF=87=E9=B1=BC=E8=AE=BE?= =?UTF-8?q?=E6=96=BD=E5=9C=B0=E5=9B=BE=E6=8F=8F=E7=82=B9=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?(=E4=BB=85=E6=9F=A5=E8=AF=A2=E5=9C=A8=E5=BB=BA=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E7=9A=84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fp/controller/FishPassageController.java | 8 +- .../qgc_env/fp/entity/vo/FpAnchoPointVo.java | 89 +++++++++ .../qgc_env/fp/service/FpBuildService.java | 3 + .../fp/service/impl/FpBuildServiceImpl.java | 175 ++++++++++++++++++ .../zq/service/impl/ZqMonitorServiceImpl.java | 2 +- 5 files changed, 272 insertions(+), 5 deletions(-) create mode 100644 backend/src/main/java/com/yfd/platform/qgc_env/fp/entity/vo/FpAnchoPointVo.java diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fp/controller/FishPassageController.java b/backend/src/main/java/com/yfd/platform/qgc_env/fp/controller/FishPassageController.java index 25fb7bb6..7ed024a6 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/fp/controller/FishPassageController.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fp/controller/FishPassageController.java @@ -106,9 +106,9 @@ public class FishPassageController { return ResponseResult.successData(fpBuildService.getStInfoByStcd(stcd)); } - @GetMapping("/run/qgc/year/GetYearFpStatistics") - @Operation(summary = "全过程过鱼统计总数,根据基地分组") - public ResponseResult getYearFpStatic(@RequestParam("year") String year) { - return ResponseResult.successData(fpRunService.getYearFpStatic(year)); + @PostMapping("/point/built/GetKendoListCust") + @Operation(summary = "过鱼设施地图描点接口(仅查询在建状态的)") + public ResponseResult getFpBuiltPointKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) { + return ResponseResult.successData(fpBuildService.getFpBuiltPointKendoListCust(dataSourceRequest)); } } diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fp/entity/vo/FpAnchoPointVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/fp/entity/vo/FpAnchoPointVo.java new file mode 100644 index 00000000..f803e21c --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fp/entity/vo/FpAnchoPointVo.java @@ -0,0 +1,89 @@ +package com.yfd.platform.qgc_env.fp.entity.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.math.BigDecimal; + +@Data +@Schema(description = "过鱼设施锚点VO") +public class FpAnchoPointVo { + + @Schema(description = "站点编码") + private String stcd; + + @Schema(description = "站名") + private String stnm; + + @Schema(description = "弹框站点名称") + private String titleName; + + @Schema(description = "建设状态编码") + private String bldsttCcode; + + @Schema(description = "建设状态") + private String bldstt; + + @Schema(description = "纬度") + private BigDecimal lttd; + + @Schema(description = "经度") + private BigDecimal lgtd; + + @Schema(description = "高程") + private BigDecimal dtmel; + + @Schema(description = "关联电站编码") + private String rstcds; + + @Schema(description = "电站名称") + private String ennm; + + @Schema(description = "站点类型编码") + private String sttpCode; + + @Schema(description = "运行状态") + private String run; + + @Schema(description = "设施类型") + private String dwtp; + + @Schema(description = "设施类型名称") + private String dwtpName; + + @Schema(description = "锚点类型") + private String sttpMap; + + @Schema(description = "流域编码") + private String rvcd; + + @Schema(description = "行政编码") + private String addvcd; + + @Schema(description = "基地编码") + private String baseId; + + @Schema(description = "站点类型") + private String sttp; + + @Schema(description = "描点状态") + private String anchoPointState; + + @Schema(description = "监测方式") + private Integer mway; + + @Schema(description = "数据接入") + private Integer dtin; + + @Schema(description = "达标状态子类型") + private Integer stdSstate; + + @Schema(description = "地图避让") + private Integer distance; + + @Schema(description = "过鱼种类") + private Integer ftpTypeCount; + + @Schema(description = "过鱼数量") + private Integer ftpCount; +} \ No newline at end of file diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fp/service/FpBuildService.java b/backend/src/main/java/com/yfd/platform/qgc_env/fp/service/FpBuildService.java index 56b2fadb..67e8973d 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/fp/service/FpBuildService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fp/service/FpBuildService.java @@ -2,6 +2,7 @@ package com.yfd.platform.qgc_env.fp.service; import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.common.DataSourceResult; +import com.yfd.platform.qgc_env.fp.entity.vo.FpAnchoPointVo; import com.yfd.platform.qgc_env.fp.entity.vo.FpConstructionSituationVo; import com.yfd.platform.qgc_env.fp.entity.vo.FpFishDicVo; import com.yfd.platform.qgc_env.fp.entity.vo.FpVmsstbprptVo; @@ -19,4 +20,6 @@ public interface FpBuildService { DataSourceResult getFpqMsstbprptList(DataSourceRequest dataSourceRequest); FpVmsstbprptVo getStInfoByStcd(String stcd); + + DataSourceResult getFpBuiltPointKendoListCust(DataSourceRequest dataSourceRequest); } diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fp/service/impl/FpBuildServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/fp/service/impl/FpBuildServiceImpl.java index 4e504346..653cf89d 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/fp/service/impl/FpBuildServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fp/service/impl/FpBuildServiceImpl.java @@ -11,9 +11,11 @@ import com.yfd.platform.common.GroupingInfo; import com.yfd.platform.common.MicroservicDynamicSQLMapper; import com.yfd.platform.common.PageInfo; import com.yfd.platform.common.exception.BizException; +import com.yfd.platform.qgc_env.fp.entity.vo.FpAnchoPointVo; import com.yfd.platform.qgc_env.fp.entity.vo.FpConstructionSituationVo; import com.yfd.platform.qgc_env.fp.entity.vo.FpFishDicVo; import com.yfd.platform.qgc_env.fp.entity.vo.FpVmsstbprptVo; +import com.yfd.platform.qgc_env.wt.utils.SiteAvoidanceUtils; import com.yfd.platform.qgc_env.fp.service.FpBuildService; import com.yfd.platform.utils.QgcQueryWrapperUtil; import jakarta.annotation.Resource; @@ -1142,4 +1144,177 @@ public class FpBuildServiceImpl implements FpBuildService { default -> null; }; } + + @Override + public DataSourceResult getFpBuiltPointKendoListCust(DataSourceRequest dataSourceRequest) { + DataSourceResult dataSourceResult = new DataSourceResult<>(); + dataSourceResult.setAggregates(new HashMap<>()); + + if (dataSourceRequest == null) { + dataSourceResult.setData(new ArrayList<>()); + dataSourceResult.setTotal(0L); + return dataSourceResult; + } + + StringBuilder sql = new StringBuilder("SELECT\n" + + " fp.STCD AS stcd,\n" + + " fp.STNM AS stnm,\n" + + " fp.STNM AS titleName,\n" + + " fp.BLDSTT_CODE AS bldsttCcode,\n" + + " fp.BLDSTT_CODE AS bldstt,\n" + + " fp.LTTD AS lttd,\n" + + " fp.LGTD AS lgtd,\n" + + " fp.ELEV AS dtmel,\n" + + " fp.RSTCD AS rstcds,\n" + + " eng.ENNM AS ennm,\n" + + " 'FP' AS sttpCode,\n" + + " fp.STTP AS dwtp,\n" + + " CASE\n" + + " WHEN fp.STTP = 'FP_1' THEN '鱼道'\n" + + " WHEN fp.STTP = 'FP_2' THEN '仿自然通道'\n" + + " WHEN fp.STTP = 'FP_3' THEN '集运鱼系统'\n" + + " WHEN fp.STTP = 'FP_4' THEN '升鱼机'\n" + + " ELSE '其它'\n" + + " END AS dwtpName,\n" + + " fp.STTP AS sttpMap,\n" + + " eng.RVCD AS rvcd,\n" + + " eng.ADDVCD AS addvcd,\n" + + " eng.BASE_ID AS baseId,\n" + + " fp.STTP AS sttp,\n" + + " fp.MWAY AS mway,\n" + + " fp.DTIN AS dtin\n" + + "FROM SD_FPSS_B_H fp\n" + + "LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = fp.RSTCD AND NVL(eng.IS_DELETED, 0) = 0\n" + + "WHERE NVL(fp.IS_DELETED, 0) = 0 AND fp.BLDSTT_CODE = 1 AND fp.LGTD IS NOT NULL AND fp.LTTD IS NOT NULL "); + + Map paramMap = new HashMap<>(); + + DataSourceLoadOptionsBase loadOptions = dataSourceRequest.toDevRequest(); + String filterSql = buildFpPointFilterCondition(loadOptions.getFilter(), paramMap, new int[]{0}); + if (StrUtil.isNotBlank(filterSql)) { + sql.append(" AND ").append(filterSql).append(" "); + } + + sql.append(" ORDER BY fp.ORDER_INDEX ASC "); + + Page page = QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake()); + List resultList = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, FpAnchoPointVo.class); + + for (FpAnchoPointVo vo : resultList) { + String sttp = vo.getSttp(); + if ("FP_1".equals(sttp)) { + vo.setAnchoPointState("GY_1_BUILT"); + } else if ("FP_2".equals(sttp)) { + vo.setAnchoPointState("GY_2_BUILT"); + } else if ("FP_3".equals(sttp)) { + vo.setAnchoPointState("GY_3_BUILT"); + } else if ("FP_4".equals(sttp)) { + vo.setAnchoPointState("GY_4_BUILT"); + } else { + vo.setAnchoPointState("GY_5_BUILT"); + } + } + + SiteAvoidanceUtils.calcSiteMapLev(resultList, + FpAnchoPointVo::getStcd, + FpAnchoPointVo::getLgtd, + FpAnchoPointVo::getLttd, + FpAnchoPointVo::getAnchoPointState, + FpAnchoPointVo::setDistance); + + dataSourceResult.setData(resultList); + dataSourceResult.setTotal(page == null ? resultList.size() : page.getTotal()); + return dataSourceResult; + } + + private String buildFpPointFilterCondition(DataSourceRequest.FilterDescriptor filter, + Map paramMap, + int[] indexHolder) { + if (filter == null) { + return ""; + } + if (filter.getField() != null && !filter.getField().isBlank()) { + return buildFpPointLeafCondition(filter, paramMap, indexHolder); + } + if (CollectionUtils.isEmpty(filter.getFilters())) { + return ""; + } + List conditions = new ArrayList<>(); + for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) { + String childSql = buildFpPointFilterCondition(child, paramMap, indexHolder); + if (!childSql.isBlank()) { + conditions.add("(" + childSql + ")"); + } + } + if (conditions.isEmpty()) { + return ""; + } + String logic = "or".equalsIgnoreCase(filter.getLogic()) ? " OR " : " AND "; + return String.join(logic, conditions); + } + + private String buildFpPointLeafCondition(DataSourceRequest.FilterDescriptor filter, + Map paramMap, + int[] indexHolder) { + String field = filter.getField(); + if (field == null || field.isBlank()) { + return ""; + } + String column = switch (field) { + case "stcd" -> "fp.STCD"; + case "stnm" -> "fp.STNM"; + case "baseId" -> "eng.BASE_ID"; + case "rvcd" -> "eng.RVCD"; + case "addvcd" -> "eng.ADDVCD"; + case "sttp" -> "fp.STTP"; + default -> null; + }; + if (column == null) { + return ""; + } + String operator = filter.getOperator() == null ? "eq" : filter.getOperator().toLowerCase(); + Object value = filter.getValue(); + if ("isnull".equals(operator)) { + return column + " IS NULL"; + } + if ("isnotnull".equals(operator)) { + return column + " IS NOT NULL"; + } + if ("in".equals(operator)) { + List values = normalizeValues(value); + if (values.isEmpty()) { + return ""; + } + List placeholders = new ArrayList<>(); + for (Object item : values) { + String paramKey = "fpPointParam" + indexHolder[0]++; + paramMap.put(paramKey, item); + placeholders.add("#{map." + paramKey + "}"); + } + return column + " IN (" + String.join(", ", placeholders) + ")"; + } + if (value == null) { + return ""; + } + String paramKey = "fpPointParam" + indexHolder[0]++; + switch (operator) { + case "eq": + paramMap.put(paramKey, value); + return column + " = #{map." + paramKey + "}"; + case "neq": + paramMap.put(paramKey, value); + return column + " <> #{map." + paramKey + "}"; + case "contains": + paramMap.put(paramKey, "%" + value + "%"); + return column + " LIKE #{map." + paramKey + "}"; + case "startswith": + paramMap.put(paramKey, value + "%"); + return column + " LIKE #{map." + paramKey + "}"; + case "endswith": + paramMap.put(paramKey, "%" + value); + return column + " LIKE #{map." + paramKey + "}"; + default: + return ""; + } + } } 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 e5f8e482..6263bed7 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 @@ -2425,7 +2425,7 @@ public class ZqMonitorServiceImpl implements ZqMonitorService { Map paramMap = new HashMap<>(); DataSourceLoadOptionsBase loadOptions = dataSourceRequest.toDevRequest(); - String filterSql = buildMsstbprptFilterCondition(loadOptions.getFilter(), paramMap, new int[]{0}); + String filterSql = buildMsstbprptFilterCondition(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), paramMap, new int[]{0}); if (StrUtil.isNotBlank(filterSql)) { sql.append(" AND ").append(filterSql).append(" "); } From d6ab49711aa0e08cc2c7a671a3faece84f616369 Mon Sep 17 00:00:00 2001 From: tangwei Date: Mon, 6 Jul 2026 11:12:30 +0800 Subject: [PATCH 06/26] =?UTF-8?q?feat:=20=E5=85=A8=E8=BF=87=E7=A8=8B?= =?UTF-8?q?=E8=BF=87=E9=B1=BC=E7=BB=9F=E8=AE=A1=E6=80=BB=E6=95=B0=EF=BC=8C?= =?UTF-8?q?=E6=A0=B9=E6=8D=AE=E5=9F=BA=E5=9C=B0=E5=88=86=E7=BB=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../qgc_env/fp/controller/FishPassageController.java | 6 ++++++ .../qgc_env/fp/service/impl/FpBuildServiceImpl.java | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fp/controller/FishPassageController.java b/backend/src/main/java/com/yfd/platform/qgc_env/fp/controller/FishPassageController.java index 7ed024a6..21dedacf 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/fp/controller/FishPassageController.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fp/controller/FishPassageController.java @@ -111,4 +111,10 @@ public class FishPassageController { public ResponseResult getFpBuiltPointKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) { return ResponseResult.successData(fpBuildService.getFpBuiltPointKendoListCust(dataSourceRequest)); } + + @GetMapping("/run/qgc/year/GetYearFpStatistics") + @Operation(summary = "全过程过鱼统计总数,根据基地分组") + public ResponseResult getYearFpStatic(@RequestParam("year") String year) { + return ResponseResult.successData(fpRunService.getYearFpStatic(year)); + } } diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fp/service/impl/FpBuildServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/fp/service/impl/FpBuildServiceImpl.java index 653cf89d..b96d8ef3 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/fp/service/impl/FpBuildServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fp/service/impl/FpBuildServiceImpl.java @@ -1190,7 +1190,7 @@ public class FpBuildServiceImpl implements FpBuildService { Map paramMap = new HashMap<>(); DataSourceLoadOptionsBase loadOptions = dataSourceRequest.toDevRequest(); - String filterSql = buildFpPointFilterCondition(loadOptions.getFilter(), paramMap, new int[]{0}); + String filterSql = buildFpPointFilterCondition(dataSourceRequest.getFilter(), paramMap, new int[]{0}); if (StrUtil.isNotBlank(filterSql)) { sql.append(" AND ").append(filterSql).append(" "); } From fdaba51634eed3f9fdc335ab050419332881ff9a Mon Sep 17 00:00:00 2001 From: tangwei Date: Mon, 6 Jul 2026 11:36:11 +0800 Subject: [PATCH 07/26] =?UTF-8?q?feat:=20=E6=A0=96=E6=81=AF=E5=9C=B0/?= =?UTF-8?q?=E7=8F=8D=E7=A8=80=E6=A4=8D=E7=89=A9=E5=9B=AD/=E5=8A=A8?= =?UTF-8?q?=E7=89=A9=E6=95=91=E5=8A=A9=E7=AB=99=E6=8F=8F=E7=82=B9=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3(=E4=BB=85=E6=9F=A5=E8=AF=A2=E5=9C=A8=E5=BB=BA?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E7=9A=84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/VapConstructionController.java | 6 + .../vap/entity/vo/FhvapBuiltPointVo.java | 57 +++++ .../vap/service/VpConstructionService.java | 3 + .../impl/VpConstructionServiceImpl.java | 216 ++++++++++++++++++ 4 files changed, 282 insertions(+) create mode 100644 backend/src/main/java/com/yfd/platform/qgc_env/vap/entity/vo/FhvapBuiltPointVo.java diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/vap/controller/VapConstructionController.java b/backend/src/main/java/com/yfd/platform/qgc_env/vap/controller/VapConstructionController.java index ef34b630..cf534c58 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/vap/controller/VapConstructionController.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/vap/controller/VapConstructionController.java @@ -76,4 +76,10 @@ public class VapConstructionController { public ResponseResult getVprYearKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) { return ResponseResult.successData(vpConstructionService.getVprYearList(dataSourceRequest)); } + + @PostMapping("/fhvap/built/GetKendoListCust") + @Operation(summary = "栖息地/珍稀植物园/动物救助站描点接口(仅查询在建状态的)") + public ResponseResult getFhvapBuiltPointKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) { + return ResponseResult.successData(vpConstructionService.getFhvapBuiltPointKendoListCust(dataSourceRequest)); + } } diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/vap/entity/vo/FhvapBuiltPointVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/vap/entity/vo/FhvapBuiltPointVo.java new file mode 100644 index 00000000..f71df8e4 --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_env/vap/entity/vo/FhvapBuiltPointVo.java @@ -0,0 +1,57 @@ +package com.yfd.platform.qgc_env.vap.entity.vo; + +import lombok.Data; + +@Data +public class FhvapBuiltPointVo { + + private String stcd; + + private String stnm; + + private String titleName; + + private String bldsttCcode; + + private String bldstt; + + private Double lttd; + + private Double lgtd; + + private Double dtmel; + + private String rstcds; + + private String ennm; + + private String sttpCode; + + private String dwtp; + + private String dwtpName; + + private String sttpMap; + + private String rvcd; + + private String addvcd; + + private String baseId; + + private String sttp; + + private String anchoPointState; + + private String mway; + + private Integer dtin; + + private String stdSstate; + + private Integer distance; + + private Integer ftpTypeCount; + + private Integer ftpCount; +} \ No newline at end of file diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/vap/service/VpConstructionService.java b/backend/src/main/java/com/yfd/platform/qgc_env/vap/service/VpConstructionService.java index 0a362f81..44fd2569 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/vap/service/VpConstructionService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/vap/service/VpConstructionService.java @@ -2,6 +2,7 @@ package com.yfd.platform.qgc_env.vap.service; import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.common.DataSourceResult; +import com.yfd.platform.qgc_env.vap.entity.vo.FhvapBuiltPointVo; import com.yfd.platform.qgc_env.vap.entity.vo.VpBasinIntDetailVo; import com.yfd.platform.qgc_env.vap.entity.vo.VpVarVo; import com.yfd.platform.qgc_env.vap.entity.vo.VpStInfoResultVo; @@ -27,4 +28,6 @@ public interface VpConstructionService { DataSourceResult getVarYearList(DataSourceRequest dataSourceRequest); DataSourceResult getVprYearList(DataSourceRequest dataSourceRequest); + + DataSourceResult getFhvapBuiltPointKendoListCust(DataSourceRequest dataSourceRequest); } diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/vap/service/impl/VpConstructionServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/vap/service/impl/VpConstructionServiceImpl.java index e0bc4ccf..7b0727c4 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/vap/service/impl/VpConstructionServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/vap/service/impl/VpConstructionServiceImpl.java @@ -9,6 +9,7 @@ import com.yfd.platform.common.GroupHelper; import com.yfd.platform.common.GroupingInfo; import com.yfd.platform.common.MicroservicDynamicSQLMapper; import com.yfd.platform.common.PageInfo; +import com.yfd.platform.qgc_env.vap.entity.vo.FhvapBuiltPointVo; import com.yfd.platform.qgc_env.vap.entity.vo.VpBasinIntDetailVo; import com.yfd.platform.qgc_env.vap.entity.vo.VpConstructionSituationVo; import com.yfd.platform.qgc_env.vap.entity.vo.VpVarVo; @@ -1908,4 +1909,219 @@ public class VpConstructionServiceImpl implements VpConstructionService { dataSourceResult.setTotal(page != null ? page.getTotal() : (long) yList.size()); return dataSourceResult; } + + @Override + public DataSourceResult getFhvapBuiltPointKendoListCust(DataSourceRequest dataSourceRequest) { + DataSourceResult dataSourceResult = new DataSourceResult<>(); + dataSourceResult.setAggregates(new HashMap<>()); + + if (dataSourceRequest == null) { + dataSourceResult.setData(new ArrayList<>()); + dataSourceResult.setTotal(0L); + return dataSourceResult; + } + + StringBuilder sql = new StringBuilder("SELECT\n" + + " t.STCD AS stcd,\n" + + " t.STNM AS stnm,\n" + + " t.STNM AS titleName,\n" + + " TO_CHAR(t.BLDSTT_CODE) AS bldsttCcode,\n" + + " TO_CHAR(t.BLDSTT_CODE) AS bldstt,\n" + + " t.LTTD AS lttd,\n" + + " t.LGTD AS lgtd,\n" + + " t.ELEV AS dtmel,\n" + + " t.RSTCD AS rstcds,\n" + + " eng.ENNM AS ennm,\n" + + " t.STTP AS sttpCode,\n" + + " t.STTP AS dwtp,\n" + + " CASE\n" + + " WHEN t.STTP = 'VP' THEN '珍稀植物园'\n" + + " WHEN t.STTP = 'VA' THEN '动物救助站'\n" + + " WHEN t.STTP = 'FH' THEN '栖息地'\n" + + " ELSE '其它'\n" + + " END AS dwtpName,\n" + + " t.STTP AS sttpMap,\n" + + " t.RVCD AS rvcd,\n" + + " t.ADDVCD AS addvcd,\n" + + " t.BASE_ID AS baseId,\n" + + " t.STTP AS sttp,\n" + + " t.DTIN AS dtin\n" + + "FROM (\n" + + " SELECT STCD, STNM, STTP, LGTD, LTTD, ELEV, RSTCD, BASE_ID, RVCD, ADDVCD, BLDSTT_CODE, DTIN\n" + + " FROM SD_VP_B_H\n" + + " WHERE NVL(IS_DELETED, 0) = 0 AND BLDSTT_CODE = 1 AND LGTD IS NOT NULL AND LTTD IS NOT NULL\n" + + " UNION ALL\n" + + " SELECT STCD, STNM, STTP, LGTD, LTTD, ELEV, RSTCD, BASE_ID, NULL AS RVCD, NULL AS ADDVCD, BLDSTT_CODE, DTIN\n" + + " FROM SD_VA_B_H\n" + + " WHERE NVL(IS_DELETED, 0) = 0 AND BLDSTT_CODE = 1 AND LGTD IS NOT NULL AND LTTD IS NOT NULL\n" + + " UNION ALL\n" + + " SELECT STCD, STNM, 'FH' AS STTP, LGTD, LTTD, ELEV, RSTCD, BASE_ID, RVCD, ADDVCD, 1 AS BLDSTT_CODE, DTIN\n" + + " FROM SD_FHBT_B_H\n" + + " WHERE NVL(IS_DELETED, 0) = 0 AND LGTD IS NOT NULL AND LTTD IS NOT NULL\n" + + ") t\n" + + "LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = t.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 "); + + Map paramMap = new HashMap<>(); + String filterSql = buildFhvapPointFilterCondition(dataSourceRequest.getFilter(), paramMap, new int[]{0}); + if (StrUtil.isNotBlank(filterSql)) { + sql.append(" AND ").append(filterSql); + } + + sql.append(buildFhvapPointOrderBySql(dataSourceRequest.getSort())); + + Page page = KendoUtil.getPage(dataSourceRequest); + List resultList = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, FhvapBuiltPointVo.class); + + for (FhvapBuiltPointVo vo : resultList) { + String sttp = vo.getSttp(); + if ("VP".equals(sttp)) { + vo.setAnchoPointState("GY_1_BUILT"); + } else if ("VA".equals(sttp)) { + vo.setAnchoPointState("GY_2_BUILT"); + } else if ("FH".equals(sttp)) { + vo.setAnchoPointState("GY_3_BUILT"); + } else { + vo.setAnchoPointState("GY_4_BUILT"); + } + } + + dataSourceResult.setData(resultList); + dataSourceResult.setTotal(page == null ? resultList.size() : page.getTotal()); + return dataSourceResult; + } + + private String buildFhvapPointFilterCondition(DataSourceRequest.FilterDescriptor filter, + Map paramMap, + int[] indexHolder) { + if (filter == null) { + return ""; + } + if (StrUtil.isNotBlank(filter.getField())) { + return buildFhvapPointLeafCondition(filter, paramMap, indexHolder); + } + if (CollectionUtils.isEmpty(filter.getFilters())) { + return ""; + } + List conditions = new ArrayList<>(); + for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) { + String childSql = buildFhvapPointFilterCondition(child, paramMap, indexHolder); + if (StrUtil.isNotBlank(childSql)) { + conditions.add("(" + childSql + ")"); + } + } + if (conditions.isEmpty()) { + return ""; + } + return String.join("or".equalsIgnoreCase(filter.getLogic()) ? " OR " : " AND ", conditions); + } + + private String buildFhvapPointLeafCondition(DataSourceRequest.FilterDescriptor filter, + Map paramMap, + int[] indexHolder) { + String field = filter.getField(); + Object value = filter.getValue(); + String operator = StrUtil.blankToDefault(filter.getOperator(), "eq").toLowerCase(); + + String column = mapFhvapPointColumn(field); + if (StrUtil.isBlank(column)) { + return ""; + } + + if ("isnull".equals(operator)) { + return column + " IS NULL"; + } + if ("isnotnull".equals(operator)) { + return column + " IS NOT NULL"; + } + if ("in".equals(operator)) { + List values = normalizeValues(value); + if (values.isEmpty()) { + return ""; + } + List placeholders = new ArrayList<>(); + for (Object item : values) { + String paramKey = "fhvapParam" + indexHolder[0]++; + paramMap.put(paramKey, item); + placeholders.add("#{map." + paramKey + "}"); + } + return column + " IN (" + String.join(", ", placeholders) + ")"; + } + if (value == null) { + return ""; + } + + String paramKey = "fhvapParam" + indexHolder[0]++; + switch (operator) { + case "eq": + paramMap.put(paramKey, value); + return column + " = #{map." + paramKey + "}"; + case "neq": + paramMap.put(paramKey, value); + return column + " <> #{map." + paramKey + "}"; + case "contains": + paramMap.put(paramKey, "%" + value + "%"); + return column + " LIKE #{map." + paramKey + "}"; + case "startswith": + paramMap.put(paramKey, value + "%"); + return column + " LIKE #{map." + paramKey + "}"; + case "endswith": + paramMap.put(paramKey, "%" + value); + return column + " LIKE #{map." + paramKey + "}"; + case "gt": + paramMap.put(paramKey, value); + return column + " > #{map." + paramKey + "}"; + case "gte": + paramMap.put(paramKey, value); + return column + " >= #{map." + paramKey + "}"; + case "lt": + paramMap.put(paramKey, value); + return column + " < #{map." + paramKey + "}"; + case "lte": + paramMap.put(paramKey, value); + return column + " <= #{map." + paramKey + "}"; + default: + return ""; + } + } + + private String mapFhvapPointColumn(String field) { + if (StrUtil.isBlank(field)) { + return null; + } + Map columnMap = new HashMap<>(); + columnMap.put("stcd", "t.STCD"); + columnMap.put("stnm", "t.STNM"); + columnMap.put("sttpCode", "t.STTP"); + columnMap.put("bldsttCcode", "t.BLDSTT_CODE"); + columnMap.put("lgtd", "t.LGTD"); + columnMap.put("lttd", "t.LTTD"); + columnMap.put("baseId", "t.BASE_ID"); + columnMap.put("rvcd", "t.RVCD"); + columnMap.put("addvcd", "t.ADDVCD"); + columnMap.put("rstcds", "t.RSTCD"); + columnMap.put("ennm", "eng.ENNM"); + return columnMap.get(field); + } + + private String buildFhvapPointOrderBySql(List sorts) { + if (sorts == null || sorts.isEmpty()) { + return " ORDER BY t.BASE_ID ASC, t.STCD ASC"; + } + List orderItems = new ArrayList<>(); + for (DataSourceRequest.SortDescriptor sort : sorts) { + if (sort == null || StrUtil.isBlank(sort.getField())) { + continue; + } + String column = mapFhvapPointColumn(sort.getField()); + if (StrUtil.isBlank(column)) { + continue; + } + String direction = "desc".equalsIgnoreCase(sort.getDir()) || "des".equalsIgnoreCase(sort.getDir()) ? "DESC" : "ASC"; + orderItems.add(column + " " + direction + " NULLS LAST"); + } + if (orderItems.isEmpty()) { + return " ORDER BY t.BASE_ID ASC, t.STCD ASC"; + } + return " ORDER BY " + String.join(", ", orderItems); + } } From 61e896de25f47c869d7009574ccdbe9faccb261c Mon Sep 17 00:00:00 2001 From: tangwei Date: Mon, 6 Jul 2026 11:48:23 +0800 Subject: [PATCH 08/26] =?UTF-8?q?feat:=20=E9=87=8E=E7=94=9F=E5=8A=A8?= =?UTF-8?q?=E7=89=A9=E9=94=9A=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/VapConstructionController.java | 6 + .../vap/service/VpConstructionService.java | 3 + .../impl/VpConstructionServiceImpl.java | 185 ++++++++++++++++++ 3 files changed, 194 insertions(+) diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/vap/controller/VapConstructionController.java b/backend/src/main/java/com/yfd/platform/qgc_env/vap/controller/VapConstructionController.java index cf534c58..d6900110 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/vap/controller/VapConstructionController.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/vap/controller/VapConstructionController.java @@ -82,4 +82,10 @@ public class VapConstructionController { public ResponseResult getFhvapBuiltPointKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) { return ResponseResult.successData(vpConstructionService.getFhvapBuiltPointKendoListCust(dataSourceRequest)); } + + @PostMapping("/wva/point/GetKendoListCust") + @Operation(summary = "野生动物锚点") + public ResponseResult getWvaPointKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) { + return ResponseResult.successData(vpConstructionService.getWvaPointKendoListCust(dataSourceRequest)); + } } diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/vap/service/VpConstructionService.java b/backend/src/main/java/com/yfd/platform/qgc_env/vap/service/VpConstructionService.java index 44fd2569..634224a5 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/vap/service/VpConstructionService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/vap/service/VpConstructionService.java @@ -3,6 +3,7 @@ package com.yfd.platform.qgc_env.vap.service; import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.common.DataSourceResult; import com.yfd.platform.qgc_env.vap.entity.vo.FhvapBuiltPointVo; +import com.yfd.platform.qgc_env.vap.entity.vo.WvaPointVo; import com.yfd.platform.qgc_env.vap.entity.vo.VpBasinIntDetailVo; import com.yfd.platform.qgc_env.vap.entity.vo.VpVarVo; import com.yfd.platform.qgc_env.vap.entity.vo.VpStInfoResultVo; @@ -30,4 +31,6 @@ public interface VpConstructionService { DataSourceResult getVprYearList(DataSourceRequest dataSourceRequest); DataSourceResult getFhvapBuiltPointKendoListCust(DataSourceRequest dataSourceRequest); + + DataSourceResult getWvaPointKendoListCust(DataSourceRequest dataSourceRequest); } diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/vap/service/impl/VpConstructionServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/vap/service/impl/VpConstructionServiceImpl.java index 7b0727c4..9b1131e0 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/vap/service/impl/VpConstructionServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/vap/service/impl/VpConstructionServiceImpl.java @@ -10,6 +10,7 @@ import com.yfd.platform.common.GroupingInfo; import com.yfd.platform.common.MicroservicDynamicSQLMapper; import com.yfd.platform.common.PageInfo; import com.yfd.platform.qgc_env.vap.entity.vo.FhvapBuiltPointVo; +import com.yfd.platform.qgc_env.vap.entity.vo.WvaPointVo; import com.yfd.platform.qgc_env.vap.entity.vo.VpBasinIntDetailVo; import com.yfd.platform.qgc_env.vap.entity.vo.VpConstructionSituationVo; import com.yfd.platform.qgc_env.vap.entity.vo.VpVarVo; @@ -2124,4 +2125,188 @@ public class VpConstructionServiceImpl implements VpConstructionService { } return " ORDER BY " + String.join(", ", orderItems); } + + @Override + public DataSourceResult getWvaPointKendoListCust(DataSourceRequest dataSourceRequest) { + DataSourceResult dataSourceResult = new DataSourceResult<>(); + dataSourceResult.setAggregates(new HashMap<>()); + + if (dataSourceRequest == null) { + dataSourceResult.setData(new ArrayList<>()); + dataSourceResult.setTotal(0L); + return dataSourceResult; + } + + StringBuilder sql = new StringBuilder("SELECT\n" + + " we.DTIN AS dtin,\n" + + " we.STCD AS stcd,\n" + + " we.STNM AS stnm,\n" + + " we.STNM AS titleName,\n" + + " TO_CHAR(we.BLDSTT_CODE) AS bldsttCcode,\n" + + " TO_CHAR(we.BLDSTT_CODE) AS bldstt,\n" + + " we.LTTD AS lttd,\n" + + " we.LGTD AS lgtd,\n" + + " we.ELEV AS dtmel,\n" + + " we.RSTCD AS rstcds,\n" + + " eng.ENNM AS ennm,\n" + + " 'WVA' AS sttpMap,\n" + + " we.RVCD AS rvcd,\n" + + " we.ADDVCD AS addvcd,\n" + + " we.BASE_ID AS baseId,\n" + + " 'WVA' AS sttp,\n" + + " 'wild_animal_legend' AS anchoPointState,\n" + + " 'WVA' AS sttpCode\n" + + "FROM SD_WE_B_H we\n" + + "LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = we.RSTCD AND NVL(eng.IS_DELETED, 0) = 0\n" + + "WHERE we.LGTD IS NOT NULL AND we.LTTD IS NOT NULL "); + + Map paramMap = new HashMap<>(); + String filterSql = buildWvaPointFilterCondition(dataSourceRequest.getFilter(), paramMap, new int[]{0}); + if (StrUtil.isNotBlank(filterSql)) { + sql.append(" AND ").append(filterSql); + } + + sql.append(buildWvaPointOrderBySql(dataSourceRequest.getSort())); + + Page page = KendoUtil.getPage(dataSourceRequest); + List resultList = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, WvaPointVo.class); + + dataSourceResult.setData(resultList); + dataSourceResult.setTotal(page == null ? resultList.size() : page.getTotal()); + return dataSourceResult; + } + + private String buildWvaPointFilterCondition(DataSourceRequest.FilterDescriptor filter, + Map paramMap, + int[] indexHolder) { + if (filter == null) { + return ""; + } + if (StrUtil.isNotBlank(filter.getField())) { + return buildWvaPointLeafCondition(filter, paramMap, indexHolder); + } + if (CollectionUtils.isEmpty(filter.getFilters())) { + return ""; + } + List conditions = new ArrayList<>(); + for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) { + String childSql = buildWvaPointFilterCondition(child, paramMap, indexHolder); + if (StrUtil.isNotBlank(childSql)) { + conditions.add("(" + childSql + ")"); + } + } + if (conditions.isEmpty()) { + return ""; + } + return String.join("or".equalsIgnoreCase(filter.getLogic()) ? " OR " : " AND ", conditions); + } + + private String buildWvaPointLeafCondition(DataSourceRequest.FilterDescriptor filter, + Map paramMap, + int[] indexHolder) { + String field = filter.getField(); + Object value = filter.getValue(); + String operator = StrUtil.blankToDefault(filter.getOperator(), "eq").toLowerCase(); + + String column = mapWvaPointColumn(field); + if (StrUtil.isBlank(column)) { + return ""; + } + + if ("isnull".equals(operator)) { + return column + " IS NULL"; + } + if ("isnotnull".equals(operator)) { + return column + " IS NOT NULL"; + } + if ("in".equals(operator)) { + List values = normalizeValues(value); + if (values.isEmpty()) { + return ""; + } + List placeholders = new ArrayList<>(); + for (Object item : values) { + String paramKey = "wvaParam" + indexHolder[0]++; + paramMap.put(paramKey, item); + placeholders.add("#{map." + paramKey + "}"); + } + return column + " IN (" + String.join(", ", placeholders) + ")"; + } + if (value == null) { + return ""; + } + + String paramKey = "wvaParam" + indexHolder[0]++; + switch (operator) { + case "eq": + paramMap.put(paramKey, value); + return column + " = #{map." + paramKey + "}"; + case "neq": + paramMap.put(paramKey, value); + return column + " <> #{map." + paramKey + "}"; + case "contains": + paramMap.put(paramKey, "%" + value + "%"); + return column + " LIKE #{map." + paramKey + "}"; + case "startswith": + paramMap.put(paramKey, value + "%"); + return column + " LIKE #{map." + paramKey + "}"; + case "endswith": + paramMap.put(paramKey, "%" + value); + return column + " LIKE #{map." + paramKey + "}"; + case "gt": + paramMap.put(paramKey, value); + return column + " > #{map." + paramKey + "}"; + case "gte": + paramMap.put(paramKey, value); + return column + " >= #{map." + paramKey + "}"; + case "lt": + paramMap.put(paramKey, value); + return column + " < #{map." + paramKey + "}"; + case "lte": + paramMap.put(paramKey, value); + return column + " <= #{map." + paramKey + "}"; + default: + return ""; + } + } + + private String mapWvaPointColumn(String field) { + if (StrUtil.isBlank(field)) { + return null; + } + Map columnMap = new HashMap<>(); + columnMap.put("stcd", "we.STCD"); + columnMap.put("stnm", "we.STNM"); + columnMap.put("sttpCode", "'WVA'"); + columnMap.put("lgtd", "we.LGTD"); + columnMap.put("lttd", "we.LTTD"); + columnMap.put("baseId", "we.BASE_ID"); + columnMap.put("rvcd", "we.RVCD"); + columnMap.put("addvcd", "we.ADDVCD"); + columnMap.put("rstcds", "we.RSTCD"); + columnMap.put("ennm", "eng.ENNM"); + return columnMap.get(field); + } + + private String buildWvaPointOrderBySql(List sorts) { + if (sorts == null || sorts.isEmpty()) { + return " ORDER BY we.BASE_ID ASC, we.STCD ASC"; + } + List orderItems = new ArrayList<>(); + for (DataSourceRequest.SortDescriptor sort : sorts) { + if (sort == null || StrUtil.isBlank(sort.getField())) { + continue; + } + String column = mapWvaPointColumn(sort.getField()); + if (StrUtil.isBlank(column)) { + continue; + } + String direction = "desc".equalsIgnoreCase(sort.getDir()) || "des".equalsIgnoreCase(sort.getDir()) ? "DESC" : "ASC"; + orderItems.add(column + " " + direction + " NULLS LAST"); + } + if (orderItems.isEmpty()) { + return " ORDER BY we.BASE_ID ASC, we.STCD ASC"; + } + return " ORDER BY " + String.join(", ", orderItems); + } } From fa805bfc5382e912f41642c004c8b546a5e8d93b Mon Sep 17 00:00:00 2001 From: tangwei Date: Mon, 6 Jul 2026 11:48:38 +0800 Subject: [PATCH 09/26] =?UTF-8?q?feat:=20=E9=87=8E=E7=94=9F=E5=8A=A8?= =?UTF-8?q?=E7=89=A9=E9=94=9A=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../qgc_env/vap/entity/vo/WvaPointVo.java | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 backend/src/main/java/com/yfd/platform/qgc_env/vap/entity/vo/WvaPointVo.java diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/vap/entity/vo/WvaPointVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/vap/entity/vo/WvaPointVo.java new file mode 100644 index 00000000..ac2802b5 --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_env/vap/entity/vo/WvaPointVo.java @@ -0,0 +1,47 @@ +package com.yfd.platform.qgc_env.vap.entity.vo; + +import lombok.Data; + +@Data +public class WvaPointVo { + + private Integer dtin; + + private String stcd; + + private String stnm; + + private String titleName; + + private String bldsttCcode; + + private String bldstt; + + private Double lttd; + + private Double lgtd; + + private Double dtmel; + + private String rstcds; + + private String ennm; + + private String sttpMap; + + private String rvcd; + + private String addvcd; + + private String baseId; + + private String sttp; + + private String anchoPointState; + + private String mway; + + private String sttpCode; + + private Integer distance; +} \ No newline at end of file From 1b7f52783db93e3906a79d8dd85a32b045148bc1 Mon Sep 17 00:00:00 2001 From: tangwei Date: Mon, 6 Jul 2026 12:28:13 +0800 Subject: [PATCH 10/26] =?UTF-8?q?feat:=20=E9=B1=BC=E7=B1=BB=E8=B0=83?= =?UTF-8?q?=E6=9F=A5=E8=A3=85=E7=BD=AE=E9=94=9A=E7=82=B9=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fpr/controller/FprMonitorController.java | 12 ++- .../fpr/entity/vo/FprdPointInfoVo.java | 67 +++++++++++++++ .../fpr/service/FprMonitorService.java | 5 +- .../service/impl/FprMonitorServiceImpl.java | 83 +++++++++++++++++++ 4 files changed, 164 insertions(+), 3 deletions(-) create mode 100644 backend/src/main/java/com/yfd/platform/qgc_env/fpr/entity/vo/FprdPointInfoVo.java diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fpr/controller/FprMonitorController.java b/backend/src/main/java/com/yfd/platform/qgc_env/fpr/controller/FprMonitorController.java index 61cbb809..bf3f44ff 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/fpr/controller/FprMonitorController.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fpr/controller/FprMonitorController.java @@ -4,9 +4,10 @@ import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.common.DataSourceResult; import com.yfd.platform.config.ResponseResult; import com.yfd.platform.qgc_env.fpr.entity.ao.FprdRunDataAo; -import com.yfd.platform.qgc_env.fpr.entity.vo.FprdDetailVo; -import com.yfd.platform.qgc_eng.eq.service.EngEqDataService; import com.yfd.platform.qgc_env.fpr.entity.vo.FprFtpChangeInfoVo; +import com.yfd.platform.qgc_env.fpr.entity.vo.FprdDetailVo; +import com.yfd.platform.qgc_env.fpr.entity.vo.FprdPointInfoVo; +import com.yfd.platform.qgc_eng.eq.service.EngEqDataService; import com.yfd.platform.qgc_env.fpr.entity.vo.FprdRunDataInfoVo; import com.yfd.platform.qgc_env.fpr.entity.vo.FprZyFishDicVo; import com.yfd.platform.qgc_env.fpr.service.FprMonitorService; @@ -86,6 +87,13 @@ public class FprMonitorController { return ResponseResult.successData(result); } + @PostMapping("/sdFprdR/point/getFprdPointList") + @Operation(summary = "鱼类调查装置锚点信息") + public ResponseResult getFprdPointList(@RequestBody FprdRunDataAo ao) { + List result = fprMonitorService.getFprdInfoList(ao); + return ResponseResult.successData(result); + } + @PostMapping("/wbsb/GetKendoList") @Operation(summary = "查询基地/基地流域树数据") public ResponseResult getWbsbList(@RequestBody DataSourceRequest dataSourceRequest) { diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fpr/entity/vo/FprdPointInfoVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/fpr/entity/vo/FprdPointInfoVo.java new file mode 100644 index 00000000..81ea189f --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fpr/entity/vo/FprdPointInfoVo.java @@ -0,0 +1,67 @@ +package com.yfd.platform.qgc_env.fpr.entity.vo; + +import lombok.Data; + +@Data +public class FprdPointInfoVo { + + private String stcd; + + private String stnm; + + private String titleName; + + private String bldsttCcode; + + private String bldstt; + + private Double lttd; + + private Double lgtd; + + private Double dtmel; + + private String rstcds; + + private String ennm; + + private String sttpCode; + + private String dwtp; + + private String dwtpName; + + private String sttpMap; + + private String rvcd; + + private String rvcdName; + + private String addvcd; + + private String addvcdName; + + private String hbrvcd; + + private String hbrvcdName; + + private String baseId; + + private String baseName; + + private String sttp; + + private String sttpName; + + private String anchoPointState; + + private String mway; + + private Integer dtin; + + private String stdSstate; + + private Integer distance; + + private String stlc; +} \ No newline at end of file diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fpr/service/FprMonitorService.java b/backend/src/main/java/com/yfd/platform/qgc_env/fpr/service/FprMonitorService.java index 8681b405..d64cf1fc 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/fpr/service/FprMonitorService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fpr/service/FprMonitorService.java @@ -2,8 +2,9 @@ package com.yfd.platform.qgc_env.fpr.service; import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.common.DataSourceResult; -import com.yfd.platform.qgc_env.fpr.entity.vo.FprFtpChangeInfoVo; import com.yfd.platform.qgc_env.fpr.entity.ao.FprdRunDataAo; +import com.yfd.platform.qgc_env.fpr.entity.vo.FprFtpChangeInfoVo; +import com.yfd.platform.qgc_env.fpr.entity.vo.FprdPointInfoVo; import com.yfd.platform.qgc_env.fpr.entity.vo.FprFishDicVo; import com.yfd.platform.qgc_env.fpr.entity.vo.FprMsstbprptVo; import com.yfd.platform.qgc_env.fpr.entity.vo.FprdDetailVo; @@ -29,4 +30,6 @@ public interface FprMonitorService { DataSourceResult getFprdDetailList(DataSourceRequest dataSourceRequest); List getFishInfo(); + + List getFprdInfoList(FprdRunDataAo ao); } diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fpr/service/impl/FprMonitorServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/fpr/service/impl/FprMonitorServiceImpl.java index 09b35d14..c697d439 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/fpr/service/impl/FprMonitorServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fpr/service/impl/FprMonitorServiceImpl.java @@ -5,6 +5,7 @@ import cn.hutool.core.bean.copier.CopyOptions; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; +import com.yfd.platform.qgc_env.wt.utils.SiteAvoidanceUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.yfd.platform.common.DataSourceLoadOptionsBase; import com.yfd.platform.common.DataSourceRequest; @@ -18,6 +19,7 @@ import com.yfd.platform.qgc_env.fpr.entity.vo.FprFishDicVo; import com.yfd.platform.qgc_env.fpr.entity.vo.FprFtpChangeInfoVo; import com.yfd.platform.qgc_env.fpr.entity.vo.FprMsstbprptVo; import com.yfd.platform.qgc_env.fpr.entity.vo.FprdDetailVo; +import com.yfd.platform.qgc_env.fpr.entity.vo.FprdPointInfoVo; import com.yfd.platform.qgc_env.fpr.entity.vo.FprdRunDataInfoVo; import com.yfd.platform.qgc_env.fpr.entity.vo.FprZyFishDicVo; import com.yfd.platform.qgc_env.fpr.service.FprMonitorService; @@ -126,6 +128,87 @@ public class FprMonitorServiceImpl implements FprMonitorService { .toList(); } + @Override + public List getFprdInfoList(FprdRunDataAo ao) { + validateFprdRunDataAo(ao); + + Map paramMap = new HashMap<>(); + paramMap.put("baseId", ao.getBaseId()); + + StringBuilder sql = new StringBuilder("SELECT ") + .append("aim.STCD AS stcd, ") + .append("aim.STNM AS stnm, ") + .append("aim.STNM AS titleName, ") + .append("TO_CHAR(aim.BLDSTT_CODE) AS bldsttCcode, ") + .append("TO_CHAR(aim.BLDSTT_CODE) AS bldstt, ") + .append("aim.LTTD AS lttd, ") + .append("aim.LGTD AS lgtd, ") + .append("aim.DTMEL AS dtmel, ") + .append("aim.RSTCD AS rstcds, ") + .append("eng.ENNM AS ennm, ") + .append("aim.STTP AS sttpCode, ") + .append("aim.DWTP AS dwtp, ") + .append("aim.DWTP AS dwtpName, ") + .append("aim.STTP AS sttpMap, ") + .append("aim.RVCD AS rvcd, ") + .append("rv.RVNM AS rvcdName, ") + .append("aim.ADDVCD AS addvcd, ") + .append("addv.ADDVCD_NAME AS addvcdName, ") + .append("aim.HBRVCD AS hbrvcd, ") + .append("hbrv.HBRVNM AS hbrvcdName, ") + .append("aim.BASE_ID AS baseId, ") + .append("hb.BASENAME AS baseName, ") + .append("aim.STTP AS sttp, ") + .append("sttp.STTP_NAME AS sttpName, ") + .append("'' AS anchoPointState, ") + .append("aim.MWAY AS mway, ") + .append("aim.DTIN AS dtin, ") + .append("aim.STDSSTATE AS stdSstate, ") + .append("aim.STLC AS stlc ") + .append("FROM SD_AIMONITOR_B_H aim ") + .append("LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = aim.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 ") + .append("LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = aim.BASE_ID AND NVL(hb.IS_DELETED, 0) = 0 ") + .append("LEFT JOIN SD_HBRV_DIC hbrv ON hbrv.HBRVCD = aim.HBRVCD ") + .append(" AND hbrv.BASEID = aim.BASE_ID ") + .append(" AND NVL(hbrv.IS_DELETED, 0) = 0 ") + .append(" AND NVL(hbrv.ENABLED, 1) = 1 ") + .append("LEFT JOIN SD_RVCD_DIC rv ON rv.RVCD = aim.RVCD ") + .append("LEFT JOIN SD_ADDVCD_DIC addv ON addv.ADDVCD = aim.ADDVCD ") + .append("LEFT JOIN SD_STTP_B sttp ON sttp.STTP_CODE = aim.STTP ") + .append(" AND NVL(sttp.IS_DELETED, 0) = 0 ") + .append(" AND NVL(sttp.ENABLE, 1) = 1 ") + .append("WHERE NVL(aim.IS_DELETED, 0) = 0 ") + .append(" AND aim.STTP = 'FPRD' ") + .append(" AND aim.LGTD IS NOT NULL ") + .append(" AND aim.BASE_ID = #{map.baseId}"); + + if (StrUtil.isNotBlank(ao.getHbrvcd())) { + sql.append(" AND aim.HBRVCD = #{map.hbrvcd}"); + paramMap.put("hbrvcd", ao.getHbrvcd()); + } + + if (StrUtil.isNotBlank(ao.getStcd())) { + sql.append(" AND aim.STCD = #{map.stcd}"); + paramMap.put("stcd", ao.getStcd()); + } + + List resultList = microservicDynamicSQLMapper.getAllListWithResultType( + sql.toString(), + paramMap, + FprdPointInfoVo.class + ); + + SiteAvoidanceUtils.calcSiteMapLev(resultList, + FprdPointInfoVo::getStcd, + vo -> vo.getLgtd() != null ? java.math.BigDecimal.valueOf(vo.getLgtd()) : null, + vo -> vo.getLttd() != null ? java.math.BigDecimal.valueOf(vo.getLttd()) : null, + FprdPointInfoVo::getAnchoPointState, + FprdPointInfoVo::setDistance + ); + + return resultList; + } + @Override public DataSourceResult getMsstbprptList(DataSourceRequest dataSourceRequest) { DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest(); From 25aeb62e95734e08fe978cf26eeda6012aa36840 Mon Sep 17 00:00:00 2001 From: tangwei Date: Mon, 6 Jul 2026 15:11:08 +0800 Subject: [PATCH 11/26] =?UTF-8?q?feat:=20=E6=9D=A1=E4=BB=B6=E8=BF=87?= =?UTF-8?q?=E6=BB=A4=E6=95=B0=E6=8D=AE=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/SdEngMonitorController.java | 7 + .../qgc_base/domain/vo/EngRsvrcscdBVo.java | 41 ++++ .../qgc_base/service/ISdEngInfoBHService.java | 3 + .../service/impl/SdEngInfoBHServiceImpl.java | 195 ++++++++++++++++++ .../mapLayer/mapper/MsMapmoduleBMapper.java | 2 +- .../controller/MapmoduleBController.java | 2 + 6 files changed, 249 insertions(+), 1 deletion(-) create mode 100644 backend/src/main/java/com/yfd/platform/qgc_base/domain/vo/EngRsvrcscdBVo.java diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/controller/SdEngMonitorController.java b/backend/src/main/java/com/yfd/platform/qgc_base/controller/SdEngMonitorController.java index 9395ae94..3f2de614 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_base/controller/SdEngMonitorController.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/controller/SdEngMonitorController.java @@ -2,6 +2,7 @@ package com.yfd.platform.qgc_base.controller; import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.config.ResponseResult; +import com.yfd.platform.qgc_base.domain.vo.EngRsvrcscdBVo; import com.yfd.platform.qgc_base.service.ISdEngInfoBHService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; @@ -50,4 +51,10 @@ public class SdEngMonitorController { public ResponseResult getEngPointKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) { return ResponseResult.successData(engInfoBHService.getEngPointKendoListCust(dataSourceRequest)); } + + @PostMapping("/rsvrcscdb/GetKendoList") + @Operation(summary = "条件过滤数据列表") + public ResponseResult getRsvrcscdBKendoList(@RequestBody DataSourceRequest dataSourceRequest) { + return ResponseResult.successData(engInfoBHService.getRsvrcscdBKendoList(dataSourceRequest)); + } } diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/domain/vo/EngRsvrcscdBVo.java b/backend/src/main/java/com/yfd/platform/qgc_base/domain/vo/EngRsvrcscdBVo.java new file mode 100644 index 00000000..c402b4a4 --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_base/domain/vo/EngRsvrcscdBVo.java @@ -0,0 +1,41 @@ +package com.yfd.platform.qgc_base.domain.vo; + +import lombok.Data; + +import java.util.Date; + +@Data +public class EngRsvrcscdBVo { + + private String id; + + private String rvcd; + + private String rvcdName; + + private String stcd; + + private String ennm; + + private Double srcdis; + + private Double dmhg; + + private Double normz; + + private String recordUser; + + private Date recordTime; + + private String modifyUser; + + private Date modifyTime; + + private Integer isDeleted; + + private Double lgtd; + + private Double lttd; + + private String stlc; +} \ No newline at end of file diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/service/ISdEngInfoBHService.java b/backend/src/main/java/com/yfd/platform/qgc_base/service/ISdEngInfoBHService.java index 5082c0ee..73934b15 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_base/service/ISdEngInfoBHService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/service/ISdEngInfoBHService.java @@ -9,6 +9,7 @@ import com.yfd.platform.qgc_base.domain.SdEngInfoBHRequest; import com.yfd.platform.qgc_base.domain.vo.EngBaseInfoVo; import com.yfd.platform.qgc_base.domain.vo.EngEiaapprovalVo; import com.yfd.platform.qgc_base.domain.vo.EngOperatVo; +import com.yfd.platform.qgc_base.domain.vo.EngRsvrcscdBVo; import com.yfd.platform.qgc_base.domain.vo.EngPointVo; import com.yfd.platform.qgc_base.domain.vo.EngStInfoResultVo; import com.yfd.platform.qgc_base.domain.vo.EngVmsstbprptVo; @@ -89,4 +90,6 @@ public interface ISdEngInfoBHService extends IService { DataSourceResult getStbprpDataKendoListCust(DataSourceRequest dataSourceRequest, String tbCode, Boolean ignorePageLimit); DataSourceResult getEngPointKendoListCust(DataSourceRequest dataSourceRequest); + + DataSourceResult getRsvrcscdBKendoList(DataSourceRequest dataSourceRequest); } diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdEngInfoBHServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdEngInfoBHServiceImpl.java index 879347e6..a345ecdc 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdEngInfoBHServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdEngInfoBHServiceImpl.java @@ -27,6 +27,7 @@ import com.yfd.platform.qgc_base.domain.SdEngInfoBHRequest; import com.yfd.platform.qgc_base.domain.vo.EngBaseInfoVo; import com.yfd.platform.qgc_base.domain.vo.EngEiaapprovalVo; import com.yfd.platform.qgc_base.domain.vo.EngOperatVo; +import com.yfd.platform.qgc_base.domain.vo.EngRsvrcscdBVo; import com.yfd.platform.qgc_base.domain.vo.EngPointVo; import com.yfd.platform.qgc_base.domain.vo.EngStbprpDataVo; import com.yfd.platform.qgc_base.domain.vo.EngStBaseInfoVo; @@ -2928,4 +2929,198 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl getRsvrcscdBKendoList(DataSourceRequest dataSourceRequest) { + DataSourceResult result = new DataSourceResult<>(); + result.setAggregates(new HashMap<>()); + + if (dataSourceRequest == null) { + result.setData(new ArrayList<>()); + result.setTotal(0L); + return result; + } + + DataSourceLoadOptionsBase loadOptions = dataSourceRequest.toDevRequest(); + Page page = loadOptions == null ? null : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake()); + + Map paramMap = new HashMap<>(); + StringBuilder sql = new StringBuilder(); + + sql.append("SELECT ") + .append("r.ID AS id, ") + .append("r.RVCD AS rvcd, ") + .append("rv.RVNM AS rvcdName, ") + .append("r.STCD AS stcd, ") + .append("r.ENNM AS ennm, ") + .append("r.SRCDIS AS srcdis, ") + .append("r.DMHG AS dmhg, ") + .append("r.NORMZ AS normz, ") + .append("r.RECORD_USER AS recordUser, ") + .append("r.RECORD_TIME AS recordTime, ") + .append("r.MODIFY_USER AS modifyUser, ") + .append("r.MODIFY_TIME AS modifyTime, ") + .append("r.IS_DELETED AS isDeleted, ") + .append("eng.LGTD AS lgtd, ") + .append("eng.LTTD AS lttd, ") + .append("eng.STLC AS stlc ") + .append("FROM SD_RSVRCSCD_B r ") + .append("LEFT JOIN SD_RVCD_DIC rv ON rv.RVCD = r.RVCD ") + .append("LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = r.STCD AND NVL(eng.IS_DELETED, 0) = 0 ") + .append("WHERE NVL(r.IS_DELETED, 0) = 0 "); + + String filterSql = buildRsvrcscdBFilterCondition(dataSourceRequest.getFilter(), paramMap, new int[]{0}); + if (StringUtils.hasText(filterSql)) { + sql.append(" AND ").append(filterSql); + } + + sql.append(buildRsvrcscdBOrderBySql(dataSourceRequest.getSort())); + + List list = microservicDynamicSQLMapper.pageAllListWithResultType( + page, sql.toString(), paramMap, EngRsvrcscdBVo.class); + result.setData(list); + result.setTotal(page == null ? list.size() : page.getTotal()); + return result; + } + + private String buildRsvrcscdBFilterCondition(DataSourceRequest.FilterDescriptor filter, + Map paramMap, + int[] indexHolder) { + if (filter == null) { + return ""; + } + if (StringUtils.hasText(filter.getField())) { + return buildRsvrcscdBLeafCondition(filter, paramMap, indexHolder); + } + if (filter.getFilters() == null || filter.getFilters().isEmpty()) { + return ""; + } + List childConditions = new ArrayList<>(); + for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) { + String childSql = buildRsvrcscdBFilterCondition(child, paramMap, indexHolder); + if (StringUtils.hasText(childSql)) { + childConditions.add("(" + childSql + ")"); + } + } + if (childConditions.isEmpty()) { + return ""; + } + String logic = "or".equalsIgnoreCase(filter.getLogic()) ? " OR " : " AND "; + return String.join(logic, childConditions); + } + + private String buildRsvrcscdBLeafCondition(DataSourceRequest.FilterDescriptor filter, + Map paramMap, + int[] indexHolder) { + String column = mapRsvrcscdBColumn(filter.getField()); + if (!StringUtils.hasText(column)) { + return ""; + } + String operator = filter.getOperator() == null ? "eq" : filter.getOperator().toLowerCase(); + Object value = filter.getValue(); + if ("isnull".equals(operator)) { + return column + " IS NULL"; + } + if ("isnotnull".equals(operator)) { + return column + " IS NOT NULL"; + } + if ("in".equals(operator)) { + List values = normalizeFilterValues(value); + if (values.isEmpty()) { + return ""; + } + List placeholders = new ArrayList<>(); + for (Object item : values) { + String key = "rsvrParam" + indexHolder[0]++; + paramMap.put(key, item); + placeholders.add("#{map." + key + "}"); + } + return column + " IN (" + String.join(", ", placeholders) + ")"; + } + if (value == null) { + return ""; + } + String key = "rsvrParam" + indexHolder[0]++; + return switch (operator) { + case "eq" -> { + paramMap.put(key, value); + yield column + " = #{map." + key + "}"; + } + case "neq" -> { + paramMap.put(key, value); + yield column + " <> #{map." + key + "}"; + } + case "contains" -> { + paramMap.put(key, "%" + value + "%"); + yield column + " LIKE #{map." + key + "}"; + } + case "startswith" -> { + paramMap.put(key, value + "%"); + yield column + " LIKE #{map." + key + "}"; + } + case "endswith" -> { + paramMap.put(key, "%" + value); + yield column + " LIKE #{map." + key + "}"; + } + case "gt" -> { + paramMap.put(key, value); + yield column + " > #{map." + key + "}"; + } + case "gte" -> { + paramMap.put(key, value); + yield column + " >= #{map." + key + "}"; + } + case "lt" -> { + paramMap.put(key, value); + yield column + " < #{map." + key + "}"; + } + case "lte" -> { + paramMap.put(key, value); + yield column + " <= #{map." + key + "}"; + } + default -> ""; + }; + } + + private String mapRsvrcscdBColumn(String field) { + if (!StringUtils.hasText(field)) { + return null; + } + return switch (field) { + case "id" -> "r.ID"; + case "rvcd" -> "r.RVCD"; + case "rvcdName" -> "rv.RVNM"; + case "stcd" -> "r.STCD"; + case "ennm" -> "r.ENNM"; + case "srcdis" -> "r.SRCDIS"; + case "dmhg" -> "r.DMHG"; + case "normz" -> "r.NORMZ"; + case "lgtd" -> "eng.LGTD"; + case "lttd" -> "eng.LTTD"; + case "stlc" -> "eng.STLC"; + default -> null; + }; + } + + private String buildRsvrcscdBOrderBySql(List sortList) { + if (sortList == null || sortList.isEmpty()) { + return " ORDER BY r.RVCD ASC, r.STCD ASC"; + } + List orderItems = new ArrayList<>(); + for (DataSourceRequest.SortDescriptor sortDescriptor : sortList) { + if (sortDescriptor == null || !StringUtils.hasText(sortDescriptor.getField())) { + continue; + } + String column = mapRsvrcscdBColumn(sortDescriptor.getField()); + if (!StringUtils.hasText(column)) { + continue; + } + String dir = "desc".equalsIgnoreCase(sortDescriptor.getDir()) || "des".equalsIgnoreCase(sortDescriptor.getDir()) ? "DESC" : "ASC"; + orderItems.add(column + " " + dir + " NULLS LAST"); + } + if (orderItems.isEmpty()) { + return " ORDER BY r.RVCD ASC, r.STCD ASC"; + } + return " ORDER BY " + String.join(", ", orderItems); + } } diff --git a/backend/src/main/java/com/yfd/platform/qgc_sys/mapLayer/mapper/MsMapmoduleBMapper.java b/backend/src/main/java/com/yfd/platform/qgc_sys/mapLayer/mapper/MsMapmoduleBMapper.java index ee8da0e4..f1b054e6 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_sys/mapLayer/mapper/MsMapmoduleBMapper.java +++ b/backend/src/main/java/com/yfd/platform/qgc_sys/mapLayer/mapper/MsMapmoduleBMapper.java @@ -35,7 +35,7 @@ public interface MsMapmoduleBMapper extends BaseMapper { + " AND BMM.TEMPLATE_ID = #{templateId}" + " AND (BMM.TEMPLATE_ID IS NULL OR BMM.TEMPLATE_ID = '00000000-0000-0000-0000-000000000000')" + "" - + "WHERE BML.ENABLE = 1 AND (BML.TYPE NOT IN ('YXDT','DXDT','SLDT') OR BML.TYPE IS NULL) " + + "WHERE BML.ENABLE = 1 AND BML.IS_DELETED =0 AND (BML.TYPE NOT IN ('YXDT','DXDT','SLDT') OR BML.TYPE IS NULL) " + "ORDER BY BML.ORDER_INDEX" + "") List getMapLayerTree(@Param("moduleId") String moduleId, @Param("sid") String sid, diff --git a/backend/src/main/java/com/yfd/platform/qgc_sys/mapcfg/controller/MapmoduleBController.java b/backend/src/main/java/com/yfd/platform/qgc_sys/mapcfg/controller/MapmoduleBController.java index dc0d0a9f..63a368fe 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_sys/mapcfg/controller/MapmoduleBController.java +++ b/backend/src/main/java/com/yfd/platform/qgc_sys/mapcfg/controller/MapmoduleBController.java @@ -68,8 +68,10 @@ public class MapmoduleBController { // 3. 执行分页查询 Page resultPage; if (page != null) { + wrapper.eq("IS_DELETED", 0); resultPage = mapmoduleBService.page(page, wrapper); } else { + wrapper.eq("IS_DELETED", 0); List list = mapmoduleBService.list(wrapper); resultPage = new Page<>(); resultPage.setRecords(list); From c6dc532040b5156982e0a900109f10f5512be07f Mon Sep 17 00:00:00 2001 From: tangwei Date: Mon, 6 Jul 2026 16:09:40 +0800 Subject: [PATCH 12/26] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/MapLegendController.java | 3 +- .../service/impl/MapLegendBizServiceImpl.java | 6 +-- .../java/com/yfd/platform/utils/UUIDUtil.java | 43 +++++++++++++++++++ 3 files changed, 48 insertions(+), 4 deletions(-) create mode 100644 backend/src/main/java/com/yfd/platform/utils/UUIDUtil.java diff --git a/backend/src/main/java/com/yfd/platform/qgc_sys/mapLayer/controller/MapLegendController.java b/backend/src/main/java/com/yfd/platform/qgc_sys/mapLayer/controller/MapLegendController.java index 87e3187a..fe7bb242 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_sys/mapLayer/controller/MapLegendController.java +++ b/backend/src/main/java/com/yfd/platform/qgc_sys/mapLayer/controller/MapLegendController.java @@ -61,6 +61,7 @@ public class MapLegendController { // 执行分页查询 Page page = DataSourceRequestUtil.getPage(dataSourceRequest); Page resultPage; + wrapper.eq("IS_DELETED", 0); if (page != null) { resultPage = mapLegendService.page(page, wrapper); } else { @@ -110,7 +111,7 @@ public class MapLegendController { String parentId = entity.getParentId(); if (parentId != null && parentMap.containsKey(parentId)) { MsMaplegendB parent = parentMap.get(parentId); - entity.setParentCode(parent.getCode()); + entity.setParentCode(parent.getNameEn()); entity.setParentName(parent.getName()); } else { entity.setParentCode(null); diff --git a/backend/src/main/java/com/yfd/platform/qgc_sys/mapLayer/service/impl/MapLegendBizServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_sys/mapLayer/service/impl/MapLegendBizServiceImpl.java index 5ca81ae0..ccc54b6c 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_sys/mapLayer/service/impl/MapLegendBizServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_sys/mapLayer/service/impl/MapLegendBizServiceImpl.java @@ -178,8 +178,8 @@ public class MapLegendBizServiceImpl implements IMapLegendBizService { collect.forEach((str, mapLegendVoList) -> { MapLegendVo mapLegendVo = new MapLegendVo(); mapLegendVo.setName(str); - mapLegendVo.setPSort(mapLegendVoList.get(0).getPSort()); - mapLegendVo.setLayerCode(finalLayerCodeMap.get(mapLegendVoList.get(0).getParentId())); + mapLegendVo.setPSort(mapLegendVoList.getFirst().getPSort()); + mapLegendVo.setLayerCode(finalLayerCodeMap.get(mapLegendVoList.getFirst().getParentId())); // 按子级分组名分组 Map> collect1 = mapLegendVoList.stream() .collect(Collectors.groupingBy(MapLegendVo::getGroupName)); @@ -188,7 +188,7 @@ public class MapLegendBizServiceImpl implements IMapLegendBizService { List list1 = collect1.get(groupNameStr); // 如果子级和父级名称相同,则不用子级 if (groupNameStr.equalsIgnoreCase(str)) { - childrenList = list1; + childrenList.addAll(list1); } else { MapLegendVo mapLegendVoChild = new MapLegendVo(); mapLegendVoChild.setName(groupNameStr); diff --git a/backend/src/main/java/com/yfd/platform/utils/UUIDUtil.java b/backend/src/main/java/com/yfd/platform/utils/UUIDUtil.java new file mode 100644 index 00000000..092f3493 --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/utils/UUIDUtil.java @@ -0,0 +1,43 @@ +package com.yfd.platform.utils; + +import java.util.UUID; + +public class UUIDUtil { + public UUIDUtil() { + } + + public static String generateTenantUUID(String tenantId) { + return tenantId + generateUUID(); + } + + public static String generateUUID() { + return UUID.randomUUID().toString().replaceAll("-", ""); + } + + public static String generateUUIDWithEnDash() { + return UUID.randomUUID().toString(); + } + + public static String generateUpperUUIDWithEnDash() { + return UUID.randomUUID().toString().toUpperCase(); + } + + public static boolean checkUuid(String uuid) { + boolean isUuid = false; + return uuid.matches("([0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}?)") ? true : isUuid; + } + + public static String md5ToUUID(String md5) { + if (!StringUtils.isBlank(md5) && md5.length() == 32) { + md5 = md5.toUpperCase(); + String var1 = md5.substring(0, 8); + String var2 = md5.substring(8, 12); + String var3 = md5.substring(12, 16); + String var4 = md5.substring(16, 20); + String var5 = md5.substring(20); + return var1 + "-" + var2 + "-" + var3 + "-" + var4 + "-" + var5; + } else { + return null; + } + } +} \ No newline at end of file From d30d873fa47dcf4de713cd4e4672a788bc332e0b Mon Sep 17 00:00:00 2001 From: tangwei Date: Mon, 6 Jul 2026 17:01:44 +0800 Subject: [PATCH 13/26] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/MapLegendController.java | 12 -- .../service/impl/MapLegendServiceImpl.java | 142 ++++++++++++++++++ 2 files changed, 142 insertions(+), 12 deletions(-) diff --git a/backend/src/main/java/com/yfd/platform/qgc_sys/mapLayer/controller/MapLegendController.java b/backend/src/main/java/com/yfd/platform/qgc_sys/mapLayer/controller/MapLegendController.java index fe7bb242..9c2b5010 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_sys/mapLayer/controller/MapLegendController.java +++ b/backend/src/main/java/com/yfd/platform/qgc_sys/mapLayer/controller/MapLegendController.java @@ -162,18 +162,6 @@ public class MapLegendController { if (legend.getDataType() == null) { throw new BizException("图例数据类型(dataType: 1=结构,2=数据)不能为空."); } - if (legend.getDataType() == 2 && StrUtil.isBlank(legend.getLayerCode())) { - throw new BizException("关联的图层编码(layerCode)不能为空."); - } - if (StrUtil.isNotBlank(legend.getName())){ - if(StrUtil.isBlank(legend.getGroupName())){ - legend.setGroupName(legend.getName()); - } - if(StrUtil.isBlank(legend.getParentName())){ - legend.setGroupName(legend.getName()); - } - } - legend.setRecordUser(SecurityUtils.getUserId()); mapLegendService.saveOrUpdate(legend); return ResponseResult.success("保存成功."); } diff --git a/backend/src/main/java/com/yfd/platform/qgc_sys/mapLayer/service/impl/MapLegendServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_sys/mapLayer/service/impl/MapLegendServiceImpl.java index 5152e819..7e56a94f 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_sys/mapLayer/service/impl/MapLegendServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_sys/mapLayer/service/impl/MapLegendServiceImpl.java @@ -11,10 +11,13 @@ import com.yfd.platform.qgc_sys.mapLayer.domain.MsMapmoduleB; import com.yfd.platform.qgc_sys.mapLayer.mapper.MsMaplegendBMapper; import com.yfd.platform.qgc_sys.mapLayer.mapper.MsMapmoduleBMapper; import com.yfd.platform.qgc_sys.mapLayer.service.IMapLegendService; +import com.yfd.platform.utils.SecurityUtils; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; +import java.util.Comparator; import java.util.List; +import java.util.stream.Collectors; /** * 地图图例基础服务实现 @@ -94,4 +97,143 @@ public class MapLegendServiceImpl extends ServiceImpl list = getSubLegendList(legend.getParentId()); + Integer maxOrderIndex = getMaxOrderIndex(list); + legend.setOrderIndex(maxOrderIndex + 1); + MsMaplegendB parentLegend = null; + if (StrUtil.isNotBlank(legend.getParentId())) { + parentLegend = this.getById(legend.getParentId()); + if (parentLegend == null) { + throw new BizException("获取父级图例信息失败.请检查父级图例(parentId)是否存在."); + } + legend.setFullPath(parentLegend.getFullPath() + legend.getId() + ","); + legend.setTreeLevel(parentLegend.getTreeLevel() + 1); + legend.setHasChildren(0); + } else { + legend.setTreeLevel(1); + legend.setFullPath(legend.getId() + ","); + legend.setHasChildren(0); + } + if (legend.getDataType() == 1) { + legend.setGroupName(legend.getName()); + legend.setParentName(legend.getName()); + } else { + String fullPath = parentLegend.getFullPath(); + if (StrUtil.isNotBlank(fullPath)) { + String[] path = fullPath.split(","); + if (path.length == 1) { + legend.setGroupName(parentLegend.getName()); + legend.setParentName(parentLegend.getName()); + } else if (path.length == 2) { + legend.setGroupName(parentLegend.getName()); + MsMaplegendB root = this.getById(path[0]); + if (root == null) { + legend.setParentName(parentLegend.getParentName()); + } else { + legend.setParentName(root.getName()); + } + } + } + } + if (parentLegend != null && StrUtil.isBlank(legend.getLayerCode())) { + legend.setLayerCode(parentLegend.getLayerCode()); + } + legend.setIfShow(0); + legend.setInternal(0); + legend.setEnable(0); + legend.setRecordUser(SecurityUtils.getUserId()); + legend.setModifyUser(SecurityUtils.getUserId()); + this.save(legend); + if (parentLegend != null) { + MsMaplegendB temp = new MsMaplegendB(); + temp.setId(parentLegend.getId()); + temp.setHasChildren(1); + this.updateById(temp); + } + } + return true; + } + + private void updateSetLegend(MsMaplegendB legend) { + if (StrUtil.isNotBlank(legend.getParentId())) { + MsMaplegendB parent = this.getById(legend.getParentId()); + if (parent != null) { + if (legend.getDataType() == 1) { + legend.setParentName(parent.getName()); + legend.setFullPath(parent.getFullPath() + legend.getId() + ","); + } else { + legend.setGroupName(parent.getName()); + if (StrUtil.isNotBlank(parent.getFullPath())) { + MsMaplegendB root = this.getById(parent.getFullPath().split(",")[0]); + if (root != null) { + legend.setParentName(root.getName()); + } + legend.setFullPath(parent.getFullPath() + legend.getId() + ","); + } + } + if (StrUtil.isNotBlank(legend.getFullPath())) { + legend.setTreeLevel(legend.getFullPath().split(",").length); + } + } + if (legend.getDataType() == 1) { + legend.setGroupName(legend.getName()); + } + } else { + if (legend.getDataType() == 1) { + legend.setGroupName(legend.getName()); + legend.setParentName(legend.getName()); + } + legend.setFullPath(legend.getId() + ","); + legend.setTreeLevel(1); + } + } + + public List getSubLegendList(String parentId) { + if (StrUtil.isNotBlank(parentId)) { + return this.lambdaQuery() + .eq(MsMaplegendB::getParentId, parentId) + .orderByAsc(MsMaplegendB::getOrderIndex) + .list(); + } else { + return this.lambdaQuery() + .eq(MsMaplegendB::getTreeLevel, 1) + .orderByAsc(MsMaplegendB::getOrderIndex) + .list(); + } + } + + public Integer getMaxOrderIndex(List list) { + if (CollectionUtil.isEmpty(list)) { + return 0; + } else { + return list.stream() + .sorted(Comparator.comparing(MsMaplegendB::getOrderIndex).reversed()) + .toList() + .getFirst() + .getOrderIndex(); + } + } + + public boolean hasSameCode(MsMaplegendB legend) { + List list = this.lambdaQuery() + .eq(MsMaplegendB::getNameEn, legend.getNameEn()) + .list(); + return !CollectionUtil.isEmpty(list) && !list.get(0).getId().equals(legend.getId()); + } } \ No newline at end of file From e1072ac2e897b49dc66068a868f72e4f0d85ff48 Mon Sep 17 00:00:00 2001 From: lilin <18811154576@163.com> Date: Mon, 6 Jul 2026 17:09:08 +0800 Subject: [PATCH 14/26] =?UTF-8?q?=E6=B2=BF=E7=A8=8B=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E8=A1=A8=E4=BB=A3=E7=A0=81=E6=8F=90=E4=BA=A4=EF=BC=8C=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E4=BA=86=E5=9B=BE=E4=BE=8B=E6=95=B0=E6=8D=AE=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E5=88=A0=E9=99=A4=E8=8F=9C=E5=8D=95=E7=9A=84=E6=97=B6?= =?UTF-8?q?=E5=80=99=E4=B9=9F=E5=88=A0=E9=99=A4=E5=9B=BE=E5=B1=82=E8=8F=9C?= =?UTF-8?q?=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../platform/qgc_base/domain/SdHbrvDic.java | 6 +++++ .../qgc_base/mapper/SdHbrvDicMapper.java | 14 ++++++++++ .../qgc_base/service/ISdHbrvDicService.java | 1 + .../service/impl/SdHbrvDicServiceImpl.java | 7 +++++ .../along/controller/MsAlongBController.java | 27 ++++++++++++++----- .../controller/MsAlongDetBController.java | 10 +++++++ .../along/service/IMsAlongBService.java | 4 +++ .../service/impl/MsAlongBServiceImpl.java | 8 ++++++ .../mapLayer/mapper/MsMapmoduleBMapper.java | 23 +++++++++++++++- .../service/impl/MapLegendBizServiceImpl.java | 2 +- .../service/impl/MapmoduleBServiceImpl.java | 8 +++--- 11 files changed, 99 insertions(+), 11 deletions(-) diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdHbrvDic.java b/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdHbrvDic.java index 6c355d33..dd97de8a 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdHbrvDic.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdHbrvDic.java @@ -99,4 +99,10 @@ public class SdHbrvDic implements Serializable { * 删除时间 */ private Date deleteTime; + + /** + * 基地名称 + */ + @TableField(exist = false) + private String basename; } diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/mapper/SdHbrvDicMapper.java b/backend/src/main/java/com/yfd/platform/qgc_base/mapper/SdHbrvDicMapper.java index 3dde38df..2751611f 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_base/mapper/SdHbrvDicMapper.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/mapper/SdHbrvDicMapper.java @@ -1,8 +1,10 @@ package com.yfd.platform.qgc_base.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.qgc_base.domain.SdHbrvDic; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; import java.util.List; @@ -27,4 +29,16 @@ public interface SdHbrvDicMapper extends BaseMapper { * 查询所有启用的流域 */ List selectEnabledList(); + + @Select("SELECT\n" + + " shd.*,\n" + + " sh.BASENAME\n" + + "FROM\n" + + " SD_HBRV_DIC shd\n" + + " LEFT JOIN SD_HYDROBASE sh ON sh.BASEID = shd.BASEID\n" + + "WHERE\n" + + " 1 = 1 \n" + + " AND shd.IS_DELETED = 0 \n" + + " AND sh.IS_DELETED = 0") + List getWbsbList(DataSourceRequest dataSourceRequest); } \ No newline at end of file diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/service/ISdHbrvDicService.java b/backend/src/main/java/com/yfd/platform/qgc_base/service/ISdHbrvDicService.java index c38003c0..ad5984bd 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_base/service/ISdHbrvDicService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/service/ISdHbrvDicService.java @@ -62,4 +62,5 @@ public interface ISdHbrvDicService extends IService { List getHbrvdList(DataSourceRequest dataSourceRequest); + List getWbsbList(DataSourceRequest dataSourceRequest); } diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdHbrvDicServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdHbrvDicServiceImpl.java index 5d58e2fe..1e41c5ba 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdHbrvDicServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdHbrvDicServiceImpl.java @@ -52,6 +52,7 @@ public class SdHbrvDicServiceImpl extends ServiceImpl getWbsbList(DataSourceRequest dataSourceRequest) { + List sdHbrvDics = hbrvDicMapper.getWbsbList(dataSourceRequest); + return sdHbrvDics; + } } diff --git a/backend/src/main/java/com/yfd/platform/qgc_lygk/along/controller/MsAlongBController.java b/backend/src/main/java/com/yfd/platform/qgc_lygk/along/controller/MsAlongBController.java index fbdbf065..ddaaff51 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_lygk/along/controller/MsAlongBController.java +++ b/backend/src/main/java/com/yfd/platform/qgc_lygk/along/controller/MsAlongBController.java @@ -7,8 +7,11 @@ import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.common.DataSourceResult; import com.yfd.platform.common.exception.BizException; import com.yfd.platform.config.ResponseResult; +import com.yfd.platform.qgc_base.service.ISdHbrvDicService; +import com.yfd.platform.qgc_env.wt.service.SdWtMonitorService; import com.yfd.platform.qgc_lygk.along.domain.MsAlongB; import com.yfd.platform.qgc_lygk.along.service.IMsAlongBService; +import com.yfd.platform.qgc_sys.mapcfg.service.IMapmoduleBService; import com.yfd.platform.utils.DataSourceRequestUtil; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; @@ -32,6 +35,12 @@ public class MsAlongBController { @Resource private IMsAlongBService msAlongBService; + + @Resource + private SdWtMonitorService sdWtMonitorService; + + @Resource + private ISdHbrvDicService hbrvDicService; /** * 条件过滤数据列表 */ @@ -61,10 +70,16 @@ public class MsAlongBController { return ResponseResult.success("保存成功."); } -// @Operation(summary = "沿程配置删除") -// @PostMapping("/delete") -// public ResponseResult deleteData(@RequestBody List ids) { -// mapmoduleBService.delelteByIds(ids); -// return ResponseResult.success("删除成功."); -// } + @PostMapping("/wbsb/GetKendoList") + @Operation(summary = "查询水电基地流域字典列表") + public ResponseResult getWbsbList(@RequestBody DataSourceRequest dataSourceRequest) { + return ResponseResult.successData(hbrvDicService.getWbsbList(dataSourceRequest)); + } + + @Operation(summary = "沿程配置删除") + @PostMapping("/delete") + public ResponseResult deleteData(@RequestBody List ids) { + msAlongBService.delelteByIds(ids); + return ResponseResult.success("删除成功."); + } } \ No newline at end of file diff --git a/backend/src/main/java/com/yfd/platform/qgc_lygk/along/controller/MsAlongDetBController.java b/backend/src/main/java/com/yfd/platform/qgc_lygk/along/controller/MsAlongDetBController.java index dcb90386..8f489ee6 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_lygk/along/controller/MsAlongDetBController.java +++ b/backend/src/main/java/com/yfd/platform/qgc_lygk/along/controller/MsAlongDetBController.java @@ -51,4 +51,14 @@ public class MsAlongDetBController { msAlongDetBService.saveOrUpdate(msAlongDetB); return ResponseResult.success("保存成功."); } + + /** + * 条件过滤数据列表定制 + */ + @Operation(summary = "条件过滤数据列表定制") + @PostMapping("/GetKendoListCust") + public ResponseResult getKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) { + DataSourceResult result = msAlongDetBService.getKendoList(dataSourceRequest); + return ResponseResult.successData(result); + } } \ No newline at end of file diff --git a/backend/src/main/java/com/yfd/platform/qgc_lygk/along/service/IMsAlongBService.java b/backend/src/main/java/com/yfd/platform/qgc_lygk/along/service/IMsAlongBService.java index 3f23532b..9260fb42 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_lygk/along/service/IMsAlongBService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_lygk/along/service/IMsAlongBService.java @@ -5,6 +5,8 @@ import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.common.DataSourceResult; import com.yfd.platform.qgc_lygk.along.domain.MsAlongB; +import java.util.List; + /** * 沿程配置表 Service 接口 * @@ -19,6 +21,8 @@ public interface IMsAlongBService extends IService { */ DataSourceResult getKendoList(DataSourceRequest dataSourceRequest); + void delelteByIds(List ids); + // /** // * 保存或更新沿程配置 // * diff --git a/backend/src/main/java/com/yfd/platform/qgc_lygk/along/service/impl/MsAlongBServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_lygk/along/service/impl/MsAlongBServiceImpl.java index 7fd2fd93..0de796e3 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_lygk/along/service/impl/MsAlongBServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_lygk/along/service/impl/MsAlongBServiceImpl.java @@ -13,6 +13,7 @@ import com.yfd.platform.utils.DataSourceRequestUtil; import com.yfd.platform.utils.QgcQueryWrapperUtil; import org.springframework.stereotype.Service; +import java.util.Collections; import java.util.List; /** @@ -52,6 +53,13 @@ public class MsAlongBServiceImpl extends ServiceImpl i return dataSourceResult; } + @Override + public void delelteByIds(List ids) { + for (String id : ids) { + this.delelteByIds(Collections.singletonList(id)); + } + } + // @Override // public boolean saveOrUpdate(MsAlongB msAlongB) { // super.saveOrUpdate(msAlongB); diff --git a/backend/src/main/java/com/yfd/platform/qgc_sys/mapLayer/mapper/MsMapmoduleBMapper.java b/backend/src/main/java/com/yfd/platform/qgc_sys/mapLayer/mapper/MsMapmoduleBMapper.java index ee8da0e4..00b8523a 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_sys/mapLayer/mapper/MsMapmoduleBMapper.java +++ b/backend/src/main/java/com/yfd/platform/qgc_sys/mapLayer/mapper/MsMapmoduleBMapper.java @@ -109,6 +109,27 @@ public interface MsMapmoduleBMapper extends BaseMapper { + "" + "ORDER BY BMM.ORDER_INDEX, BML.ORDER_INDEX" + "") - List getModuleMapLegendList(@Param("moduleId") String moduleId); + List getModuleMapLegendListData(@Param("moduleId") String moduleId); + @Select("SELECT *\n" + + "FROM MS_MAPMODULE_B\n" + + "WHERE MODULE_ID = (\n" + + " SELECT msdmb.MODULE_ID\n" + + " FROM MS_MAPMODULE_B msdmb\n" + + " LEFT JOIN MS_MAPLEGEND_B mslmb ON msdmb.RES_ID = mslmb.ID\n" + + " LEFT JOIN MS_MAPLAYER_B msmab ON msmab.CODE = mslmb.LAYER_CODE\n" + + " WHERE msdmb.ID = #{id}\n" + + " AND msdmb.IS_DELETED = 0\n" + + ")\n" + + "AND RES_TYPE = 'layer'\n" + + "AND RES_ID = (\n" + + " SELECT msmab.id\n" + + " FROM MS_MAPMODULE_B msdmb\n" + + " LEFT JOIN MS_MAPLEGEND_B mslmb ON msdmb.RES_ID = mslmb.ID\n" + + " LEFT JOIN MS_MAPLAYER_B msmab ON msmab.CODE = mslmb.LAYER_CODE\n" + + " WHERE msdmb.ID = #{id}\n" + + " AND msdmb.IS_DELETED = 0\n" + + ")\n" + + "AND IS_DELETED = 0") + MsMapmoduleB selectLayerById(@Param("id") String id); } \ No newline at end of file diff --git a/backend/src/main/java/com/yfd/platform/qgc_sys/mapLayer/service/impl/MapLegendBizServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_sys/mapLayer/service/impl/MapLegendBizServiceImpl.java index 5ca81ae0..1ad9c34e 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_sys/mapLayer/service/impl/MapLegendBizServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_sys/mapLayer/service/impl/MapLegendBizServiceImpl.java @@ -148,7 +148,7 @@ public class MapLegendBizServiceImpl implements IMapLegendBizService { public List getModuleMapLegendList(String moduleId) { List list = new ArrayList<>(); // 通过 JOIN 查询 MS_MAPLEGEND_B 和 MS_MAPMODULE_B(单参数版本) - List bbiMapLegendList = msMapmoduleBMapper.getModuleMapLegendList(moduleId); + List bbiMapLegendList = msMapmoduleBMapper.getModuleMapLegendListData(moduleId); if (bbiMapLegendList == null || bbiMapLegendList.isEmpty()) { return list; diff --git a/backend/src/main/java/com/yfd/platform/qgc_sys/mapcfg/service/impl/MapmoduleBServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_sys/mapcfg/service/impl/MapmoduleBServiceImpl.java index 1b7b5098..75d92b56 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_sys/mapcfg/service/impl/MapmoduleBServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_sys/mapcfg/service/impl/MapmoduleBServiceImpl.java @@ -59,10 +59,12 @@ public class MapmoduleBServiceImpl extends ServiceImpl ids) { - if (ids != null) { - for (String id : ids) { - this.baseMapper.deleteById(id); + for (String id : ids) { + MsMapmoduleB msMapmoduleB = baseMapper.selectLayerById(id); + if (msMapmoduleB != null && msMapmoduleB.getId() != null){ + this.baseMapper.deleteById(msMapmoduleB.getId()); } + this.baseMapper.deleteById(id); } } From 85b4a1fdbd54fc4774b9edc42236a3d2c770d11e Mon Sep 17 00:00:00 2001 From: tangwei Date: Mon, 6 Jul 2026 18:10:59 +0800 Subject: [PATCH 15/26] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../qgc_sys/mapLayer/service/impl/MapLegendServiceImpl.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/backend/src/main/java/com/yfd/platform/qgc_sys/mapLayer/service/impl/MapLegendServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_sys/mapLayer/service/impl/MapLegendServiceImpl.java index 7e56a94f..29b8e0f9 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_sys/mapLayer/service/impl/MapLegendServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_sys/mapLayer/service/impl/MapLegendServiceImpl.java @@ -74,7 +74,7 @@ public class MapLegendServiceImpl extends ServiceImpl siblingWrapper = new LambdaQueryWrapper<>(); - siblingWrapper.eq(MsMaplegendB::getParentId, parent.getId()); + siblingWrapper.eq(MsMaplegendB::getParentId, parent.getId()) + .eq(MsMaplegendB::getIsDeleted, 0); List siblings = this.list(siblingWrapper); if (siblings.size() == 1 && id.equals(siblings.get(0).getId())) { MsMaplegendB updateParent = new MsMaplegendB(); From 5fa17e767ab23033d9863efd6bf07bee4b05f411 Mon Sep 17 00:00:00 2001 From: tangwei Date: Tue, 7 Jul 2026 10:28:42 +0800 Subject: [PATCH 16/26] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/SdEngInfoBHServiceImpl.java | 16 ++++++++-------- .../wq/service/impl/EnvWqDataServiceImpl.java | 14 +++++++------- .../wt/service/impl/SdWtMonitorServiceImpl.java | 2 +- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdEngInfoBHServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdEngInfoBHServiceImpl.java index a345ecdc..47046c92 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdEngInfoBHServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdEngInfoBHServiceImpl.java @@ -2690,10 +2690,10 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl "t.STCD"; - case "stnm", "ennm", "titleName" -> "t.STNM"; + case "stnm", "ennm", "titleName" -> "t.ENNM"; case "rvcd" -> "t.RVCD"; case "addvcd" -> "t.ADDVCD"; case "lgtd" -> "t.LGTD"; @@ -2901,9 +2901,9 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl "rvcdStepSort"; case "rstcdStepSort" -> "rstcdStepSort"; case "baseStepSort" -> "baseStepSort"; - case "ifEngSpecial" -> "ifEngSpecial"; - case "anchoPointState" -> "anchoPointState"; - case "endInstalledType" -> "endInstalledType"; + case "ifEngSpecial" -> "(CASE WHEN elec.configCount > 0 THEN 'true' WHEN elec.configCount IS NULL THEN 'false' ELSE 'false' END)"; + case "anchoPointState" -> "(CASE WHEN t.PRSC IN ('1','2') AND t.BLDSTT_CODE = 2 THEN 'large_eng_built' WHEN t.PRSC IN ('1','2') AND t.BLDSTT_CODE = 1 THEN 'large_eng_ubuilt' WHEN t.PRSC IN ('1','2') AND (t.BLDSTT_CODE = 0 OR t.BLDSTT_CODE IS NULL) THEN 'large_eng_nbuilt' WHEN t.PRSC IN ('3') AND t.BLDSTT_CODE = 2 THEN 'mid_eng_built' WHEN t.PRSC IN ('3') AND t.BLDSTT_CODE = 1 THEN 'mid_eng_ubuilt' WHEN t.PRSC IN ('3') AND (t.BLDSTT_CODE = 0 OR t.BLDSTT_CODE IS NULL) THEN 'mid_eng_nbuilt' END)"; + case "endInstalledType" -> "(CASE WHEN t.PRSC IN ('1','2') THEN 1 WHEN t.PRSC IN ('3') THEN 2 END)"; default -> null; }; } diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/wq/service/impl/EnvWqDataServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/wq/service/impl/EnvWqDataServiceImpl.java index cbc2bb8b..6ea50150 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/wq/service/impl/EnvWqDataServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wq/service/impl/EnvWqDataServiceImpl.java @@ -4575,12 +4575,12 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { .append("t.FHSTCD AS fhstcd, ") .append("t.ORDER_INDEX AS orderIndex, ") .append("eng.ENNM AS ennm, ") - .append("hb.BASE_NAME AS baseName, ") + .append("hb.BASENAME AS baseName, ") .append("hb.BASEID AS baseId, ") .append("eng.HBRVCD AS hbrvcd, ") - .append("NVL(hbrv.NAME, '') AS hbrvcdName, ") - .append("NVL(rvcd.NAME, '') AS rvcdName, ") - .append("NVL(addvcd.NAME, '') AS addvcdName, ") + .append("NVL(hbrv.HBRVNM, '') AS hbrvcdName, ") + .append("NVL(rvcd.RVNM, '') AS rvcdName, ") + .append("NVL(addvcd.ADDVNM, '') AS addvcdName, ") .append("NVL(along.ORDER_INDEX, 999999) AS rvcdStepSort, ") .append("NVL(rstSort.SORT, 999999) AS rstcdStepSort, ") .append("NVL(siteSort.SORT, 999999) AS siteStepSort, ") @@ -4590,9 +4590,9 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { .append("FROM SD_WQ_B_H t ") .append("LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = t.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 ") .append("LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = eng.BASE_ID AND NVL(hb.IS_DELETED, 0) = 0 ") - .append("LEFT JOIN SD_HBRV_DIC hbrv ON hbrv.CODE = eng.HBRVCD AND NVL(hbrv.IS_DELETED, 0) = 0 ") - .append("LEFT JOIN SD_RVCD_DIC rvcd ON rvcd.CODE = eng.RVCD AND NVL(rvcd.IS_DELETED, 0) = 0 ") - .append("LEFT JOIN SD_ADDVCD_DIC addvcd ON addvcd.CODE = eng.ADDVCD AND NVL(addvcd.IS_DELETED, 0) = 0 ") + .append("LEFT JOIN SD_HBRV_DIC hbrv ON hbrv.HBRVCD = eng.HBRVCD AND NVL(hbrv.IS_DELETED, 0) = 0 ") + .append("LEFT JOIN SD_RVCD_DIC rvcd ON rvcd.RVCD = eng.RVCD AND NVL(rvcd.IS_DELETED, 0) = 0 ") + .append("LEFT JOIN SD_ADDVCD_DIC addvcd ON addvcd.ADDVCD = eng.ADDVCD ") .append("LEFT JOIN MS_ALONG_B along ON along.RVCD = eng.HBRVCD AND along.CODE = 'common' AND NVL(along.IS_DELETED, 0) = 0 ") .append("LEFT JOIN ( ") .append(" SELECT det.SORT, cfg.RVCD, det.STCD ") diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/wt/service/impl/SdWtMonitorServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/wt/service/impl/SdWtMonitorServiceImpl.java index 87a25b85..b28551d8 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/wt/service/impl/SdWtMonitorServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wt/service/impl/SdWtMonitorServiceImpl.java @@ -2872,7 +2872,7 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService { .append("sttp.STTP_NAME AS sttpName, ") .append("t.DTIN AS dtin, ") .append("NULL AS stdSstate ") - .append("FROM SD_DFLTKW_B_H t ") + .append("FROM SD_DW_B_H t ") .append("LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = t.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 ") .append("LEFT JOIN SD_STTP_B sttp ON sttp.STTP_CODE = t.STTP AND NVL(sttp.IS_DELETED, 0) = 0 ") .append("WHERE NVL(t.IS_DELETED, 0) = 0 ") From 501d42ac2f3d2fcab291cbafeb3516b112b3e35a Mon Sep 17 00:00:00 2001 From: tangwei Date: Tue, 7 Jul 2026 11:20:44 +0800 Subject: [PATCH 17/26] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wq/service/impl/EnvWqDataServiceImpl.java | 223 +++++++++++++++++- .../src/main/resources/application-prod.yml | 8 +- 2 files changed, 214 insertions(+), 17 deletions(-) diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/wq/service/impl/EnvWqDataServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/wq/service/impl/EnvWqDataServiceImpl.java index 6ea50150..424620d3 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/wq/service/impl/EnvWqDataServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wq/service/impl/EnvWqDataServiceImpl.java @@ -4607,13 +4607,19 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { .append(" WHERE NVL(det.IS_DELETED, 0) = 0 AND NVL(cfg.IS_DELETED, 0) = 0 AND cfg.CODE = 'common' ") .append(") siteSort ON siteSort.RVCD = eng.HBRVCD AND siteSort.STCD = t.STCD ") .append("WHERE NVL(t.IS_DELETED, 0) = 0 ") - .append("AND NVL(t.USFL, 1) = 1 ") - .append("AND t.LGTD IS NOT NULL ") - .append("AND t.LTTD IS NOT NULL "); + .append("AND NVL(t.USFL, 1) = 1 "); + + Map paramMap = new HashMap<>(); + String filterSql = buildWqPointFilterCondition(dataSourceRequest.getFilter(), paramMap, new int[]{0}); + if (StrUtil.isNotBlank(filterSql)) { + sql.append(" AND ").append(filterSql); + } + + sql.append(buildWqPointOrderBySql(dataSourceRequest.getSort())); DataSourceLoadOptionsBase loadOptions = dataSourceRequest.toDevRequest(); Page page = loadOptions == null ? null : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake()); - List wqVoList = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), new HashMap<>(), EnvWqAnchorPointVo.class); + List wqVoList = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, EnvWqAnchorPointVo.class); if (CollectionUtils.isNotEmpty(wqVoList)) { List stcdList = wqVoList.stream() @@ -4622,15 +4628,7 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { .distinct() .collect(Collectors.toList()); - String wqDataSql = "SELECT STCD, TM, WQGRD, SFDB, WTMP, PH, DOX, CODMN, CODCR, BOD5, NH3N, TP, TN, CU, ZN, F, SE, ARS, HG, CD, CR6, PB, CN, VLPH, OIL, LAS, S2, FCG, CL, SO4, NO3, THRD, COND, FE, MN, AL, CHLA, CLARITY, TU, CYANO, TOD " + - "FROM ( " + - " SELECT t.*, ROW_NUMBER() OVER (PARTITION BY t.STCD ORDER BY t.TM DESC) AS rn " + - " FROM SD_WQ_R t " + - " WHERE t.STCD IN (" + String.join(",", stcdList.stream().map(s -> "'" + s + "'").collect(Collectors.toList())) + ") " + - " AND NVL(t.IS_DELETED, 0) = 0 " + - ") WHERE rn = 1"; - - List wqDataList = microservicDynamicSQLMapper.getAllListWithResultType(wqDataSql, new HashMap<>(), EnvWqDataVo.class); + List wqDataList = queryWqDataByStcdBatch(stcdList); Map wqDataMap = wqDataList.stream() .collect(Collectors.toMap(EnvWqDataVo::getStcd, Function.identity(), (oldValue, newValue) -> newValue)); @@ -4706,6 +4704,205 @@ public class EnvWqDataServiceImpl implements EnvWqDataService { return dataSourceResult; } + private List queryWqDataByStcdBatch(List stcdList) { + List resultList = new ArrayList<>(); + if (CollectionUtils.isEmpty(stcdList)) { + return resultList; + } + + int batchSize = 500; + List> batches = CollUtil.split(stcdList, batchSize); + + for (List batch : batches) { + String stcdParams = batch.stream() + .map(s -> "'" + s + "'") + .collect(Collectors.joining(",")); + + String wqDataSql = "SELECT STCD, TM, WQGRD, SFDB, WTMP, PH, DOX, CODMN, CODCR, BOD5, NH3N, TP, TN, CU, ZN, F, SE, ARS, HG, CD, CR6, PB, CN, VLPH, OIL, LAS, S2, FCG, CL, SO4, NO3, THRD, COND, FE, MN, AL, CHLA, CLARITY, TU, CYANO, TOD " + + "FROM ( " + + " SELECT t.*, ROW_NUMBER() OVER (PARTITION BY t.STCD ORDER BY t.TM DESC) AS rn " + + " FROM SD_WQ_R t " + + " WHERE t.STCD IN (" + stcdParams + ") " + + " AND NVL(t.IS_DELETED, 0) = 0 " + + ") WHERE rn = 1"; + + List batchList = microservicDynamicSQLMapper.getAllListWithResultType(wqDataSql, new HashMap<>(), EnvWqDataVo.class); + if (CollectionUtils.isNotEmpty(batchList)) { + resultList.addAll(batchList); + } + } + return resultList; + } + + private String buildWqPointFilterCondition(DataSourceRequest.FilterDescriptor filter, + Map paramMap, + int[] indexHolder) { + if (filter == null) { + return ""; + } + if (CollUtil.isNotEmpty(filter.getFilters())) { + List childConditions = new ArrayList<>(); + for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) { + String childSql = buildWqPointFilterCondition(child, paramMap, indexHolder); + if (StrUtil.isNotBlank(childSql)) { + childConditions.add(childSql); + } + } + if (childConditions.isEmpty()) { + return ""; + } + String logic = "or".equalsIgnoreCase(filter.getLogic()) ? " OR " : " AND "; + return "(" + String.join(logic, childConditions) + ")"; + } + String column = mapWqPointColumn(filter.getField()); + if (StrUtil.isBlank(column)) { + return ""; + } + String operator = StrUtil.blankToDefault(filter.getOperator(), "eq").toLowerCase(); + Object value = filter.getValue(); + if ("isnull".equals(operator)) { + return column + " IS NULL"; + } + if ("isnotnull".equals(operator)) { + return column + " IS NOT NULL"; + } + if ("isempty".equals(operator)) { + return "(" + column + " IS NULL OR " + column + " = '')"; + } + if ("isnotempty".equals(operator)) { + return "(" + column + " IS NOT NULL AND " + column + " <> '')"; + } + if ("in".equals(operator) || "ni".equals(operator)) { + List values = normalizeFilterValues(value); + if (values.isEmpty()) { + return ""; + } + List placeholders = new ArrayList<>(); + for (Object item : values) { + String key = "wqPointParam" + indexHolder[0]++; + paramMap.put(key, item); + placeholders.add("#{map." + key + "}"); + } + return column + ("ni".equals(operator) ? " NOT IN (" : " IN (") + String.join(", ", placeholders) + ")"; + } + if (value == null) { + return ""; + } + String key = "wqPointParam" + indexHolder[0]++; + return switch (operator) { + case "eq" -> { + paramMap.put(key, value); + yield column + " = #{map." + key + "}"; + } + case "neq" -> { + paramMap.put(key, value); + yield column + " <> #{map." + key + "}"; + } + case "contains" -> { + paramMap.put(key, "%" + value + "%"); + yield column + " LIKE #{map." + key + "}"; + } + case "doesnotcontain" -> { + paramMap.put(key, "%" + value + "%"); + yield column + " NOT LIKE #{map." + key + "}"; + } + case "startswith" -> { + paramMap.put(key, value + "%"); + yield column + " LIKE #{map." + key + "}"; + } + case "endswith" -> { + paramMap.put(key, "%" + value); + yield column + " LIKE #{map." + key + "}"; + } + case "gt" -> { + paramMap.put(key, value); + yield column + " > #{map." + key + "}"; + } + case "gte" -> { + paramMap.put(key, value); + yield column + " >= #{map." + key + "}"; + } + case "lt" -> { + paramMap.put(key, value); + yield column + " < #{map." + key + "}"; + } + case "lte" -> { + paramMap.put(key, value); + yield column + " <= #{map." + key + "}"; + } + default -> ""; + }; + } + + private String mapWqPointColumn(String field) { + if (StrUtil.isBlank(field)) { + return null; + } + return switch (field) { + case "stcd" -> "t.STCD"; + case "stnm" -> "t.STNM"; + case "sttp" -> "t.STTP"; + case "sttpCode" -> "t.STTP"; + case "lgtd" -> "t.LGTD"; + case "lttd" -> "t.LTTD"; + case "dtmel" -> "t.ELEV"; + case "stlc" -> "t.STLC"; + case "wwqtg" -> "t.WWQTG"; + case "dtinType" -> "t.DTIN_TYPE"; + case "rstcd" -> "t.RSTCD"; + case "fhstcd" -> "t.FHSTCD"; + case "orderIndex" -> "t.ORDER_INDEX"; + case "ennm" -> "eng.ENNM"; + case "baseName" -> "hb.BASENAME"; + case "baseId" -> "hb.BASEID"; + case "hbrvcd" -> "eng.HBRVCD"; + case "hbrvcdName" -> "hbrv.HBRVNM"; + case "rvcdName" -> "rvcd.RVNM"; + case "addvcdName" -> "addvcd.ADDVNM"; + case "rvcdStepSort" -> "rvcdStepSort"; + case "rstcdStepSort" -> "rstcdStepSort"; + case "siteStepSort" -> "siteStepSort"; + case "baseStepSort" -> "baseStepSort"; + default -> null; + }; + } + + private String buildWqPointOrderBySql(List sortList) { + if (CollUtil.isEmpty(sortList)) { + return " ORDER BY baseStepSort ASC, rvcdStepSort ASC, rstcdStepSort ASC, siteStepSort ASC, stnm ASC"; + } + List orderItems = new ArrayList<>(); + for (DataSourceRequest.SortDescriptor sortDescriptor : sortList) { + if (sortDescriptor == null || StrUtil.isBlank(sortDescriptor.getField())) { + continue; + } + String column = mapWqPointColumn(sortDescriptor.getField()); + if (StrUtil.isBlank(column)) { + continue; + } + String dir = "desc".equalsIgnoreCase(sortDescriptor.getDir()) || "des".equalsIgnoreCase(sortDescriptor.getDir()) ? "DESC" : "ASC"; + orderItems.add(column + " " + dir); + } + if (orderItems.isEmpty()) { + return " ORDER BY baseStepSort ASC, rvcdStepSort ASC, rstcdStepSort ASC, siteStepSort ASC, stnm ASC"; + } + return " ORDER BY " + String.join(", ", orderItems); + } + + private List normalizeFilterValues(Object value) { + List values = new ArrayList<>(); + if (value instanceof List) { + ((List) value).forEach(v -> { + if (v != null) { + values.add(v); + } + }); + } else if (value != null) { + values.add(value); + } + return values; + } + private String getAnchorPoint(EnvWqAnchorPointVo anchorPointVo) { Integer dtinType = anchorPointVo.getDtinType(); Integer sfdb = anchorPointVo.getSfdb(); diff --git a/backend/src/main/resources/application-prod.yml b/backend/src/main/resources/application-prod.yml index 48e5a037..a08b5045 100644 --- a/backend/src/main/resources/application-prod.yml +++ b/backend/src/main/resources/application-prod.yml @@ -111,10 +111,10 @@ spring: matching-strategy: ant_path_matcher data: redis: - host: ${REDIS_HOST:172.16.21.142} - port: ${REDIS_PORT:6379} - password: ${REDIS_PASSWORD:zny5678} - database: ${REDIS_DATABASE:15} + host: "${REDIS_HOST:172.16.21.142}" + port: "${REDIS_PORT:6379}" + password: "${REDIS_PASSWORD:zny5678}" + database: "${REDIS_DATABASE:15}" timeout: 10000ms lettuce: pool: From 195ccc58d1dc19f1f80378c7811ada42dbe72ef6 Mon Sep 17 00:00:00 2001 From: tangwei Date: Tue, 7 Jul 2026 11:30:00 +0800 Subject: [PATCH 18/26] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/yfd/platform/config/RedisConfig.java | 4 ++-- .../qgc_eng/eq/service/impl/EngEqDataServiceImpl.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/backend/src/main/java/com/yfd/platform/config/RedisConfig.java b/backend/src/main/java/com/yfd/platform/config/RedisConfig.java index 7f32bf5d..e5f1f5f9 100644 --- a/backend/src/main/java/com/yfd/platform/config/RedisConfig.java +++ b/backend/src/main/java/com/yfd/platform/config/RedisConfig.java @@ -61,8 +61,8 @@ public class RedisConfig { RedisCacheConfiguration defaultConfig = RedisCacheConfiguration.defaultCacheConfig() .prefixCacheNameWith("qgc:") .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer())) - .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(genericJackson2JsonRedisSerializer())) - .entryTtl(Duration.ofMinutes(30)); + .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(genericJackson2JsonRedisSerializer())); +// .entryTtl(Duration.ofMinutes(30)); // Map cacheConfigs = new HashMap<>(); // cacheConfigs.put("dictCache", defaultConfig.entryTtl(Duration.ofHours(6))); diff --git a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/impl/EngEqDataServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/impl/EngEqDataServiceImpl.java index 6cc84b77..81365936 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/impl/EngEqDataServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/impl/EngEqDataServiceImpl.java @@ -5915,8 +5915,8 @@ public class EngEqDataServiceImpl implements EngEqDataService { .append("a.LTTD AS lttd, ") .append("a.ELEV AS dtmel, ") .append("a.BLDSTT_CODE AS bldsttCode, ") - .append("a.RVCD AS rvcd, ") - .append("a.ADDVCD AS addvcd, ") +// .append("a.RVCD AS rvcd, ") +// .append("a.ADDVCD AS addvcd, ") .append("NVL(siteSort.SORT, 999999) AS siteStepSort, ") .append("NVL(along.ORDER_INDEX, 999999) AS rvcdStepSort, ") .append("NVL(rstSort.SORT, 999999) AS rstcdStepSort, ") From 8c9f25c90f1ebe82e36b1da62d4bfb535a38fb58 Mon Sep 17 00:00:00 2001 From: tangwei Date: Tue, 7 Jul 2026 13:38:59 +0800 Subject: [PATCH 19/26] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E5=9C=B0?= =?UTF-8?q?=E5=9B=BE=E6=9F=A5=E8=AF=A2=E6=8E=A5=E5=8F=A3=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fb/service/impl/FbStationServiceImpl.java | 50 ++++++++++++++----- .../fh/service/impl/FhHabitatServiceImpl.java | 22 +++++++- 2 files changed, 59 insertions(+), 13 deletions(-) diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fb/service/impl/FbStationServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/fb/service/impl/FbStationServiceImpl.java index f3b3df70..80cc3408 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/fb/service/impl/FbStationServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fb/service/impl/FbStationServiceImpl.java @@ -4654,21 +4654,32 @@ public class FbStationServiceImpl implements FbStationService { Map paramMap = new HashMap<>(); - if (StrUtil.isNotEmpty(sttp)) { - sql.append(" AND a.STTP = :sttp "); - paramMap.put("sttp", sttp); - } - if (StrUtil.isNotEmpty(rstcd)) { - sql.append(" AND a.RSTCD LIKE '%' || :rstcd || '%' "); - paramMap.put("rstcd", rstcd); - } - if (StrUtil.isNotEmpty(bldsttCcode)) { - sql.append(" AND a.BLDSTT_CODE = :bldsttCcode "); - paramMap.put("bldsttCcode", Integer.parseInt(bldsttCcode)); +// if (StrUtil.isNotEmpty(sttp)) { +// sql.append(" AND a.STTP = #{sttp} "); +// paramMap.put("sttp", sttp); +// } +// if (StrUtil.isNotEmpty(rstcd)) { +// sql.append(" AND a.RSTCD LIKE '%' || #{rstcd} || '%' "); +// paramMap.put("rstcd", rstcd); +// } +// if (StrUtil.isNotEmpty(bldsttCcode)) { +// sql.append(" AND a.BLDSTT_CODE = #{bldsttCcode} "); +// paramMap.put("bldsttCcode", Integer.parseInt(bldsttCcode)); +// } + + + + String filterSql = QgcQueryWrapperUtil.buildFilterCondition( + dataSourceRequest == null ? null : dataSourceRequest.getFilter(), + paramMap, + new int[]{0}, + this::mapWeFvColumn + ); + if (StrUtil.isNotBlank(filterSql)) { + sql.append("AND ").append(filterSql).append(" "); } sql.append(" ORDER BY NVL(siteSort.SORT, 999999) ASC "); - Page page = devRequest == null ? null : QgcQueryWrapperUtil.buildPage(devRequest, devRequest.getSkip(), devRequest.getTake()); List list = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, FbTracingPointVo.class); @@ -4686,6 +4697,21 @@ public class FbStationServiceImpl implements FbStationService { return dataSourceResult; } + private String mapWeFvColumn(String field) { + if (StrUtil.isBlank(field)) { + return null; + } + return switch (field.toLowerCase()) { + case "rstcd" -> "a.RSTCD"; + case "stcd" -> "a.STCD"; + case "sttp" -> "a.STTP"; + case "bldsttCcode" -> "a.BLDSTT_CODE"; + case "lgtd" -> "a.LGTD"; + default -> null; + }; + } + + private List getPointLegend(List voList) { for (FbTracingPointVo pointVo : voList) { Integer bldstt = pointVo.getBldstt(); diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fh/service/impl/FhHabitatServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/fh/service/impl/FhHabitatServiceImpl.java index 3cca065f..0efb414b 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/fh/service/impl/FhHabitatServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fh/service/impl/FhHabitatServiceImpl.java @@ -1933,7 +1933,7 @@ public class FhHabitatServiceImpl implements FhHabitatService { dataSourceResult.setTotal(0L); return dataSourceResult; } - + Map paramMap = new HashMap<>(); StringBuilder sql = new StringBuilder(); sql.append("SELECT ") .append("t.BASE_ID AS baseId, ") @@ -1967,6 +1967,15 @@ public class FhHabitatServiceImpl implements FhHabitatService { .append("WHERE t.LGTD IS NOT NULL AND t.LTTD IS NOT NULL "); DataSourceLoadOptionsBase loadOptions = dataSourceRequest.toDevRequest(); + String filterSql = QgcQueryWrapperUtil.buildFilterCondition( + dataSourceRequest == null ? null : dataSourceRequest.getFilter(), + paramMap, + new int[]{0}, + this::mapWeFvColumn + ); + if (StrUtil.isNotBlank(filterSql)) { + sql.append("AND ").append(filterSql).append(" "); + } Page page = loadOptions == null ? null : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake()); List vaVpList = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), new HashMap<>(), FhHaVapVo.class); @@ -1994,4 +2003,15 @@ public class FhHabitatServiceImpl implements FhHabitatService { dataSourceResult.setTotal(page == null ? vaVpList.size() : page.getTotal()); return dataSourceResult; } + + private String mapWeFvColumn(String field) { + if (StrUtil.isBlank(field)) { + return null; + } + return switch (field.toLowerCase()) { + case "sttpCode" -> "t.sttp"; + case "lgtd" -> "t.lgtd"; + default -> null; + }; + } } From 6c521d9d847dffcf52713d1bb6f3c4a412ad3dee Mon Sep 17 00:00:00 2001 From: tangwei Date: Tue, 7 Jul 2026 14:40:04 +0800 Subject: [PATCH 20/26] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E5=9C=B0?= =?UTF-8?q?=E5=9B=BE=E6=9F=A5=E8=AF=A2=E6=8E=A5=E5=8F=A3=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fb/service/impl/FbStationServiceImpl.java | 2 +- .../fh/service/impl/FhHabitatServiceImpl.java | 4 +- .../service/impl/SdWtMonitorServiceImpl.java | 67 +++++++++++++------ 3 files changed, 48 insertions(+), 25 deletions(-) diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fb/service/impl/FbStationServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/fb/service/impl/FbStationServiceImpl.java index 80cc3408..1712f20c 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/fb/service/impl/FbStationServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fb/service/impl/FbStationServiceImpl.java @@ -4705,7 +4705,7 @@ public class FbStationServiceImpl implements FbStationService { case "rstcd" -> "a.RSTCD"; case "stcd" -> "a.STCD"; case "sttp" -> "a.STTP"; - case "bldsttCcode" -> "a.BLDSTT_CODE"; + case "bldsttccode" -> "a.BLDSTT_CODE"; case "lgtd" -> "a.LGTD"; default -> null; }; diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fh/service/impl/FhHabitatServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/fh/service/impl/FhHabitatServiceImpl.java index 0efb414b..aa5bad69 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/fh/service/impl/FhHabitatServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fh/service/impl/FhHabitatServiceImpl.java @@ -1977,7 +1977,7 @@ public class FhHabitatServiceImpl implements FhHabitatService { sql.append("AND ").append(filterSql).append(" "); } Page page = loadOptions == null ? null : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake()); - List vaVpList = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), new HashMap<>(), FhHaVapVo.class); + List vaVpList = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, FhHaVapVo.class); for (FhHaVapVo vo : vaVpList) { String bldsttCcode = vo.getBldsttCcode(); @@ -2009,7 +2009,7 @@ public class FhHabitatServiceImpl implements FhHabitatService { return null; } return switch (field.toLowerCase()) { - case "sttpCode" -> "t.sttp"; + case "sttpcode" -> "t.STTP_CODE"; case "lgtd" -> "t.lgtd"; default -> null; }; diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/wt/service/impl/SdWtMonitorServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/wt/service/impl/SdWtMonitorServiceImpl.java index b28551d8..127a19cc 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/wt/service/impl/SdWtMonitorServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wt/service/impl/SdWtMonitorServiceImpl.java @@ -26,6 +26,7 @@ import com.yfd.platform.qgc_env.wt.mapper.SdWtMonitorMapper; import com.yfd.platform.qgc_env.wt.utils.SiteAvoidanceUtils; import com.yfd.platform.qgc_env.wt.service.SdWtMonitorService; import com.yfd.platform.utils.QgcQueryWrapperUtil; +import com.yfd.platform.utils.SecurityUtils; import jakarta.annotation.Resource; import lombok.Data; import org.springframework.jdbc.core.JdbcTemplate; @@ -115,7 +116,7 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService { "t.JCDT AS jcdt, " + "t.WDDT AS wddt, " + "t.BLDSTT_CODE AS bldsttCode, " + - "CASE WHEN t.BLDSTT_CODE =2 THEN '已建' WHEN t.BLDSTT_CODE =1 THEN '在建' ELSE '未建/规划' END AS bldsttCcodeName, "+ + "CASE WHEN t.BLDSTT_CODE =2 THEN '已建' WHEN t.BLDSTT_CODE =1 THEN '在建' ELSE '未建/规划' END AS bldsttCcodeName, " + "t.INV AS inv, " + "t.INVINMN AS invinmn, " + "t.INTRODUCE AS introduce, " + @@ -127,7 +128,7 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService { "t.DTIN_TYPE AS dtinType, " + "t.DTIN_TM AS dtinTm, " + "t.MWAY AS mway, " + - "CASE NVL(t.MWAY, 0) WHEN 1 THEN '人工' WHEN 2 THEN '自动' ELSE '未知' END AS mwayName , "+ + "CASE NVL(t.MWAY, 0) WHEN 1 THEN '人工' WHEN 2 THEN '自动' ELSE '未知' END AS mwayName , " + "t.STINDX AS stindx, " + "t.ORDER_INDEX AS orderIndex, " + "t.DMSTCD AS dmstcd, " + @@ -445,7 +446,7 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService { } sql.append(buildYearDetailOrderBySql(dataSourceRequest == null ? null : dataSourceRequest.getSort())); - Page page = QgcQueryWrapperUtil.buildPage(loadOptions,loadOptions.getSkip(), loadOptions.getTake()); + Page page = QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake()); List list = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, SdYearDetailVO.class); for (SdYearDetailVO vo : list) { vo.setActualTemp(vo.getWt()); @@ -490,7 +491,7 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService { } sql.append(buildMonthDetailOrderBySql(dataSourceRequest == null ? null : dataSourceRequest.getSort())); - Page page = QgcQueryWrapperUtil.buildPage(loadOptions,loadOptions.getSkip(), loadOptions.getTake()); + Page page = QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake()); List list = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, SdMonthDetailVO.class); DataSourceResult result = new DataSourceResult<>(); result.setData(list); @@ -518,7 +519,7 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService { Map paramMap = new HashMap<>(); paramMap.put("stcd", stcd); WtrvVo vo = (WtrvVo) microservicDynamicSQLMapper.getOneBySqlWithResultType(sql, paramMap, WtrvVo.class); - if (vo == null ) { + if (vo == null) { return buildDefaultWtrvVo(stcd); } return vo; @@ -577,7 +578,7 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService { paramMap.put("baseId", baseId); } - Page page = QgcQueryWrapperUtil.buildPage(loadOptions,loadOptions.getSkip(), loadOptions.getTake()); + Page page = QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake()); List wtFishVoList = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, WtFishVo.class); String hbrvcd = wtFishVoList.isEmpty() ? null : wtFishVoList.get(0).getHbrvcd(); @@ -850,7 +851,7 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService { } sql.append(buildVmsstbprptOrderBySql(dataSourceRequest.getSort())); - Page page = QgcQueryWrapperUtil.buildPage(loadOptions,loadOptions.getSkip(), loadOptions.getTake()); + Page page = QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake()); List list = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, SdWtBaseInfoVO.class); DataSourceResult result = new DataSourceResult<>(); @@ -1153,7 +1154,7 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService { appendCxDetailOrderBy(sql, dataSourceRequest.getSort()); DataSourceLoadOptionsBase loadOptions = dataSourceRequest.toDevRequest(); - Page page = QgcQueryWrapperUtil.buildPage(loadOptions,loadOptions.getSkip(), loadOptions.getTake()); + Page page = QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake()); List rowList = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, WtCxDetailRow.class); List verticalList = getVerticals(rowList, wtDeviceType); @@ -2954,7 +2955,7 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService { " wt.LTTD AS lttd,\n" + " wt.WT_DEVICE_TYPE AS deviceType,\n" + " wt.ELEV AS dtmel,\n" + - " wt.FHSTNM AS fhstnm,\n" + +// " wt.FHSTNM AS fhstnm,\n" + " wt.MWAY AS mway,\n" + " eng.RVCD AS rvcd,\n" + " eng.ADDVCD AS addvcd,\n" + @@ -2971,21 +2972,30 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService { "LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = wt.RSTCD AND NVL(eng.IS_DELETED, 0) = 0\n" + "LEFT JOIN SD_WTENGRLTN_B rel ON rel.STCD = wt.STCD AND NVL(rel.IS_DELETED, 0) = 0\n" + "WHERE NVL(wt.IS_DELETED, 0) = 0 AND wt.STTP IN ('WTRV', 'WTVT') AND wt.LGTD IS NOT NULL AND wt.LTTD IS NOT NULL "); - - if (StrUtil.isNotBlank(sttpCode)) { - sql.append(" AND wt.STTP = #{map.sttpCode} "); - } - if (StrUtil.isNotBlank(dtinType)) { - sql.append(" AND wt.DTIN_TYPE = #{map.dtinType} "); - } - Map paramMap = new HashMap<>(); - if (StrUtil.isNotBlank(sttpCode)) { - paramMap.put("sttpCode", sttpCode); - } - if (StrUtil.isNotBlank(dtinType)) { - paramMap.put("dtinType", dtinType); + String filterSql = QgcQueryWrapperUtil.buildFilterCondition( + dataSourceRequest == null ? null : dataSourceRequest.getFilter(), + paramMap, + new int[]{0}, + this::mapWeFvColumn + ); + if (StrUtil.isNotBlank(filterSql)) { + sql.append("AND ").append(filterSql).append(" "); } +// if (StrUtil.isNotBlank(sttpCode)) { +// sql.append(" AND wt.STTP = #{map.sttpCode} "); +// } +// if (StrUtil.isNotBlank(dtinType)) { +// sql.append(" AND wt.DTIN_TYPE = #{map.dtinType} "); +// } +// +// Map paramMap = new HashMap<>(); +// if (StrUtil.isNotBlank(sttpCode)) { +// paramMap.put("sttpCode", sttpCode); +// } +// if (StrUtil.isNotBlank(dtinType)) { +// paramMap.put("dtinType", dtinType); +// } List sort = dataSourceRequest.getSort(); if (sort != null && !sort.isEmpty()) { @@ -3035,4 +3045,17 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService { return dataSourceResult; } + private String mapWeFvColumn(String field) { + if (StrUtil.isBlank(field)) { + return null; + } + return switch (field.toLowerCase()) { + case "sttpcode" -> "wt.STTP"; + case "dtintype" -> "wt.DTIN_TYPE"; + case "lgtd" -> "wt.LGTD"; + case "fhstcd" -> "wt.FHSTCD"; + default -> null; + }; + } + } From 58fec2e6f19a98c3d173556b6f4bbf404fd72954 Mon Sep 17 00:00:00 2001 From: tangwei Date: Tue, 7 Jul 2026 15:20:16 +0800 Subject: [PATCH 21/26] =?UTF-8?q?fix:=20=E7=94=B5=E7=AB=99=E7=BB=9F?= =?UTF-8?q?=E8=AE=A1=E7=8A=B6=E6=80=81=E6=9D=A1=E4=BB=B6=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../platform/qgc_eng/eq/service/impl/EngEqDataServiceImpl.java | 1 + 1 file changed, 1 insertion(+) diff --git a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/impl/EngEqDataServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/impl/EngEqDataServiceImpl.java index 81365936..3ffbb034 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/impl/EngEqDataServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/impl/EngEqDataServiceImpl.java @@ -5498,6 +5498,7 @@ public class EngEqDataServiceImpl implements EngEqDataService { case "bldsttCcode" -> "t.bldsttCcode"; case "dtinEnv" -> "t.dtinEnv"; case "DTIN" -> "t.dtin"; + case "dtin" -> "t.dtin"; case "runState" -> "t.runState"; case "baseStepSort" -> "NVL(t.baseStepSort, 999999)"; case "rvcdStepSort" -> "NVL(t.rvcdStepSort, 999999)"; From d9e15f97365e897c449e084d2272e84944f80beb Mon Sep 17 00:00:00 2001 From: tangwei Date: Tue, 7 Jul 2026 15:44:55 +0800 Subject: [PATCH 22/26] =?UTF-8?q?feat:=20=E6=A0=96=E6=81=AF=E5=9C=B0?= =?UTF-8?q?=E5=85=B3=E8=81=94=E7=AB=99=E7=82=B9=E6=8F=8F=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fh/controller/FhHabitatController.java | 6 + .../qgc_env/fh/entity/vo/FhPointVo.java | 67 +++++++++ .../qgc_env/fh/service/FhHabitatService.java | 3 + .../fh/service/impl/FhHabitatServiceImpl.java | 138 ++++++++++++++++++ 4 files changed, 214 insertions(+) create mode 100644 backend/src/main/java/com/yfd/platform/qgc_env/fh/entity/vo/FhPointVo.java diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fh/controller/FhHabitatController.java b/backend/src/main/java/com/yfd/platform/qgc_env/fh/controller/FhHabitatController.java index 1ab1d44d..8c303c5e 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/fh/controller/FhHabitatController.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fh/controller/FhHabitatController.java @@ -77,4 +77,10 @@ public class FhHabitatController { public ResponseResult getFhvapKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) { return ResponseResult.successData(fhHabitatService.getFhvapKendoListCust(dataSourceRequest)); } + + @PostMapping("/fhvap/fhPoint/GetKendoListCust") + @Operation(summary = "栖息地关联站点描点") + public ResponseResult getFhPoint(@RequestBody DataSourceRequest dataSourceRequest) { + return ResponseResult.successData(fhHabitatService.getFhPoint(dataSourceRequest)); + } } diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fh/entity/vo/FhPointVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/fh/entity/vo/FhPointVo.java new file mode 100644 index 00000000..6beebf5f --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fh/entity/vo/FhPointVo.java @@ -0,0 +1,67 @@ +package com.yfd.platform.qgc_env.fh.entity.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.math.BigDecimal; + +@Data +@Accessors(chain = true) +@Schema(description = "栖息地关联站点描点") +public class FhPointVo implements Serializable { + + private static final long serialVersionUID = 1L; + + @Schema(description = "所属栖息地编码") + private String fhstcd; + + @Schema(description = "站码") + private String stcd; + + @Schema(description = "站名") + private String stnm; + + @Schema(description = "所属电站名称") + private String ennm; + + @Schema(description = "经度") + private BigDecimal lgtd; + + @Schema(description = "纬度") + private BigDecimal lttd; + + @Schema(description = "基地编码") + private String baseId; + + @Schema(description = "基地名称") + private String baseName; + + @Schema(description = "所属流域编码") + private String rvcd; + + @Schema(description = "所属流域名称") + private String rvcdName; + + @Schema(description = "所属电站编码") + private String rstcd; + + @Schema(description = "所属站类编码") + private String sttpCode; + + @Schema(description = "基面高程") + private BigDecimal dtmel; + + @Schema(description = "是否接入") + private Integer dtin; + + @Schema(description = "建设状态分类") + private String bldsttCcode; + + @Schema(description = "描点状态") + private String anchoPointState; + + @Schema(description = "出入库标识(1 入库水温, 2 出库水温, 3 非出入库水温)") + private Integer ioType; +} diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fh/service/FhHabitatService.java b/backend/src/main/java/com/yfd/platform/qgc_env/fh/service/FhHabitatService.java index 12e188e6..f279b5a0 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/fh/service/FhHabitatService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fh/service/FhHabitatService.java @@ -6,6 +6,7 @@ import com.yfd.platform.qgc_env.fh.entity.ao.FhDefaultAo; import com.yfd.platform.qgc_env.fh.entity.vo.FhBaseInfoVo; import com.yfd.platform.qgc_env.fh.entity.vo.FhDefaultVo; import com.yfd.platform.qgc_env.fh.entity.vo.FhHaVapVo; +import com.yfd.platform.qgc_env.fh.entity.vo.FhPointVo; import com.yfd.platform.qgc_env.fh.entity.vo.HabitatVo; public interface FhHabitatService { @@ -27,4 +28,6 @@ public interface FhHabitatService { DataSourceResult getStTbYsBVoKendoListCust(DataSourceRequest dataSourceRequest); DataSourceResult getFhvapKendoListCust(DataSourceRequest dataSourceRequest); + + DataSourceResult getFhPoint(DataSourceRequest dataSourceRequest); } diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fh/service/impl/FhHabitatServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/fh/service/impl/FhHabitatServiceImpl.java index aa5bad69..9156d14b 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/fh/service/impl/FhHabitatServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fh/service/impl/FhHabitatServiceImpl.java @@ -17,6 +17,7 @@ import com.yfd.platform.qgc_env.fh.entity.ao.FhDefaultAo; import com.yfd.platform.qgc_env.fh.entity.vo.FhBaseInfoVo; import com.yfd.platform.qgc_env.fh.entity.vo.FhDefaultVo; import com.yfd.platform.qgc_env.fh.entity.vo.FhHaVapVo; +import com.yfd.platform.qgc_env.fh.entity.vo.FhPointVo; import com.yfd.platform.qgc_env.fh.entity.vo.HabitatVo; import com.yfd.platform.qgc_env.fh.entity.vo.FhMsstbprptVo; import com.yfd.platform.qgc_env.fh.entity.vo.FhSdriverdayVo; @@ -2004,6 +2005,120 @@ public class FhHabitatServiceImpl implements FhHabitatService { return dataSourceResult; } + @Override + public DataSourceResult getFhPoint(DataSourceRequest dataSourceRequest) { + DataSourceResult result = new DataSourceResult<>(); + result.setAggregates(new HashMap<>()); + + DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest(); + Map paramMap = new HashMap<>(); + StringBuilder sql = new StringBuilder(); + sql.append("SELECT ") + .append("t.fhstcd AS fhstcd, ") + .append("t.stcd AS stcd, ") + .append("t.stnm AS stnm, ") + .append("eng.ENNM AS ennm, ") + .append("t.lgtd AS lgtd, ") + .append("t.lttd AS lttd, ") + .append("t.baseId AS baseId, ") + .append("hb.BASENAME AS baseName, ") + .append("t.rvcd AS rvcd, ") + .append("rv.RVNM AS rvcdName, ") + .append("t.rstcd AS rstcd, ") + .append("t.sttpCode AS sttpCode, ") + .append("t.dtmel AS dtmel, ") + .append("t.dtin AS dtin, ") + .append("t.bldsttCcode AS bldsttCcode, ") + .append("t.ioType AS ioType ") + .append("FROM (") + .append("SELECT fh.STCD AS fhstcd, wq.STCD AS stcd, wq.STNM AS stnm, ") + .append(" wq.LGTD AS lgtd, wq.LTTD AS lttd, fh.BASE_ID AS baseId, ") + .append(" null AS rvcd, wq.RSTCD AS rstcd, ") + .append(" 'WQ' AS sttpCode, wq.ELEV AS dtmel, wq.DTIN AS dtin, ") + .append(" TO_CHAR(wq.BLDSTT_CODE) AS bldsttCcode, CAST(NULL AS NUMBER) AS ioType ") + .append("FROM SD_FHBT_B_H fh ") + .append("INNER JOIN SD_WQ_B_H wq ON fh.STCD = wq.FHSTCD ") + .append("WHERE NVL(fh.IS_DELETED, 0) = 0 ") + .append(" AND NVL(wq.IS_DELETED, 0) = 0 ") + .append(" AND fh.BASE_ID <> 'other' ") + .append(" AND wq.LGTD IS NOT NULL ") + .append("UNION ALL ") + .append("SELECT fh.STCD AS fhstcd, wt.STCD AS stcd, wt.STNM AS stnm, ") + .append(" wt.LGTD AS lgtd, wt.LTTD AS lttd, fh.BASE_ID AS baseId, ") + .append(" NVL(fh.RVCD, engWt.RVCD) AS rvcd, wt.RSTCD AS rstcd, ") + .append(" 'WTRV' AS sttpCode, wt.ELEV AS dtmel, wt.DTIN AS dtin, ") + .append(" TO_CHAR(wt.BLDSTT_CODE) AS bldsttCcode, ") + .append(" CASE WHEN wt.WT_TYPE = 'IWT' THEN 1 ") + .append(" WHEN wt.WT_TYPE = 'DWT' THEN 2 ") + .append(" ELSE 3 END AS ioType ") + .append("FROM SD_FHBT_B_H fh ") + .append("INNER JOIN SD_WT_B_H wt ON fh.STCD = wt.FHSTCD ") + .append("LEFT JOIN SD_ENGINFO_B_H engWt ON engWt.STCD = wt.RSTCD AND NVL(engWt.IS_DELETED, 0) = 0 ") + .append("WHERE NVL(fh.IS_DELETED, 0) = 0 ") + .append(" AND NVL(wt.IS_DELETED, 0) = 0 ") + .append(" AND fh.BASE_ID <> 'other' ") + .append(" AND wt.LGTD IS NOT NULL ") + .append(" AND wt.STTP = 'WTRV' ") + .append("UNION ALL ") + .append("SELECT fh.STCD AS fhstcd, rv.STCD AS stcd, rv.STNM AS stnm, ") + .append(" rv.LGTD AS lgtd, rv.LTTD AS lttd, fh.BASE_ID AS baseId, ") + .append(" NVL(fh.RVCD, engRv.RVCD) AS rvcd, rv.RSTCD AS rstcd, ") + .append(" 'ZQ' AS sttpCode, rv.ELEV AS dtmel, rv.DTIN AS dtin, ") + .append(" TO_CHAR(rv.BLDSTT_CODE) AS bldsttCcode, CAST(NULL AS NUMBER) AS ioType ") + .append("FROM SD_FHBT_B_H fh ") + .append("INNER JOIN SD_RIVER_B_H rv ON fh.STCD = rv.FHSTCD ") + .append("LEFT JOIN SD_ENGINFO_B_H engRv ON engRv.STCD = rv.RSTCD AND NVL(engRv.IS_DELETED, 0) = 0 ") + .append("WHERE NVL(fh.IS_DELETED, 0) = 0 ") + .append(" AND NVL(rv.IS_DELETED, 0) = 0 ") + .append(" AND fh.BASE_ID <> 'other' ") + .append(" AND rv.LGTD IS NOT NULL ") + .append(" AND rv.STTP = 'ZQ' ") + .append("UNION ALL ") + .append("SELECT fh.STCD AS fhstcd, vd.STCD AS stcd, vd.STNM AS stnm, ") + .append(" vd.LGTD AS lgtd, vd.LTTD AS lttd, fh.BASE_ID AS baseId, ") + .append(" NVL(vd.RVCD, fh.RVCD) AS rvcd, vd.RSTCD AS rstcd, ") + .append(" 'VD' AS sttpCode, vd.ELEV AS dtmel, vd.DTIN AS dtin, ") + .append(" TO_CHAR(vd.BLDSTT_CODE) AS bldsttCcode, CAST(NULL AS NUMBER) AS ioType ") + .append("FROM SD_FHBT_B_H fh ") + .append("INNER JOIN SD_VDINFO_B vd ON fh.STCD = vd.FHSTCD ") + .append("WHERE NVL(fh.IS_DELETED, 0) = 0 ") + .append(" AND fh.BASE_ID <> 'other' ") + .append(" AND vd.LGTD IS NOT NULL ") + .append(") t ") + .append("LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = t.rstcd AND NVL(eng.IS_DELETED, 0) = 0 ") + .append("LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = t.baseId AND NVL(hb.IS_DELETED, 0) = 0 ") + .append("LEFT JOIN SD_RVCD_DIC rv ON rv.RVCD = t.rvcd ") + .append("WHERE 1 = 1 "); + + String filterSql = QgcQueryWrapperUtil.buildFilterCondition( + dataSourceRequest == null ? null : dataSourceRequest.getFilter(), + paramMap, + new int[]{0}, + this::mapFhPointColumn + ); + if (StrUtil.isNotBlank(filterSql)) { + sql.append("AND ").append(filterSql).append(" "); + } + sql.append("ORDER BY t.fhstcd, t.sttpCode, t.stcd"); + + List list = microservicDynamicSQLMapper.getAllListWithResultType(sql.toString(), paramMap, FhPointVo.class); + for (FhPointVo vo : list) { + String sttpCode = StrUtil.blankToDefault(vo.getSttpCode(), ""); + if ("WQ".equalsIgnoreCase(sttpCode)) { + vo.setAnchoPointState("FH_WQ"); + } else if ("WTRV".equalsIgnoreCase(sttpCode)) { + vo.setAnchoPointState("FH_WTRV"); + } else if ("ZQ".equalsIgnoreCase(sttpCode)) { + vo.setAnchoPointState("FH_ZQ"); + } else if ("VD".equalsIgnoreCase(sttpCode)) { + vo.setAnchoPointState("FH_VD"); + } + } + result.setData(list); + result.setTotal((long) list.size()); + return result; + } + private String mapWeFvColumn(String field) { if (StrUtil.isBlank(field)) { return null; @@ -2014,4 +2129,27 @@ public class FhHabitatServiceImpl implements FhHabitatService { default -> null; }; } + + private String mapFhPointColumn(String field) { + if (StrUtil.isBlank(field)) { + return null; + } + return switch (field.toLowerCase()) { + case "fhstcd" -> "t.fhstcd"; + case "stcd" -> "t.stcd"; + case "stnm" -> "t.stnm"; + case "ennm" -> "eng.ENNM"; + case "baseid" -> "t.baseId"; + case "basename" -> "hb.BASENAME"; + case "rvcd" -> "t.rvcd"; + case "rvcdname" -> "rv.RVNM"; + case "rstcd" -> "t.rstcd"; + case "sttpcode" -> "t.sttpCode"; + case "dtin" -> "t.dtin"; + case "bldsttccode" -> "t.bldsttCcode"; + case "lgtd" -> "t.lgtd"; + case "lttd" -> "t.lttd"; + default -> null; + }; + } } From 645b97435c748d6b2ee19c9a214d3d5752e6f7e8 Mon Sep 17 00:00:00 2001 From: tangwei Date: Tue, 7 Jul 2026 16:15:49 +0800 Subject: [PATCH 23/26] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/FishDraftDataController.java | 51 ++++++- .../impl/FishDraftDataServiceImpl.java | 140 ++++++++++++++---- 2 files changed, 158 insertions(+), 33 deletions(-) diff --git a/backend/src/main/java/com/yfd/platform/qgc_data/controller/FishDraftDataController.java b/backend/src/main/java/com/yfd/platform/qgc_data/controller/FishDraftDataController.java index 4399f5e5..3534edde 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_data/controller/FishDraftDataController.java +++ b/backend/src/main/java/com/yfd/platform/qgc_data/controller/FishDraftDataController.java @@ -60,6 +60,8 @@ import java.util.*; @Slf4j public class FishDraftDataController { + private static final int IN_QUERY_BATCH_SIZE = 900; + @Resource private IFishDraftDataService fishDraftDataService; @@ -368,11 +370,10 @@ public class FishDraftDataController { @PostMapping("/batchApproveByApprovalId") @Operation(summary = "根据审批批次全部审批通过") public ResponseResult batchApproveByApprovalId(@RequestBody BatchApproveRequest request) { - if (request.getApprovalIds().isEmpty()) { + if (request.getApprovalIds() == null || request.getApprovalIds().isEmpty()) { return ResponseResult.error("请选择审批批次"); } - List draft = fishDraftDataService.list(new LambdaQueryWrapper().eq(FishDraftData::getDeletedFlag, 0).in(FishDraftData::getApprovalId, request.getApprovalIds()).eq(FishDraftData::getStatus, "PENDING").select(FishDraftData::getId)); - List ids = draft.stream().map(FishDraftData::getId).toList(); + List ids = listDraftIdsByApprovalIdsAndStatus(request.getApprovalIds(), "PENDING"); boolean result = fishDraftDataService.batchApprove(ids, request.getApproveComment()); return result ? ResponseResult.success("审批通过") : ResponseResult.error("审批失败"); } @@ -388,8 +389,7 @@ public class FishDraftDataController { @Operation(summary = "批量驳回") public ResponseResult batchRejectFull(@RequestBody BatchRejectRequest request) { if (request.getApprovalIds() != null && !request.getApprovalIds().isEmpty()) { - List draft = fishDraftDataService.list(new LambdaQueryWrapper().eq(FishDraftData::getDeletedFlag, 0).in(FishDraftData::getApprovalId, request.getApprovalIds()).eq(FishDraftData::getStatus, "PENDING").select(FishDraftData::getId)); - List ids = draft.stream().map(FishDraftData::getId).toList(); + List ids = listDraftIdsByApprovalIdsAndStatus(request.getApprovalIds(), "PENDING"); boolean result = fishDraftDataService.rejectBatch(ids, request.getRejectReason()); return result ? ResponseResult.success("驳回成功") : ResponseResult.error("驳回失败"); } @@ -429,6 +429,47 @@ public class FishDraftDataController { return result ? ResponseResult.success("修改成功") : ResponseResult.error("修改失败"); } + private List listDraftIdsByApprovalIdsAndStatus(List approvalIds, String status) { + List normalizedApprovalIds = normalizeBatchValues(approvalIds); + if (normalizedApprovalIds.isEmpty()) { + return Collections.emptyList(); + } + List ids = new ArrayList<>(); + for (List batchApprovalIds : splitList(normalizedApprovalIds, IN_QUERY_BATCH_SIZE)) { + List draft = fishDraftDataService.list(new LambdaQueryWrapper() + .eq(FishDraftData::getDeletedFlag, 0) + .in(FishDraftData::getApprovalId, batchApprovalIds) + .eq(FishDraftData::getStatus, status) + .select(FishDraftData::getId)); + ids.addAll(draft.stream().map(FishDraftData::getId).filter(StrUtil::isNotBlank).toList()); + } + return ids; + } + + private List normalizeBatchValues(List values) { + if (values == null || values.isEmpty()) { + return Collections.emptyList(); + } + LinkedHashSet normalized = new LinkedHashSet<>(); + for (String value : values) { + if (StrUtil.isNotBlank(value)) { + normalized.add(value.trim()); + } + } + return new ArrayList<>(normalized); + } + + private List> splitList(List source, int batchSize) { + if (source == null || source.isEmpty()) { + return Collections.emptyList(); + } + List> result = new ArrayList<>(); + for (int i = 0; i < source.size(); i += batchSize) { + result.add(source.subList(i, Math.min(source.size(), i + batchSize))); + } + return result; + } + @PostMapping("/delete") @Operation(summary = "删除过鱼数据") public ResponseResult delete(@RequestParam String id) { diff --git a/backend/src/main/java/com/yfd/platform/qgc_data/service/impl/FishDraftDataServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_data/service/impl/FishDraftDataServiceImpl.java index 5a150f58..92fdd607 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_data/service/impl/FishDraftDataServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_data/service/impl/FishDraftDataServiceImpl.java @@ -2,7 +2,6 @@ package com.yfd.platform.qgc_data.service.impl; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.yfd.platform.common.DataSourceLoadOptionsBase; @@ -48,6 +47,8 @@ import java.util.*; @Slf4j public class FishDraftDataServiceImpl extends ServiceImpl implements IFishDraftDataService { + private static final int IN_QUERY_BATCH_SIZE = 200; + @Resource private FishDraftDataMapper fishDraftDataMapper; @@ -254,16 +255,15 @@ public class FishDraftDataServiceImpl extends ServiceImpl ids) { - long count = this.count(new LambdaQueryWrapper().in(FishDraftData::getId, ids).eq(FishDraftData::getLockFlag, 1)); + long count = countByIdsAndLockFlag(ids, 1); if(count > 0){ return false; } - LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); - updateWrapper.in(FishDraftData::getId, ids); - updateWrapper.set(FishDraftData::getDeletedFlag, 1); String userId = SecurityUtils.getUserId(); - updateWrapper.set(FishDraftData::getDeletedBy,userId ); - return this.update(updateWrapper); + return updateByIdsInBatches(ids, entity -> { + entity.setDeletedFlag(1); + entity.setDeletedBy(userId); + }); } @Override @@ -313,13 +313,13 @@ public class FishDraftDataServiceImpl extends ServiceImpl updateWrapper = new LambdaUpdateWrapper<>(); - updateWrapper.in(FishDraftData::getId, ids); - updateWrapper.eq(FishDraftData::getLockFlag, 0); - updateWrapper.set(FishDraftData::getApprovalId, approvalMain.getId()); - updateWrapper.set(FishDraftData::getStatus, "PENDING"); - updateWrapper.set(FishDraftData::getSubmitTime, new Date()); - this.update(updateWrapper); + List unlockedIds = listIdsByLockFlag(ids, 0); + Date submitTime = new Date(); + updateByIdsInBatches(unlockedIds, entity -> { + entity.setApprovalId(approvalMain.getId()); + entity.setStatus("PENDING"); + entity.setSubmitTime(submitTime); + }); approvalLogService.logSubmit(approvalMain.getId(), operatorId, "批量提交草稿,共" + ids.size() + "条"); @@ -421,7 +421,7 @@ public class FishDraftDataServiceImpl extends ServiceImpl dataList = this.listByIds(ids); + List dataList = listByIdsInBatches(ids); Set processedApprovalIds = new HashSet<>(); List validIds = new ArrayList<>(); List fpssRList = new ArrayList<>(); @@ -438,12 +438,11 @@ public class FishDraftDataServiceImpl extends ServiceImpl updateWrapper = new LambdaUpdateWrapper<>(); - updateWrapper.in(FishDraftData::getId, validIds); - updateWrapper.set(FishDraftData::getStatus, "APPROVED"); - updateWrapper.set(FishDraftData::getApproveTime, now); - updateWrapper.set(FishDraftData::getUpdatedBy, operatorId); - this.update(updateWrapper); + updateByIdsInBatches(validIds, entity -> { + entity.setStatus("APPROVED"); + entity.setApproveTime(now); + entity.setUpdatedBy(operatorId); + }); boolean b = sdFpssRService.saveOrUpdateBatch(fpssRList); log.info("=======================插入数据条数======================="+fpssRList.size()); for (String approvalId : processedApprovalIds) { @@ -548,7 +547,7 @@ public class FishDraftDataServiceImpl extends ServiceImpl dataList = this.listByIds(ids); + List dataList = listByIdsInBatches(ids); Set processedApprovalIds = new HashSet<>(); List validIds = new ArrayList<>(); @@ -562,12 +561,11 @@ public class FishDraftDataServiceImpl extends ServiceImpl updateWrapper = new LambdaUpdateWrapper<>(); - updateWrapper.in(FishDraftData::getId, validIds); - updateWrapper.set(FishDraftData::getStatus, "REJECTED"); - updateWrapper.set(FishDraftData::getApproveTime, now); - updateWrapper.set(FishDraftData::getUpdatedBy, operatorId); - this.update(updateWrapper); + updateByIdsInBatches(validIds, entity -> { + entity.setStatus("REJECTED"); + entity.setApproveTime(now); + entity.setUpdatedBy(operatorId); + }); for (String approvalId : processedApprovalIds) { approvalLogService.logReject(approvalId, operatorId, rejectReason); @@ -679,4 +677,90 @@ public class FishDraftDataServiceImpl extends ServiceImpl listByIdsInBatches(List ids) { + List normalizedIds = normalizeBatchValues(ids); + if (normalizedIds.isEmpty()) { + return new ArrayList<>(); + } + List result = new ArrayList<>(); + for (List batchIds : splitList(normalizedIds, IN_QUERY_BATCH_SIZE)) { + result.addAll(this.list(new LambdaQueryWrapper().in(FishDraftData::getId, batchIds))); + } + return result; + } + + private long countByIdsAndLockFlag(List ids, Integer lockFlag) { + List normalizedIds = normalizeBatchValues(ids); + if (normalizedIds.isEmpty()) { + return 0L; + } + long total = 0L; + for (List batchIds : splitList(normalizedIds, IN_QUERY_BATCH_SIZE)) { + total += this.count(new LambdaQueryWrapper() + .in(FishDraftData::getId, batchIds) + .eq(FishDraftData::getLockFlag, lockFlag)); + } + return total; + } + + private List listIdsByLockFlag(List ids, Integer lockFlag) { + List normalizedIds = normalizeBatchValues(ids); + if (normalizedIds.isEmpty()) { + return Collections.emptyList(); + } + List result = new ArrayList<>(); + for (List batchIds : splitList(normalizedIds, IN_QUERY_BATCH_SIZE)) { + List records = this.list(new LambdaQueryWrapper() + .select(FishDraftData::getId) + .in(FishDraftData::getId, batchIds) + .eq(FishDraftData::getLockFlag, lockFlag)); + result.addAll(records.stream().map(FishDraftData::getId).filter(StrUtil::isNotBlank).toList()); + } + return result; + } + + private boolean updateByIdsInBatches(List ids, + java.util.function.Consumer entityCustomizer) { + List normalizedIds = normalizeBatchValues(ids); + if (normalizedIds.isEmpty()) { + return false; + } + boolean updated = false; + for (List batchIds : splitList(normalizedIds, IN_QUERY_BATCH_SIZE)) { + List batchEntities = new ArrayList<>(batchIds.size()); + for (String batchId : batchIds) { + FishDraftData entity = new FishDraftData(); + entity.setId(batchId); + entityCustomizer.accept(entity); + batchEntities.add(entity); + } + updated = this.updateBatchById(batchEntities, IN_QUERY_BATCH_SIZE) || updated; + } + return updated; + } + + private List normalizeBatchValues(List values) { + if (values == null || values.isEmpty()) { + return Collections.emptyList(); + } + LinkedHashSet normalized = new LinkedHashSet<>(); + for (String value : values) { + if (StrUtil.isNotBlank(value)) { + normalized.add(value.trim()); + } + } + return new ArrayList<>(normalized); + } + + private List> splitList(List source, int batchSize) { + if (source == null || source.isEmpty()) { + return Collections.emptyList(); + } + List> result = new ArrayList<>(); + for (int i = 0; i < source.size(); i += batchSize) { + result.add(source.subList(i, Math.min(source.size(), i + batchSize))); + } + return result; + } } From a7e4cd8c0d386911f94be4c1600a086372d3f1d7 Mon Sep 17 00:00:00 2001 From: tangwei Date: Tue, 7 Jul 2026 17:06:34 +0800 Subject: [PATCH 24/26] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/FishDraftDataServiceImpl.java | 265 +++++++++++++----- .../src/main/resources/application-devtw.yml | 13 + 2 files changed, 203 insertions(+), 75 deletions(-) diff --git a/backend/src/main/java/com/yfd/platform/qgc_data/service/impl/FishDraftDataServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_data/service/impl/FishDraftDataServiceImpl.java index 92fdd607..45c47f12 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_data/service/impl/FishDraftDataServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_data/service/impl/FishDraftDataServiceImpl.java @@ -35,6 +35,9 @@ import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.TransactionDefinition; +import org.springframework.transaction.PlatformTransactionManager; +import org.springframework.transaction.support.TransactionTemplate; import java.util.*; @@ -86,6 +89,9 @@ public class FishDraftDataServiceImpl extends ServiceImpl queryPageList(DataSourceRequest dataSourceRequest) { Page page = KendoUtil.getPage(dataSourceRequest); @@ -295,12 +301,13 @@ public class FishDraftDataServiceImpl extends ServiceImpl ids) { if (ids == null || ids.isEmpty()) { return false; } String operatorId = SecurityUtils.getUserId(); + Map originalStatusMap = new HashMap<>(); + List succeededIds = new ArrayList<>(); ApprovalMain approvalMain = new ApprovalMain(); approvalMain.setApprovalNo("APR" + System.currentTimeMillis()); @@ -311,19 +318,46 @@ public class FishDraftDataServiceImpl extends ServiceImpl { + approvalMainService.save(approvalMain); + return true; + }); - List unlockedIds = listIdsByLockFlag(ids, 0); - Date submitTime = new Date(); - updateByIdsInBatches(unlockedIds, entity -> { - entity.setApprovalId(approvalMain.getId()); - entity.setStatus("PENDING"); - entity.setSubmitTime(submitTime); - }); + List unlockedDrafts = listDraftsByIdsAndLockFlag(ids, 0); + for (FishDraftData draft : unlockedDrafts) { + originalStatusMap.put(draft.getId(), draft.getStatus()); + } + Date submitTime = new Date(); + for (List batchDrafts : splitList(unlockedDrafts, IN_QUERY_BATCH_SIZE)) { + executeInNewTransaction(() -> { + List batchIds = new ArrayList<>(); + for (FishDraftData batchDraft : batchDrafts) { + batchIds.add(batchDraft.getId()); + } + updateByIdsBatch(batchIds, entity -> { + entity.setApprovalId(approvalMain.getId()); + entity.setStatus("PENDING"); + entity.setSubmitTime(submitTime); + }); + return true; + }); + for (FishDraftData batchDraft : batchDrafts) { + succeededIds.add(batchDraft.getId()); + } + } - approvalLogService.logSubmit(approvalMain.getId(), operatorId, "批量提交草稿,共" + ids.size() + "条"); - return true; + executeInNewTransaction(() -> { + approvalLogService.logSubmit(approvalMain.getId(), operatorId, "批量提交草稿,共" + ids.size() + "条"); + return true; + }); + return true; + } catch (Exception e) { + log.error("批量提交草稿失败", e); + rollbackSubmittedDrafts(approvalMain.getId(), succeededIds, originalStatusMap, e); + return false; + } } private void setUserDataScope(ApprovalMain approvalMain) { @@ -413,7 +447,6 @@ public class FishDraftDataServiceImpl extends ServiceImpl ids, String approveComment) { if (ids == null || ids.isEmpty()) { return false; @@ -422,43 +455,59 @@ public class FishDraftDataServiceImpl extends ServiceImpl dataList = listByIdsInBatches(ids); - Set processedApprovalIds = new HashSet<>(); - List validIds = new ArrayList<>(); - List fpssRList = new ArrayList<>(); - + Map> approvalDraftMap = new LinkedHashMap<>(); for (FishDraftData fishDraftData : dataList) { if ("PENDING".equals(fishDraftData.getStatus())) { - validIds.add(fishDraftData.getId()); - if (fishDraftData.getApprovalId() != null) { - processedApprovalIds.add(fishDraftData.getApprovalId()); - } - SdFpssR fpssR = convertToSdFpssR(fishDraftData, operatorId); - fpssRList.add(fpssR); + String approvalId = StrUtil.blankToDefault(fishDraftData.getApprovalId(), "__NO_APPROVAL__"); + approvalDraftMap.computeIfAbsent(approvalId, key -> new ArrayList<>()).add(fishDraftData); } } - if (!validIds.isEmpty()) { - updateByIdsInBatches(validIds, entity -> { - entity.setStatus("APPROVED"); - entity.setApproveTime(now); - entity.setUpdatedBy(operatorId); - }); - boolean b = sdFpssRService.saveOrUpdateBatch(fpssRList); - log.info("=======================插入数据条数======================="+fpssRList.size()); - for (String approvalId : processedApprovalIds) { - ApprovalMain approvalMain = approvalMainService.getById(approvalId); - approvalLogService.logApprove(approvalId, SecurityUtils.getUserId(), approveComment); - if (approvalMain != null) { - approvalMain.setStatus("APPROVED"); - approvalMain.setApproverId(operatorId); - approvalMain.setApproveTime(now); - approvalMain.setRemark(approveComment); - approvalMainService.updateById(approvalMain); + try { + for (Map.Entry> entry : approvalDraftMap.entrySet()) { + String approvalId = entry.getKey(); + List approvalDrafts = entry.getValue(); + for (List batchDrafts : splitList(approvalDrafts, IN_QUERY_BATCH_SIZE)) { + executeInNewTransaction(() -> { + List batchIds = new ArrayList<>(); + List fpssRList = new ArrayList<>(); + for (FishDraftData batchDraft : batchDrafts) { + batchIds.add(batchDraft.getId()); + fpssRList.add(convertToSdFpssR(batchDraft, operatorId)); + } + updateByIdsBatch(batchIds, entity -> { + entity.setStatus("APPROVED"); + entity.setApproveTime(now); + entity.setUpdatedBy(operatorId); + }); + boolean saved = sdFpssRService.saveOrUpdateBatch(fpssRList, IN_QUERY_BATCH_SIZE); + if (!saved) { + throw new RuntimeException("保存正式表失败"); + } + log.info("=======================插入数据条数======================={}", fpssRList.size()); + return true; + }); + } + if (!"__NO_APPROVAL__".equals(approvalId)) { + executeInNewTransaction(() -> { + ApprovalMain approvalMain = approvalMainService.getById(approvalId); + approvalLogService.logApprove(approvalId, SecurityUtils.getUserId(), approveComment); + if (approvalMain != null) { + approvalMain.setStatus("APPROVED"); + approvalMain.setApproverId(operatorId); + approvalMain.setApproveTime(now); + approvalMain.setRemark(approveComment); + approvalMainService.updateById(approvalMain); + } + return true; + }); } } + return true; + } catch (Exception e) { + log.error("批量审批失败", e); + return false; } - - return true; } private SdFpssR convertToSdFpssR(FishDraftData draft, String operatorId) { @@ -536,7 +585,6 @@ public class FishDraftDataServiceImpl extends ServiceImpl ids, String rejectReason) { if (ids == null || ids.isEmpty()) { return false; @@ -548,39 +596,52 @@ public class FishDraftDataServiceImpl extends ServiceImpl dataList = listByIdsInBatches(ids); - Set processedApprovalIds = new HashSet<>(); - List validIds = new ArrayList<>(); - + Map> approvalDraftMap = new LinkedHashMap<>(); for (FishDraftData fishDraftData : dataList) { if ("PENDING".equals(fishDraftData.getStatus())) { - validIds.add(fishDraftData.getId()); - if (fishDraftData.getApprovalId() != null) { - processedApprovalIds.add(fishDraftData.getApprovalId()); - } + String approvalId = StrUtil.blankToDefault(fishDraftData.getApprovalId(), "__NO_APPROVAL__"); + approvalDraftMap.computeIfAbsent(approvalId, key -> new ArrayList<>()).add(fishDraftData); } } - if (!validIds.isEmpty()) { - updateByIdsInBatches(validIds, entity -> { - entity.setStatus("REJECTED"); - entity.setApproveTime(now); - entity.setUpdatedBy(operatorId); - }); - - for (String approvalId : processedApprovalIds) { - approvalLogService.logReject(approvalId, operatorId, rejectReason); - ApprovalMain approvalMain = approvalMainService.getById(approvalId); - if (approvalMain != null) { - approvalMain.setStatus("REJECTED"); - approvalMain.setApproverId(operatorId); - approvalMain.setApproveTime(now); - approvalMain.setRemark(rejectReason); - approvalMainService.updateById(approvalMain); + try { + for (Map.Entry> entry : approvalDraftMap.entrySet()) { + String approvalId = entry.getKey(); + List approvalDrafts = entry.getValue(); + for (List batchDrafts : splitList(approvalDrafts, IN_QUERY_BATCH_SIZE)) { + executeInNewTransaction(() -> { + List batchIds = new ArrayList<>(); + for (FishDraftData batchDraft : batchDrafts) { + batchIds.add(batchDraft.getId()); + } + updateByIdsBatch(batchIds, entity -> { + entity.setStatus("REJECTED"); + entity.setApproveTime(now); + entity.setUpdatedBy(operatorId); + }); + return true; + }); + } + if (!"__NO_APPROVAL__".equals(approvalId)) { + executeInNewTransaction(() -> { + approvalLogService.logReject(approvalId, operatorId, rejectReason); + ApprovalMain approvalMain = approvalMainService.getById(approvalId); + if (approvalMain != null) { + approvalMain.setStatus("REJECTED"); + approvalMain.setApproverId(operatorId); + approvalMain.setApproveTime(now); + approvalMain.setRemark(rejectReason); + approvalMainService.updateById(approvalMain); + } + return true; + }); } } + return true; + } catch (Exception e) { + log.error("批量驳回失败", e); + return false; } - - return true; } @Override @@ -720,6 +781,36 @@ public class FishDraftDataServiceImpl extends ServiceImpl listDraftsByIdsAndLockFlag(List ids, Integer lockFlag) { + List normalizedIds = normalizeBatchValues(ids); + if (normalizedIds.isEmpty()) { + return Collections.emptyList(); + } + List result = new ArrayList<>(); + for (List batchIds : splitList(normalizedIds, IN_QUERY_BATCH_SIZE)) { + result.addAll(this.list(new LambdaQueryWrapper() + .in(FishDraftData::getId, batchIds) + .eq(FishDraftData::getLockFlag, lockFlag))); + } + return result; + } + + private boolean updateByIdsBatch(List ids, + java.util.function.Consumer entityCustomizer) { + List normalizedIds = normalizeBatchValues(ids); + if (normalizedIds.isEmpty()) { + return false; + } + List batchEntities = new ArrayList<>(normalizedIds.size()); + for (String batchId : normalizedIds) { + FishDraftData entity = new FishDraftData(); + entity.setId(batchId); + entityCustomizer.accept(entity); + batchEntities.add(entity); + } + return this.updateBatchById(batchEntities, IN_QUERY_BATCH_SIZE); + } + private boolean updateByIdsInBatches(List ids, java.util.function.Consumer entityCustomizer) { List normalizedIds = normalizeBatchValues(ids); @@ -728,18 +819,42 @@ public class FishDraftDataServiceImpl extends ServiceImpl batchIds : splitList(normalizedIds, IN_QUERY_BATCH_SIZE)) { - List batchEntities = new ArrayList<>(batchIds.size()); - for (String batchId : batchIds) { - FishDraftData entity = new FishDraftData(); - entity.setId(batchId); - entityCustomizer.accept(entity); - batchEntities.add(entity); - } - updated = this.updateBatchById(batchEntities, IN_QUERY_BATCH_SIZE) || updated; + updated = updateByIdsBatch(batchIds, entityCustomizer) || updated; } return updated; } + private void rollbackSubmittedDrafts(String approvalId, + List succeededIds, + Map originalStatusMap, + Exception originalException) { + try { + for (List batchIds : splitList(normalizeBatchValues(succeededIds), IN_QUERY_BATCH_SIZE)) { + executeInNewTransaction(() -> { + List rollbackEntities = new ArrayList<>(); + for (String batchId : batchIds) { + FishDraftData entity = new FishDraftData(); + entity.setId(batchId); + entity.setApprovalId(null); + entity.setSubmitTime(null); + entity.setStatus(originalStatusMap.get(batchId)); + rollbackEntities.add(entity); + } + return this.updateBatchById(rollbackEntities, IN_QUERY_BATCH_SIZE); + }); + } + executeInNewTransaction(() -> approvalMainService.removeById(approvalId)); + } catch (Exception rollbackException) { + log.error("批量提交草稿回退失败,原始异常: {}", originalException.getMessage(), rollbackException); + } + } + + private T executeInNewTransaction(java.util.function.Supplier action) { + TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager); + transactionTemplate.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW); + return transactionTemplate.execute(status -> action.get()); + } + private List normalizeBatchValues(List values) { if (values == null || values.isEmpty()) { return Collections.emptyList(); diff --git a/backend/src/main/resources/application-devtw.yml b/backend/src/main/resources/application-devtw.yml index 597cd003..609aa2bc 100644 --- a/backend/src/main/resources/application-devtw.yml +++ b/backend/src/main/resources/application-devtw.yml @@ -111,6 +111,19 @@ spring: mvc: pathmatch: matching-strategy: ant_path_matcher + data: + redis: + host: "${REDIS_HOST:172.16.21.142}" + port: "${REDIS_PORT:6379}" + password: "${REDIS_PASSWORD:zny5678}" + database: "${REDIS_DATABASE:15}" + timeout: 10000ms + lettuce: + pool: + max-active: 8 + max-idle: 8 + min-idle: 2 + max-wait: 10000ms servlet: multipart: max-file-size: 300MB From ec8ba69d654652b1f7270b0bf7b99d5654800eb5 Mon Sep 17 00:00:00 2001 From: lilin <18811154576@163.com> Date: Tue, 7 Jul 2026 18:55:12 +0800 Subject: [PATCH 25/26] =?UTF-8?q?=E6=B2=BF=E7=A8=8B=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E8=A1=A8=E4=BB=A3=E7=A0=81=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../along/controller/MsAlongBController.java | 18 ++- .../controller/MsAlongDetBController.java | 12 +- .../along/domain/MsAlongDetTreeDto.java | 18 +++ .../qgc_lygk/along/domain/PowerDto.java | 26 +++++ .../qgc_lygk/along/mapper/MsAlongBMapper.java | 17 ++- .../along/mapper/MsAlongDetBMapper.java | 17 ++- .../along/service/IMsAlongBService.java | 3 + .../along/service/IMsAlongDetBService.java | 6 + .../service/impl/MsAlongBServiceImpl.java | 49 +++++++- .../service/impl/MsAlongDetBServiceImpl.java | 106 +++++++++++++++++- .../src/main/resources/application-prod.yml | 5 +- 11 files changed, 256 insertions(+), 21 deletions(-) create mode 100644 backend/src/main/java/com/yfd/platform/qgc_lygk/along/domain/MsAlongDetTreeDto.java create mode 100644 backend/src/main/java/com/yfd/platform/qgc_lygk/along/domain/PowerDto.java diff --git a/backend/src/main/java/com/yfd/platform/qgc_lygk/along/controller/MsAlongBController.java b/backend/src/main/java/com/yfd/platform/qgc_lygk/along/controller/MsAlongBController.java index ddaaff51..133c13e1 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_lygk/along/controller/MsAlongBController.java +++ b/backend/src/main/java/com/yfd/platform/qgc_lygk/along/controller/MsAlongBController.java @@ -13,13 +13,12 @@ import com.yfd.platform.qgc_lygk.along.domain.MsAlongB; import com.yfd.platform.qgc_lygk.along.service.IMsAlongBService; import com.yfd.platform.qgc_sys.mapcfg.service.IMapmoduleBService; import com.yfd.platform.utils.DataSourceRequestUtil; +import com.yfd.platform.utils.SecurityUtils; +import io.lettuce.core.dynamic.annotation.Param; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.List; @@ -66,8 +65,11 @@ public class MsAlongBController { if (StrUtil.isBlank(msAlongB.getCode())) { throw new BizException("沿程配置编码(code)不能为空."); } + msAlongB.setRecordUser(SecurityUtils.getUserId()); + //msAlongB.setRecordUser(SecurityUtils.getCurrentUsername()); msAlongBService.saveOrUpdate(msAlongB); - return ResponseResult.success("保存成功."); + return ResponseResult.successData(msAlongB.getId()); + } @PostMapping("/wbsb/GetKendoList") @@ -82,4 +84,10 @@ public class MsAlongBController { msAlongBService.delelteByIds(ids); return ResponseResult.success("删除成功."); } + + @PostMapping("/noAuth/GetKendoList") + @Operation(summary = "查询水电基地流域字典列表") + public ResponseResult getWbsbList(@RequestParam String stcd) { + return ResponseResult.successData(msAlongBService.getWbsbList(stcd)); + } } \ No newline at end of file diff --git a/backend/src/main/java/com/yfd/platform/qgc_lygk/along/controller/MsAlongDetBController.java b/backend/src/main/java/com/yfd/platform/qgc_lygk/along/controller/MsAlongDetBController.java index 8f489ee6..d0cf9918 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_lygk/along/controller/MsAlongDetBController.java +++ b/backend/src/main/java/com/yfd/platform/qgc_lygk/along/controller/MsAlongDetBController.java @@ -1,5 +1,6 @@ package com.yfd.platform.qgc_lygk.along.controller; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.common.DataSourceResult; @@ -7,6 +8,7 @@ import com.yfd.platform.common.exception.BizException; import com.yfd.platform.config.ResponseResult; import com.yfd.platform.qgc_lygk.along.domain.MsAlongB; import com.yfd.platform.qgc_lygk.along.domain.MsAlongDetB; +import com.yfd.platform.qgc_lygk.along.domain.MsAlongDetTreeDto; import com.yfd.platform.qgc_lygk.along.service.IMsAlongDetBService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; @@ -16,6 +18,8 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + /** * 沿程配置明细表控制器 * @@ -44,11 +48,11 @@ public class MsAlongDetBController { */ @Operation(summary = "保存或修改") @PostMapping("/save") - public ResponseResult save(@RequestBody MsAlongDetB msAlongDetB) { - if (msAlongDetB == null) { - return ResponseResult.error("沿程配置明细信息不能为空."); + public ResponseResult save(@RequestBody List treeList) { + if (CollUtil.isEmpty(treeList)) { + return ResponseResult.error("数据不能为空."); } - msAlongDetBService.saveOrUpdate(msAlongDetB); + msAlongDetBService.saveOrUpdateBatchData(treeList); return ResponseResult.success("保存成功."); } diff --git a/backend/src/main/java/com/yfd/platform/qgc_lygk/along/domain/MsAlongDetTreeDto.java b/backend/src/main/java/com/yfd/platform/qgc_lygk/along/domain/MsAlongDetTreeDto.java new file mode 100644 index 00000000..faacbd8a --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_lygk/along/domain/MsAlongDetTreeDto.java @@ -0,0 +1,18 @@ +package com.yfd.platform.qgc_lygk.along.domain; + +import lombok.Data; + +import java.util.List; + +@Data +public class MsAlongDetTreeDto { + private String id; // 记录ID(更新时传) + private String alongId; // 关联主表ID + private String stcd; // 断面编码 + private String sttp; // 类型编码 + private Integer sort; // 排序 + private String stnm; // 仅用于显示,不存表 + private String rstcd; // 仅用于显示,不存表 + private String parentId; // 前端用,不存表 + private List children; // 子节点 +} diff --git a/backend/src/main/java/com/yfd/platform/qgc_lygk/along/domain/PowerDto.java b/backend/src/main/java/com/yfd/platform/qgc_lygk/along/domain/PowerDto.java new file mode 100644 index 00000000..5653482e --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_lygk/along/domain/PowerDto.java @@ -0,0 +1,26 @@ +package com.yfd.platform.qgc_lygk.along.domain; + +import lombok.Data; + +import java.util.List; +@Data +public class PowerDto { + // 水电水利工程编码 + private String stcd; + + // 水电水利工程名称 + private String stnm; + + // 水电水利工程名称 + private String sttp; + + // 主表实体 + private String sttpCode; + + // 主表实体 + private String sttpName; + + // 主表实体 + private String rstcd; + +} diff --git a/backend/src/main/java/com/yfd/platform/qgc_lygk/along/mapper/MsAlongBMapper.java b/backend/src/main/java/com/yfd/platform/qgc_lygk/along/mapper/MsAlongBMapper.java index bc85485c..71c188e5 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_lygk/along/mapper/MsAlongBMapper.java +++ b/backend/src/main/java/com/yfd/platform/qgc_lygk/along/mapper/MsAlongBMapper.java @@ -2,7 +2,10 @@ package com.yfd.platform.qgc_lygk.along.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.yfd.platform.qgc_lygk.along.domain.MsAlongB; -import org.apache.ibatis.annotations.Mapper; +import com.yfd.platform.qgc_lygk.along.domain.PowerDto; +import org.apache.ibatis.annotations.*; + +import java.util.List; /** * 沿程配置表 Mapper 接口 @@ -12,4 +15,16 @@ import org.apache.ibatis.annotations.Mapper; @Mapper public interface MsAlongBMapper extends BaseMapper { + @Select("SELECT STCD, STNM, STTP, STTP_CODE, STTP_NAME, RSTCD " + + "FROM V_MS_STBPRP_T " + + "WHERE RSTCD = #{stcd}") + @Results({ + @Result(column = "STCD", property = "stcd"), + @Result(column = "STNM", property = "stnm"), + @Result(column = "STTP", property = "sttp"), + @Result(column = "STTP_CODE", property = "sttpCode"), + @Result(column = "STTP_NAME", property = "sttpName"), + @Result(column = "RSTCD", property = "rstcd") + }) + List getWbsbList(@Param("stcd") String stcd); } \ No newline at end of file diff --git a/backend/src/main/java/com/yfd/platform/qgc_lygk/along/mapper/MsAlongDetBMapper.java b/backend/src/main/java/com/yfd/platform/qgc_lygk/along/mapper/MsAlongDetBMapper.java index 0e0e17bd..08439a35 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_lygk/along/mapper/MsAlongDetBMapper.java +++ b/backend/src/main/java/com/yfd/platform/qgc_lygk/along/mapper/MsAlongDetBMapper.java @@ -2,7 +2,10 @@ package com.yfd.platform.qgc_lygk.along.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.yfd.platform.qgc_lygk.along.domain.MsAlongDetB; -import org.apache.ibatis.annotations.Mapper; +import com.yfd.platform.qgc_lygk.along.domain.PowerDto; +import org.apache.ibatis.annotations.*; + +import java.util.List; /** * 沿程配置明细表 Mapper 接口 @@ -12,4 +15,16 @@ import org.apache.ibatis.annotations.Mapper; @Mapper public interface MsAlongDetBMapper extends BaseMapper { + @Select("SELECT STCD, STNM, STTP, STTP_CODE, STTP_NAME, RSTCD " + + "FROM V_MS_STBPRP_T " + + "WHERE STCD = #{stcd}") + @Results({ + @Result(column = "STCD", property = "stcd"), + @Result(column = "STNM", property = "stnm"), + @Result(column = "STTP", property = "sttp"), + @Result(column = "STTP_CODE", property = "sttpCode"), + @Result(column = "STTP_NAME", property = "sttpName"), + @Result(column = "RSTCD", property = "rstcd") + }) + List getWbsbList(@Param("stcd") String stcd); } \ No newline at end of file diff --git a/backend/src/main/java/com/yfd/platform/qgc_lygk/along/service/IMsAlongBService.java b/backend/src/main/java/com/yfd/platform/qgc_lygk/along/service/IMsAlongBService.java index 9260fb42..731c1ea6 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_lygk/along/service/IMsAlongBService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_lygk/along/service/IMsAlongBService.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.common.DataSourceResult; import com.yfd.platform.qgc_lygk.along.domain.MsAlongB; +import com.yfd.platform.qgc_lygk.along.domain.PowerDto; import java.util.List; @@ -23,6 +24,8 @@ public interface IMsAlongBService extends IService { void delelteByIds(List ids); + List getWbsbList(String stcd); + // /** // * 保存或更新沿程配置 // * diff --git a/backend/src/main/java/com/yfd/platform/qgc_lygk/along/service/IMsAlongDetBService.java b/backend/src/main/java/com/yfd/platform/qgc_lygk/along/service/IMsAlongDetBService.java index 39aced84..9d34b194 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_lygk/along/service/IMsAlongDetBService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_lygk/along/service/IMsAlongDetBService.java @@ -3,7 +3,11 @@ package com.yfd.platform.qgc_lygk.along.service; import com.baomidou.mybatisplus.extension.service.IService; import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.common.DataSourceResult; +import com.yfd.platform.config.ResponseResult; import com.yfd.platform.qgc_lygk.along.domain.MsAlongDetB; +import com.yfd.platform.qgc_lygk.along.domain.MsAlongDetTreeDto; + +import java.util.List; /** * 沿程配置明细表 Service 接口 @@ -19,4 +23,6 @@ public interface IMsAlongDetBService extends IService { * @return 数据源结果 */ DataSourceResult getKendoList(DataSourceRequest dataSourceRequest); + + ResponseResult saveOrUpdateBatchData(List treeList); } \ No newline at end of file diff --git a/backend/src/main/java/com/yfd/platform/qgc_lygk/along/service/impl/MsAlongBServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_lygk/along/service/impl/MsAlongBServiceImpl.java index 0de796e3..283d3dcc 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_lygk/along/service/impl/MsAlongBServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_lygk/along/service/impl/MsAlongBServiceImpl.java @@ -1,20 +1,28 @@ package com.yfd.platform.qgc_lygk.along.service.impl; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.yfd.platform.common.DataSourceLoadOptionsBase; import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.common.DataSourceResult; +import com.yfd.platform.qgc_base.domain.SdRvcdDic; +import com.yfd.platform.qgc_base.mapper.SdRvcdDicMapper; import com.yfd.platform.qgc_lygk.along.domain.MsAlongB; +import com.yfd.platform.qgc_lygk.along.domain.PowerDto; import com.yfd.platform.qgc_lygk.along.mapper.MsAlongBMapper; import com.yfd.platform.qgc_lygk.along.service.IMsAlongBService; +import com.yfd.platform.utils.CodeToNameMetadataBo; import com.yfd.platform.utils.DataSourceRequestUtil; +import com.yfd.platform.utils.DictCodeToNameConverter; import com.yfd.platform.utils.QgcQueryWrapperUtil; +import jakarta.annotation.Resource; import org.springframework.stereotype.Service; -import java.util.Collections; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; /** * 沿程配置表 Service 实现类 @@ -24,6 +32,11 @@ import java.util.List; @Service public class MsAlongBServiceImpl extends ServiceImpl implements IMsAlongBService { + @Resource + private MsAlongBMapper msAlongBMapper; + @Resource + private SdRvcdDicMapper sdRvcdDicMapper; + @Override public DataSourceResult getKendoList(DataSourceRequest dataSourceRequest) { // 1. 构建查询条件 @@ -46,7 +59,29 @@ public class MsAlongBServiceImpl extends ServiceImpl i resultPage.setTotal(list.size()); } - // 4. 构建结果 + // 4. 循环填充 rvnm + List records = resultPage.getRecords(); + if (CollUtil.isNotEmpty(records)) { + for (MsAlongB record : records) { + String rvcd = record.getRvcd(); + if (StrUtil.isNotBlank(rvcd)) { + // 调用现有 Mapper 方法,查询单个 rvcd + List dictList = sdRvcdDicMapper.selectRegDropdown(null, rvcd); + if (CollUtil.isNotEmpty(dictList)) { + // 取第一条记录的 RVNM(即 DISPLAY_RVNM) + String displayRvnm = dictList.get(0).getRvnm(); + // 如果只需要末级名称,可截取最后一个 '-' 后的部分 + // 如果直接使用完整路径,则直接赋值 + record.setRvnm(displayRvnm); + // 若需要末级名称: + // int lastDash = displayRvnm.lastIndexOf('-'); + // record.setRvnm(lastDash > 0 ? displayRvnm.substring(lastDash + 1) : displayRvnm); + } + } + } + } + + // 5. 构建结果 DataSourceResult dataSourceResult = new DataSourceResult<>(); dataSourceResult.setData(resultPage.getRecords()); dataSourceResult.setTotal(resultPage.getTotal()); @@ -56,10 +91,16 @@ public class MsAlongBServiceImpl extends ServiceImpl i @Override public void delelteByIds(List ids) { for (String id : ids) { - this.delelteByIds(Collections.singletonList(id)); + this.removeById(id); } } + @Override + public List getWbsbList(String stcd) { + List powerDtos = msAlongBMapper.getWbsbList(stcd); + return powerDtos; + } + // @Override // public boolean saveOrUpdate(MsAlongB msAlongB) { // super.saveOrUpdate(msAlongB); diff --git a/backend/src/main/java/com/yfd/platform/qgc_lygk/along/service/impl/MsAlongDetBServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_lygk/along/service/impl/MsAlongDetBServiceImpl.java index 5410fbd5..c4700493 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_lygk/along/service/impl/MsAlongDetBServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_lygk/along/service/impl/MsAlongDetBServiceImpl.java @@ -1,23 +1,29 @@ package com.yfd.platform.qgc_lygk.along.service.impl; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.yfd.platform.common.DataSourceLoadOptionsBase; import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.common.DataSourceResult; +import com.yfd.platform.config.ResponseResult; import com.yfd.platform.qgc_lygk.along.domain.MsAlongDetB; +import com.yfd.platform.qgc_lygk.along.domain.MsAlongDetTreeDto; +import com.yfd.platform.qgc_lygk.along.domain.PowerDto; +import com.yfd.platform.qgc_lygk.along.mapper.MsAlongBMapper; import com.yfd.platform.qgc_lygk.along.mapper.MsAlongDetBMapper; import com.yfd.platform.qgc_lygk.along.service.IMsAlongDetBService; -import com.yfd.platform.utils.CodeToNameMetadataBo; -import com.yfd.platform.utils.DataSourceRequestUtil; -import com.yfd.platform.utils.DictCodeToNameConverter; -import com.yfd.platform.utils.QgcQueryWrapperUtil; +import com.yfd.platform.utils.*; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; /** * 沿程配置明细表 Service 实现类 @@ -30,6 +36,9 @@ public class MsAlongDetBServiceImpl extends ServiceImpl CODE_TO_NAME_META_LIST = new ArrayList<>(); static { @@ -62,10 +71,99 @@ public class MsAlongDetBServiceImpl extends ServiceImpl records = resultPage.getRecords(); + if (CollUtil.isNotEmpty(records)) { + for (MsAlongDetB record : records) { + String stcd = record.getStcd(); + if (StrUtil.isNotBlank(stcd)) { + // 调用 Mapper 方法查询测站信息 + List powerDtos = msAlongDetBMapper.getWbsbList(stcd); + if (CollUtil.isNotEmpty(powerDtos)) { + // 取第一个结果(通常一个 STCD 只对应一条记录) + String stnm = powerDtos.get(0).getStnm(); + record.setStnm(stnm); + } + } + } + } + // 4. 构建结果 DataSourceResult dataSourceResult = new DataSourceResult<>(); dataSourceResult.setData(resultPage.getRecords()); dataSourceResult.setTotal(resultPage.getTotal()); return dataSourceResult; } + + @Override + public ResponseResult saveOrUpdateBatchData(List treeList) { + // 1. 递归扁平化:将树形结构转为平铺的实体列表 + List flatList = new ArrayList<>(); + for (MsAlongDetTreeDto root : treeList) { + flattenTree(root, flatList); + } + + if (flatList.isEmpty()) { + return ResponseResult.error("没有有效数据."); + } + + // 2. 校验每条记录的 alongId 不为空 + for (MsAlongDetB item : flatList) { + if (StrUtil.isBlank(item.getAlongId())) { + return ResponseResult.error("沿程配置ID(alongId)不能为空."); + } + } + + // 3. 【新增】提取所有不同的 alongId,删除这些主键下的旧明细 + Set alongIdSet = flatList.stream() + .map(MsAlongDetB::getAlongId) + .filter(StrUtil::isNotBlank) + .collect(Collectors.toSet()); + + if (CollUtil.isNotEmpty(alongIdSet)) { + LambdaUpdateWrapper deleteWrapper = new LambdaUpdateWrapper<>(); + deleteWrapper.in(MsAlongDetB::getAlongId, alongIdSet) + .set(MsAlongDetB::getIsDeleted, "1"); // 逻辑删除标记 + this.update(deleteWrapper); + } + + // 4. 插入新数据(注意:需要清空旧记录的主键ID,让数据库自增或雪花ID生成) + for (MsAlongDetB item : flatList) { + item.setId(null); // 确保都是新增 + } + + // 5. 批量保存(有则更新,无则新增) + this.saveOrUpdateBatch(flatList); + + return ResponseResult.success("保存成功."); + } + + /** + * 递归展开树形节点,将每个节点转换为 MsAlongDetB 实体 + */ + private void flattenTree(MsAlongDetTreeDto node, List flatList) { + // 1. 将当前节点转为实体 + MsAlongDetB entity = new MsAlongDetB(); + // 仅复制表中存在的字段 + entity.setId(node.getId()); + entity.setAlongId(node.getAlongId()); + entity.setStcd(node.getStcd()); + entity.setSttp(node.getSttp()); + entity.setRstcd(node.getRstcd()); + entity.setRecordUser(SecurityUtils.getUserId()); // 创建人 + //entity.setRecordUser(SecurityUtils.getCurrentUsername()); // 创建人 + if (node.getSort() != null){ + entity.setSort(String.valueOf(node.getSort())); // 若传了排序 + } + if (StrUtil.isBlank(entity.getId())) { + entity.setId(null); + } + flatList.add(entity); + // 2. 递归处理子节点 + if (CollUtil.isNotEmpty(node.getChildren())) { + for (MsAlongDetTreeDto child : node.getChildren()) { + flattenTree(child, flatList); + } + } + } } \ No newline at end of file diff --git a/backend/src/main/resources/application-prod.yml b/backend/src/main/resources/application-prod.yml index 294c61ea..48e5a037 100644 --- a/backend/src/main/resources/application-prod.yml +++ b/backend/src/main/resources/application-prod.yml @@ -111,9 +111,10 @@ spring: matching-strategy: ant_path_matcher data: redis: - host: ${REDIS_HOST:localhost} + host: ${REDIS_HOST:172.16.21.142} port: ${REDIS_PORT:6379} - password: ${REDIS_PASSWORD:} + password: ${REDIS_PASSWORD:zny5678} + database: ${REDIS_DATABASE:15} timeout: 10000ms lettuce: pool: From e624cf3bb90d1b047933ed7ca063caab6cfad961 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=85=B4=E5=87=AF?= <2448379534@qq.com> Date: Tue, 7 Jul 2026 18:59:55 +0800 Subject: [PATCH 26/26] =?UTF-8?q?bug=E4=BF=AE=E6=94=B9=E4=B8=8E=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MapModal/components/BasicInfo.vue | 7 +- .../src/modules/liuyu/ai/spdzwaijc/AISPTK.vue | 1 + .../ai/spdzwaijc/components/VideoDetails.vue | 3 + .../index.vue | 4 +- .../TwoLayer/HuanJingSJJRQK.vue | 2 +- .../TwoLayer/ShuiDianKaiFQKTwoLayer.vue | 36 +---- .../yunXingGaoJIng/Aisbdbyx/AISBTK.vue | 1 + .../Aisbdbyx/components/VideoPlayer.vue | 3 + frontend/src/styles/index.scss | 5 + frontend/src/utils/request.ts | 2 +- .../views/home/shuiDianKaiFaZhuangKuang.vue | 147 ------------------ 11 files changed, 28 insertions(+), 183 deletions(-) diff --git a/frontend/src/components/MapModal/components/BasicInfo.vue b/frontend/src/components/MapModal/components/BasicInfo.vue index 70a185dd..363ca155 100644 --- a/frontend/src/components/MapModal/components/BasicInfo.vue +++ b/frontend/src/components/MapModal/components/BasicInfo.vue @@ -266,6 +266,10 @@ const columnsConfig = ref([ type: 'EQ_7', columns: EQPointColumns7 }, + { + type: 'EQ', + columns: EQPointColumns7 + }, { type: 'WE', columns: wePointColumns @@ -365,9 +369,10 @@ const getData = async () => { item => item.type == (modelStore.params.sttp == 'EQ' - ? modelStore.params.anchoPointState + ? modelStore.params.sttp : modelStore.params.sttp) ).columns; + // debugger columns.forEach(item => { if (item.visible) { diff --git a/frontend/src/modules/liuyu/ai/spdzwaijc/AISPTK.vue b/frontend/src/modules/liuyu/ai/spdzwaijc/AISPTK.vue index ab353c35..306ae0fe 100644 --- a/frontend/src/modules/liuyu/ai/spdzwaijc/AISPTK.vue +++ b/frontend/src/modules/liuyu/ai/spdzwaijc/AISPTK.vue @@ -1707,6 +1707,7 @@ onBeforeUnmount(() => { align-items: center; justify-content: center; height: 100%; + background:#fff; } } diff --git a/frontend/src/modules/liuyu/ai/spdzwaijc/components/VideoDetails.vue b/frontend/src/modules/liuyu/ai/spdzwaijc/components/VideoDetails.vue index 75a95abf..c9f21f1e 100644 --- a/frontend/src/modules/liuyu/ai/spdzwaijc/components/VideoDetails.vue +++ b/frontend/src/modules/liuyu/ai/spdzwaijc/components/VideoDetails.vue @@ -314,4 +314,7 @@ onMounted(() => { height: 100%; } } +:deep(.media-empty){ + background:#fff !important; +} diff --git a/frontend/src/modules/monthlyAvgWaterTemCompareHistory/index.vue b/frontend/src/modules/monthlyAvgWaterTemCompareHistory/index.vue index fc37d643..1d2c566b 100644 --- a/frontend/src/modules/monthlyAvgWaterTemCompareHistory/index.vue +++ b/frontend/src/modules/monthlyAvgWaterTemCompareHistory/index.vue @@ -196,9 +196,7 @@ const getSelectConfig = async () => { return indexA - indexB; }) select.value.options = filterSelectOptions(dataMapNameArr) - if (baseid.value === 'all') { - select.value.value = 'SJLY176' - } else if (filterSelectOptions(dataMapNameArr)[0]?.children) { + if (filterSelectOptions(dataMapNameArr)[0]?.children) { select.value.value = filterSelectOptions(dataMapNameArr)[0]?.children[0]?.value } else if (filterSelectOptions(dataMapNameArr)[0]?.value) { select.value.value = filterSelectOptions(dataMapNameArr)[0]?.value diff --git a/frontend/src/modules/shuidianhuangjingjieruMod/TwoLayer/HuanJingSJJRQK.vue b/frontend/src/modules/shuidianhuangjingjieruMod/TwoLayer/HuanJingSJJRQK.vue index fcf61feb..44eb39da 100644 --- a/frontend/src/modules/shuidianhuangjingjieruMod/TwoLayer/HuanJingSJJRQK.vue +++ b/frontend/src/modules/shuidianhuangjingjieruMod/TwoLayer/HuanJingSJJRQK.vue @@ -368,7 +368,7 @@ const chartSetting = computed(() => { title: [ { text: String(total || 0), - left: '28%', + left: '30%', top: '43%', textStyle: { fontSize: 24, fontWeight: 'bold', color: '#333' } }, diff --git a/frontend/src/modules/shuidianhuangjingjieruMod/TwoLayer/ShuiDianKaiFQKTwoLayer.vue b/frontend/src/modules/shuidianhuangjingjieruMod/TwoLayer/ShuiDianKaiFQKTwoLayer.vue index c19013f5..153e36bd 100644 --- a/frontend/src/modules/shuidianhuangjingjieruMod/TwoLayer/ShuiDianKaiFQKTwoLayer.vue +++ b/frontend/src/modules/shuidianhuangjingjieruMod/TwoLayer/ShuiDianKaiFQKTwoLayer.vue @@ -230,47 +230,23 @@ async function fetchPieData(params: any): Promise { let list = resData.flatMap((item: any) => { let arr: PieDataItem[] = []; - const itmeData = - qid.value === 'all' || qid.value === 'other' - ? item?.items - : item?.items[0]?.items; + const itmeData = item?.items; itmeData?.map((outItem: any) => { - const level5Data = - qid.value === 'all' || qid.value === 'other' - ? outItem?.items?.[0]?.items?.[0]?.items?.[0] - : outItem?.items?.[0]?.items?.[0]; + const level5Data = outItem?.items?.[0]?.items?.[0]?.items?.[0]; - const name = - qid.value === 'all' - ? outItem?.items?.[0]?.key - : qid.value === 'other' - ? outItem?.items?.[0]?.key - : outItem?.key || outItem?.HBRVCDNAME; + const name = outItem?.items?.[0]?.key; if (name) { arr.push({ - key: - qid.value === 'all' - ? outItem?.key - : qid.value === 'other' - ? outItem?.key - : outItem?.HBRVCD || outItem?.key, + key: outItem?.key, dataDimensionRecursive: 'true', name: name, unit: '', value: - qid.value === 'all' && useTtpwrFilter + useTtpwrFilter ? level5Data?.SUM_TTPWR && +transUnit(level5Data?.SUM_TTPWR) - : qid.value === 'all' && !useTtpwrFilter - ? level5Data?.COUNT_BLDSTTCCODE - : qid.value === 'other' && useTtpwrFilter - ? level5Data?.SUM_TTPWR && +transUnit(level5Data?.SUM_TTPWR) - : qid.value === 'other' && !useTtpwrFilter - ? level5Data?.COUNT_BLDSTTCCODE - : (level5Data?.SUM_TTPWR && - +transUnit(level5Data?.SUM_TTPWR)) || - level5Data?.COUNT_BLDSTTCCODE + : level5Data?.COUNT_BLDSTTCCODE }); } }); diff --git a/frontend/src/modules/yunXingGaoJIng/Aisbdbyx/AISBTK.vue b/frontend/src/modules/yunXingGaoJIng/Aisbdbyx/AISBTK.vue index 5e9ae3d7..86dac576 100644 --- a/frontend/src/modules/yunXingGaoJIng/Aisbdbyx/AISBTK.vue +++ b/frontend/src/modules/yunXingGaoJIng/Aisbdbyx/AISBTK.vue @@ -2041,6 +2041,7 @@ onBeforeUnmount(() => { align-items: center; justify-content: center; height: 100%; + background:#fff; } } diff --git a/frontend/src/modules/yunXingGaoJIng/Aisbdbyx/components/VideoPlayer.vue b/frontend/src/modules/yunXingGaoJIng/Aisbdbyx/components/VideoPlayer.vue index 708cc412..1279546b 100644 --- a/frontend/src/modules/yunXingGaoJIng/Aisbdbyx/components/VideoPlayer.vue +++ b/frontend/src/modules/yunXingGaoJIng/Aisbdbyx/components/VideoPlayer.vue @@ -215,4 +215,7 @@ const handlePageChange = (page: number, pageSize: number) => { } } /* 样式继承自父组件 */ +:deep(.media-empty){ + background:#fff !important; +} diff --git a/frontend/src/styles/index.scss b/frontend/src/styles/index.scss index e6118041..d09926ac 100644 --- a/frontend/src/styles/index.scss +++ b/frontend/src/styles/index.scss @@ -118,3 +118,8 @@ svg { .ant-select-tree-node-selected { background-color: #bae7ff !important; } +.ant-empty{ + p{ + text-indent: 0em !important; + } +} diff --git a/frontend/src/utils/request.ts b/frontend/src/utils/request.ts index 0f9323c2..b3da9e99 100644 --- a/frontend/src/utils/request.ts +++ b/frontend/src/utils/request.ts @@ -34,7 +34,7 @@ service.interceptors.request.use( config.headers._sysid = '10EC2E0B-AEA9-4757-83A2-201BA1BC54E9'; config.headers.authorization = - 'bearer 863782c5-5e51-49c6-95fd-13e6f25b9bf2'; + 'bearer f2438154-ca4c-4acb-8e56-739534932ebb'; config.baseURL = '/'; } else { const user = useUserStoreHook(); diff --git a/frontend/src/views/home/shuiDianKaiFaZhuangKuang.vue b/frontend/src/views/home/shuiDianKaiFaZhuangKuang.vue index 0bd6849b..e83bcb42 100644 --- a/frontend/src/views/home/shuiDianKaiFaZhuangKuang.vue +++ b/frontend/src/views/home/shuiDianKaiFaZhuangKuang.vue @@ -5,136 +5,8 @@ import RightDrawer from '@/components/RightDrawer/index.vue'; import jidiInfoMod from '@/modules/jidiInfoMod/index.vue'; import shuidianhuangjingjieruMod from '@/modules/shuidianhuangjingjieruMod/index.vue'; import { useModelStore } from '@/store/modules/model'; - -const modelStore = useModelStore(); -// import { getQgcStaticData } from "@/api/ecoFlow"; onMounted(() => { - // const params = { - // filter: { - // logic: "and", - // filters: [ - // { field: "dtin", operator: "eq", dataType: "string", value: "1" }, - // { field: "type", operator: "eq", dataType: "string", value: "hour" }, - // { field: "tm", operator: "gte", dataType: "date", value: "2026-03-02 00:00:00" }, - // { field: "tm", operator: "lte", dataType: "date", value: "2026-04-02 23:59:59" }, - // ], - // }, - // }; - // getQgcStaticData(params).then((res) => { - // console.log(res); - // }); }); - -const showMapModal = () => { - modelStore.modalVisible = true; - modelStore.params.sttp = 'ENG'; - modelStore.title = '三峡 '; - modelStore.isBasicEdit = true; -}; -const showMapModal1 = () => { - modelStore.modalVisible = true; - modelStore.params.sttp = 'WT'; - modelStore.title = '水温 '; - modelStore.isBasicEdit = true; -}; -const showMapModal2 = () => { - modelStore.modalVisible = true; - modelStore.params.sttp = 'WQFB'; - modelStore.title = '水质 '; - modelStore.isBasicEdit = true; -}; -const showMapModal3 = () => { - modelStore.modalVisible = true; - modelStore.params.sttp = 'FH'; - modelStore.title = '栖息地 '; - modelStore.isBasicEdit = true; -}; // -const showMapModal4 = () => { - modelStore.modalVisible = true; - modelStore.params.sttp = 'fh_zq_point'; - modelStore.title = '栖息地流量 '; - modelStore.isBasicEdit = true; -}; -const showMapModal5 = () => { - modelStore.modalVisible = true; - modelStore.params.sttp = 'fp_point'; - modelStore.title = '过鱼设施 '; - modelStore.isBasicEdit = true; -}; -const showMapModal6 = () => { - modelStore.modalVisible = true; - modelStore.params.sttp = 'FB'; - modelStore.title = '鱼类增殖站 '; - modelStore.isBasicEdit = true; -}; -// -const showMapModal7 = () => { - modelStore.modalVisible = true; - modelStore.params.sttp = 'VA'; - modelStore.title = '动物救助站 '; - modelStore.isBasicEdit = true; -}; -const showMapModal8 = () => { - modelStore.modalVisible = true; - modelStore.params.sttp = 'VP'; - modelStore.title = '珍稀植物园 '; - modelStore.isBasicEdit = true; -}; -const showMapModal9 = () => { - modelStore.modalVisible = true; - modelStore.params.sttp = 'WE'; - modelStore.title = '水生生态调查断面 '; - modelStore.isBasicEdit = true; -}; -const showMapModal10 = () => { - modelStore.modalVisible = true; - modelStore.params.sttp = 'WVA'; - modelStore.title = '野生动物监测 '; - modelStore.isBasicEdit = true; -}; -const showMapModal11 = () => { - modelStore.modalVisible = true; - modelStore.params.sttp = 'VD_FBFM'; - modelStore.title = 'AI视频监控站 '; - modelStore.isBasicEdit = true; -}; -const showMapModal12 = () => { - modelStore.modalVisible = true; - modelStore.params.sttp = 'eng_alarm_point'; - modelStore.title = '水电站告警情况 '; - modelStore.isBasicEdit = true; -}; -const showMapModal13 = () => { - modelStore.modalVisible = true; - modelStore.params.sttp = 'FPRD'; - modelStore.title = '鱼类调查装置 '; - modelStore.isBasicEdit = true; -}; -const showMapModal14 = () => { - modelStore.modalVisible = true; - modelStore.params.sttp = 'DW_2'; - modelStore.title = '低温水减缓设施-叠梁门 '; - modelStore.isBasicEdit = true; -}; -const showMapModal15 = () => { - modelStore.modalVisible = true; - modelStore.params.sttp = 'DW_5'; - modelStore.title = '前置挡墙 '; - modelStore.isBasicEdit = true; -}; -const showMapModal16 = () => { - modelStore.modalVisible = true; - modelStore.params.sttp = 'DW_6'; - modelStore.title = '隔水幕墙 '; - modelStore.isBasicEdit = true; -}; -const showMapModal17 = () => { - modelStore.modalVisible = true; - modelStore.params.sttp = 'DW_1'; - modelStore.title = '夹岩双层取水 '; - modelStore.isBasicEdit = true; -}; -//DW_5