From a5eb2496c691de67cb56c7c44b52dd43a802220e Mon Sep 17 00:00:00 2001 From: tangwei Date: Mon, 29 Jun 2026 17:47:59 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B2=BF=E7=A8=8B=E9=B1=BC=E7=B1=BB?= =?UTF-8?q?=E5=8F=98=E5=8C=96=E6=83=85=E5=86=B5=E4=BA=8C=E7=BA=A7=E5=BC=B9?= =?UTF-8?q?=E7=AA=97-=E6=8C=89=E7=85=A7=E6=96=B0=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E9=87=8D=E5=86=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wte/controller/WeFishController.java | 6 + .../qgc_env/wte/service/WeFishService.java | 2 + .../wte/service/impl/WeFishServiceImpl.java | 107 ++++++++++++++++++ 3 files changed, 115 insertions(+) diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/wte/controller/WeFishController.java b/backend/src/main/java/com/yfd/platform/qgc_env/wte/controller/WeFishController.java index 961199d1..89d05114 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/wte/controller/WeFishController.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wte/controller/WeFishController.java @@ -87,6 +87,12 @@ public class WeFishController { return ResponseResult.successData(weFishService.getWeFishStatList(dataSourceRequest)); } + @PostMapping("/we/fisht/qgcDetail/GetKendoListCust") + @Operation(summary = "沿程鱼类变化情况二级弹窗-按照新逻辑重写") + public ResponseResult getQgcWeFishDetailList(@RequestBody DataSourceRequest dataSourceRequest) { + return ResponseResult.successData(weFishService.getQgcWeFishDetailList(dataSourceRequest)); + } + @PostMapping("/we/fisht/detail/GetKendoListCust") @Operation(summary = "沿程鱼类变化情况二级弹窗") public ResponseResult getWeFishDetailList(@RequestBody DataSourceRequest dataSourceRequest) { diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/wte/service/WeFishService.java b/backend/src/main/java/com/yfd/platform/qgc_env/wte/service/WeFishService.java index 3c24883c..cc4a62cc 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/wte/service/WeFishService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wte/service/WeFishService.java @@ -43,6 +43,8 @@ public interface WeFishService { DataSourceResult getWeFishStatList(DataSourceRequest dataSourceRequest); + DataSourceResult getQgcWeFishDetailList(DataSourceRequest dataSourceRequest); + DataSourceResult getWeFishDetailList(DataSourceRequest dataSourceRequest); DataSourceResult getWeFishStatTabList(DataSourceRequest dataSourceRequest); diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/wte/service/impl/WeFishServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/wte/service/impl/WeFishServiceImpl.java index c471e68c..aef4ac7e 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/wte/service/impl/WeFishServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wte/service/impl/WeFishServiceImpl.java @@ -441,6 +441,30 @@ public class WeFishServiceImpl implements WeFishService { return buildWeFishStatResult(rows); } + @Override + public DataSourceResult getQgcWeFishDetailList(DataSourceRequest dataSourceRequest) { + DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest(); + Page page = loadOptions == null ? null + : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake()); + Map paramMap = new HashMap<>(); + DataSourceRequest.FilterDescriptor filter = dataSourceRequest == null ? null : dataSourceRequest.getFilter(); + + String baseId = firstNonBlankWeFishFilter(filter, "baseId", "base_id"); + String rstcd = getFirstWeFishFilterText(filter, "stcd"); + String rvcd = firstNonBlankWeFishFilter(filter, "rvcd", "hbrvcd"); + String yr = getFirstWeFishFilterText(filter, "yr"); + String ty = getFirstWeFishFilterText(filter, "ty"); + + String sql = buildQgcWeFishDetailSql(baseId, rstcd, rvcd, yr, ty, paramMap); + List> rows = microservicDynamicSQLMapper.pageAllList(page, sql, paramMap); + + DataSourceResult result = new DataSourceResult<>(); + result.setData(buildQgcWeFishDetailResult(rows)); + result.setTotal(page != null ? page.getTotal() : (long) rows.size()); + result.setAggregates(new HashMap<>()); + return result; + } + @Override public DataSourceResult getWeFishDetailList(DataSourceRequest dataSourceRequest) { DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest(); @@ -977,6 +1001,63 @@ public class WeFishServiceImpl implements WeFishService { return result; } + private String buildQgcWeFishDetailSql(String baseId, + String rstcd, + String rvcd, + String yr, + String ty, + Map paramMap) { + StringBuilder sql = new StringBuilder(); + sql.append("SELECT ") + .append("section.RSTCD AS rstcd, ") + .append("eng.ENNM AS rstcdName, ") + .append("TO_CHAR(WM_CONCAT(DISTINCT section.STCD)) AS stcd, ") + .append("TO_CHAR(WM_CONCAT(DISTINCT section.STNM)) AS stnm, ") + .append("TO_CHAR(WM_CONCAT(DISTINCT dict.ZY_FISH_ID)) AS id ") + .append("FROM SD_WE_B_H section ") + .append("INNER JOIN SD_WE_R we ON section.STCD = we.STCD ") + .append(" AND NVL(we.IS_DELETED, 0) = 0 ") + .append(" AND NVL(we.STATUS, 1) = 1 ") + .append("INNER JOIN SD_WEFISH_R fish ON we.ID = fish.WER_ID ") + .append(" AND NVL(fish.IS_DELETED, 0) = 0 ") + .append("LEFT JOIN SD_ENGINFO_B_H eng ON section.RSTCD = eng.STCD ") + .append(" AND NVL(eng.IS_DELETED, 0) = 0 ") + .append("LEFT JOIN V_SD_FISHDICTORY_B dict ON fish.FTP = dict.FISH_ID ") + .append(" AND (section.HBRVCD = dict.RVCD OR dict.RVCD = 'ZY') ") + .append("WHERE NVL(section.USFL, 0) = 1 ") + .append("AND section.RSTCD IS NOT NULL ") + .append("AND dict.ZY_FISH_ID IS NOT NULL "); + + if (StrUtil.isNotBlank(baseId)) { + paramMap.put("qgcWeFishDetailBaseId", baseId); + sql.append("AND section.BASE_ID = #{map.qgcWeFishDetailBaseId} "); + } + if (StrUtil.isNotBlank(rstcd)) { + paramMap.put("qgcWeFishDetailRstcd", rstcd); + sql.append("AND section.RSTCD = #{map.qgcWeFishDetailRstcd} "); + } + if (StrUtil.isNotBlank(rvcd)) { + paramMap.put("qgcWeFishDetailRvcd", rvcd); + sql.append("AND section.HBRVCD = #{map.qgcWeFishDetailRvcd} "); + } + if (StrUtil.isNotBlank(yr)) { + paramMap.put("qgcWeFishDetailYr", yr); + sql.append("AND TO_CHAR(we.TM, 'yyyy') = #{map.qgcWeFishDetailYr} "); + } + if (StrUtil.isNotBlank(ty)) { + paramMap.put("qgcWeFishDetailTy", ty); + sql.append("AND CASE ") + .append("WHEN dict.SPEC_ORIGIN = 2 THEN '1' ") + .append("WHEN dict.SPEC_ORIGIN = 1 AND NVL(dict.PTYPE, -1) <> 6 THEN '2' ") + .append("WHEN dict.SPEC_ORIGIN = 1 AND dict.PTYPE = 6 THEN '3' ") + .append("END = #{map.qgcWeFishDetailTy} "); + } + + sql.append("GROUP BY section.RSTCD, eng.ENNM ") + .append("ORDER BY eng.ENNM ASC NULLS LAST"); + return sql.toString(); + } + private String buildWeFishDetailSql(String baseId, String rstcd, String rvcd, @@ -1107,6 +1188,27 @@ public class WeFishServiceImpl implements WeFishService { return result; } + private List buildQgcWeFishDetailResult(List> rows) { + List result = new ArrayList<>(); + if (CollUtil.isEmpty(rows)) { + return result; + } + Map fishNameMap = loadWeFishNameMap(); + for (Map row : rows) { + String stcd = safeWeFishString(firstPresentWeFishValue(row, "STCD", "stcd")); + String stnm = safeWeFishString(firstPresentWeFishValue(row, "STNM", "stnm")); + String fishIds = safeWeFishString(firstPresentWeFishValue(row, "ID", "id")); + + WeFishDetailVo vo = new WeFishDetailVo() + .setRsctd(safeWeFishString(firstPresentWeFishValue(row, "RSTCD", "rstcd"))) + .setRsctdName(safeWeFishString(firstPresentWeFishValue(row, "RSTCDNAME", "rstcdName"))) + .setFishList(resolveWeFishNameList(fishIds, fishNameMap)) + .setStcdList(buildWeFishStationItems(stcd, stnm)); + result.add(vo); + } + return result; + } + private List buildWeFishStationItems(String stcdText, String stnmText) { List result = new ArrayList<>(); if (StrUtil.isBlank(stcdText) || StrUtil.isBlank(stnmText)) { @@ -1140,6 +1242,11 @@ public class WeFishServiceImpl implements WeFishService { return result; } + private List resolveWeFishNameList(String idsText, Map fishNameMap) { + String names = resolveWeFishNames(idsText, fishNameMap); + return splitWeFishText(names); + } + private String firstNonBlankWeFishFilter(DataSourceRequest.FilterDescriptor filter, String... fields) { if (fields == null) { return null;