feat: 沿程鱼类变化情况二级弹窗-按照新逻辑重写

This commit is contained in:
tangwei 2026-06-29 17:47:59 +08:00
parent 7e89aefe6a
commit a5eb2496c6
3 changed files with 115 additions and 0 deletions

View File

@ -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) {

View File

@ -43,6 +43,8 @@ public interface WeFishService {
DataSourceResult<WeFishStatQgcVo> getWeFishStatList(DataSourceRequest dataSourceRequest);
DataSourceResult<WeFishDetailVo> getQgcWeFishDetailList(DataSourceRequest dataSourceRequest);
DataSourceResult<WeFishDetailVo> getWeFishDetailList(DataSourceRequest dataSourceRequest);
DataSourceResult<WeFishStatTabVo> getWeFishStatTabList(DataSourceRequest dataSourceRequest);

View File

@ -441,6 +441,30 @@ public class WeFishServiceImpl implements WeFishService {
return buildWeFishStatResult(rows);
}
@Override
public DataSourceResult<WeFishDetailVo> getQgcWeFishDetailList(DataSourceRequest dataSourceRequest) {
DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest();
Page<?> page = loadOptions == null ? null
: QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake());
Map<String, Object> 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<Map<String, Object>> rows = microservicDynamicSQLMapper.pageAllList(page, sql, paramMap);
DataSourceResult<WeFishDetailVo> 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<WeFishDetailVo> 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<String, Object> 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<WeFishDetailVo> buildQgcWeFishDetailResult(List<Map<String, Object>> rows) {
List<WeFishDetailVo> result = new ArrayList<>();
if (CollUtil.isEmpty(rows)) {
return result;
}
Map<String, String> fishNameMap = loadWeFishNameMap();
for (Map<String, Object> 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<WeFishDetailVo.StationItem> buildWeFishStationItems(String stcdText, String stnmText) {
List<WeFishDetailVo.StationItem> result = new ArrayList<>();
if (StrUtil.isBlank(stcdText) || StrUtil.isBlank(stnmText)) {
@ -1140,6 +1242,11 @@ public class WeFishServiceImpl implements WeFishService {
return result;
}
private List<String> resolveWeFishNameList(String idsText, Map<String, String> fishNameMap) {
String names = resolveWeFishNames(idsText, fishNameMap);
return splitWeFishText(names);
}
private String firstNonBlankWeFishFilter(DataSourceRequest.FilterDescriptor filter, String... fields) {
if (fields == null) {
return null;