feat: 根据条件查询过鱼设施鱼道传感器基础列表

This commit is contained in:
tangwei 2026-06-12 09:46:07 +08:00
parent e4a3427056
commit e4a2a5db6a
4 changed files with 266 additions and 7 deletions

View File

@ -70,6 +70,12 @@ public class FishPassageController {
return ResponseResult.successData(fpBuildService.getVmsstbprptList(dataSourceRequest)); return ResponseResult.successData(fpBuildService.getVmsstbprptList(dataSourceRequest));
} }
@PostMapping("/fpq/msstbprpt/GetKendoList")
@Operation(summary = "根据条件查询过鱼设施鱼道传感器基础列表")
public ResponseResult getFpqMsstbprptList(@RequestBody DataSourceRequest dataSourceRequest) {
return ResponseResult.successData(fpBuildService.getFpqMsstbprptList(dataSourceRequest));
}
@GetMapping("/msstbprpt/getStInfoByStcd") @GetMapping("/msstbprpt/getStInfoByStcd")
@Operation(summary = "根据站码查询单条过鱼设施基础数据") @Operation(summary = "根据站码查询单条过鱼设施基础数据")
public ResponseResult getStInfoByStcd(@RequestParam String stcd) { public ResponseResult getStInfoByStcd(@RequestParam String stcd) {

View File

@ -16,9 +16,18 @@ public class FpVmsstbprptVo implements Serializable {
@Schema(description = "过鱼设施编码") @Schema(description = "过鱼设施编码")
private String stcd; private String stcd;
@Schema(description = "旧接口兼容站码")
private String stCode;
@Schema(description = "过鱼设施名称") @Schema(description = "过鱼设施名称")
private String stnm; private String stnm;
@Schema(description = "旧接口兼容站名")
private String stName;
@Schema(description = "过鱼设施类型")
private String sttp;
@Schema(description = "过鱼设施类型编码") @Schema(description = "过鱼设施类型编码")
private String sttpCode; private String sttpCode;
@ -208,6 +217,12 @@ public class FpVmsstbprptVo implements Serializable {
@Schema(description = "主要过鱼月份") @Schema(description = "主要过鱼月份")
private String fpssmn; private String fpssmn;
@Schema(description = "监测方式")
private Integer mway;
@Schema(description = "监测方式名称")
private String mwayName;
@Schema(description = "数据监测频次") @Schema(description = "数据监测频次")
private Integer dtfrqcy; private Integer dtfrqcy;
@ -229,6 +244,12 @@ public class FpVmsstbprptVo implements Serializable {
@Schema(description = "LOGO") @Schema(description = "LOGO")
private String logo; private String logo;
@Schema(description = "旧接口兼容排序")
private Integer orderIndex;
@Schema(description = "描述")
private String description;
@Schema(description = "数据来源时间") @Schema(description = "数据来源时间")
private Date vlsrTm; private Date vlsrTm;

View File

@ -11,5 +11,7 @@ public interface FpBuildService {
DataSourceResult<FpVmsstbprptVo> getVmsstbprptList(DataSourceRequest dataSourceRequest); DataSourceResult<FpVmsstbprptVo> getVmsstbprptList(DataSourceRequest dataSourceRequest);
DataSourceResult<FpVmsstbprptVo> getFpqMsstbprptList(DataSourceRequest dataSourceRequest);
FpVmsstbprptVo getStInfoByStcd(String stcd); FpVmsstbprptVo getStInfoByStcd(String stcd);
} }

View File

@ -58,18 +58,37 @@ public class FpBuildServiceImpl implements FpBuildService {
@Override @Override
public DataSourceResult<FpVmsstbprptVo> getVmsstbprptList(DataSourceRequest dataSourceRequest) { public DataSourceResult<FpVmsstbprptVo> getVmsstbprptList(DataSourceRequest dataSourceRequest) {
return queryVmsstbprptList(dataSourceRequest, null);
}
@Override
public DataSourceResult<FpVmsstbprptVo> getFpqMsstbprptList(DataSourceRequest dataSourceRequest) {
return queryVmsstbprptList(dataSourceRequest, "FPQ");
}
private DataSourceResult<FpVmsstbprptVo> queryVmsstbprptList(DataSourceRequest dataSourceRequest, String fixedSttpCode) {
DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest(); DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest();
Page<?> page = loadOptions == null ? null : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake()); Page<?> page = loadOptions == null ? null : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake());
Map<String, Object> paramMap = new HashMap<>(); Map<String, Object> paramMap = new HashMap<>();
StringBuilder sql = new StringBuilder(buildVmsstbprptBaseSql()); StringBuilder innerSql = new StringBuilder(buildVmsstbprptBaseSql());
if (fixedSttpCode != null && !fixedSttpCode.isBlank()) {
paramMap.put("fixedSttpCode", fixedSttpCode);
innerSql.append(" AND fp.STTP = #{map.fixedSttpCode}");
}
String filterSql = buildVmsstbprptFilterCondition(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), String filterSql = buildVmsstbprptFilterCondition(dataSourceRequest == null ? null : dataSourceRequest.getFilter(),
paramMap, new int[]{0}); paramMap, new int[]{0});
if (!filterSql.isBlank()) { if (!filterSql.isBlank()) {
sql.append(" AND ").append(filterSql); innerSql.append(" AND ").append(filterSql);
} }
StringBuilder sql = new StringBuilder("SELECT ")
.append(buildVmsstbprptSelectSql(dataSourceRequest == null ? null : dataSourceRequest.getSelect()))
.append(" FROM (")
.append(innerSql)
.append(") t ");
sql.append(buildVmsstbprptOrderBySql(dataSourceRequest == null ? null : dataSourceRequest.getSort())); sql.append(buildVmsstbprptOrderBySql(dataSourceRequest == null ? null : dataSourceRequest.getSort()));
List<FpVmsstbprptVo> list = microservicDynamicSQLMapper.pageAllListWithResultType( List<FpVmsstbprptVo> list = microservicDynamicSQLMapper.pageAllListWithResultType(
@ -98,8 +117,11 @@ public class FpBuildServiceImpl implements FpBuildService {
StringBuilder sql = new StringBuilder(); StringBuilder sql = new StringBuilder();
sql.append("SELECT ") sql.append("SELECT ")
.append("fp.STCD AS stcd, ") .append("fp.STCD AS stcd, ")
.append("fp.STCD AS stCode, ")
.append("fp.LOGO AS logo, ") .append("fp.LOGO AS logo, ")
.append("fp.STNM AS stnm, ") .append("fp.STNM AS stnm, ")
.append("fp.STNM AS stName, ")
.append("fp.STTP AS sttp, ")
.append("fp.STTP AS sttpCode, ") .append("fp.STTP AS sttpCode, ")
.append("sttp.STTP_NAME AS sttpName, ") .append("sttp.STTP_NAME AS sttpName, ")
.append("sttp.FULL_PATH AS sttpFullPath, ") .append("sttp.FULL_PATH AS sttpFullPath, ")
@ -170,9 +192,13 @@ public class FpBuildServiceImpl implements FpBuildService {
.append("fp.JBTXCS AS jbtxcs, ") .append("fp.JBTXCS AS jbtxcs, ")
.append("fp.IS_UP AS isUp, ") .append("fp.IS_UP AS isUp, ")
.append("fp.IS_DOWN AS isDown, ") .append("fp.IS_DOWN AS isDown, ")
.append("CAST(NULL AS NUMBER(1,0)) AS mway, ")
.append("CAST(NULL AS VARCHAR2(32)) AS mwayName, ")
.append("fp.REMARK AS remark, ") .append("fp.REMARK AS remark, ")
.append("fp.VLSR AS vlsr, ") .append("fp.VLSR AS vlsr, ")
.append("fp.VLSR_TM AS vlsrTm, ") .append("fp.VLSR_TM AS vlsrTm, ")
.append("fp.ORDER_INDEX AS orderIndex, ")
.append("CAST(NULL AS VARCHAR2(1000)) AS description, ")
.append("NVL(hb.ORDER_INDEX, 999999) AS baseStepSort, ") .append("NVL(hb.ORDER_INDEX, 999999) AS baseStepSort, ")
.append("NVL(hbrv.ORDER_INDEX, 999999) AS rvcdStepSort, ") .append("NVL(hbrv.ORDER_INDEX, 999999) AS rvcdStepSort, ")
.append("NVL(eng.ORDER_INDEX, 999999) AS rstcdStepSort, ") .append("NVL(eng.ORDER_INDEX, 999999) AS rstcdStepSort, ")
@ -188,6 +214,110 @@ public class FpBuildServiceImpl implements FpBuildService {
return sql.toString(); return sql.toString();
} }
private String buildVmsstbprptSelectSql(List<String> selectFields) {
if (CollectionUtils.isEmpty(selectFields)) {
return "t.*";
}
Map<String, String> selectMap = buildVmsstbprptSelectMap();
List<String> selectItems = new ArrayList<>();
for (String field : selectFields) {
String column = selectMap.get(field);
if (column != null && !column.isBlank()) {
selectItems.add(column);
}
}
return selectItems.isEmpty() ? "t.*" : String.join(", ", selectItems);
}
private Map<String, String> buildVmsstbprptSelectMap() {
Map<String, String> selectMap = new HashMap<>();
selectMap.put("stcd", "t.stcd AS stcd");
selectMap.put("stCode", "t.stCode AS stCode");
selectMap.put("stnm", "t.stnm AS stnm");
selectMap.put("stName", "t.stName AS stName");
selectMap.put("sttp", "t.sttp AS sttp");
selectMap.put("sttpCode", "t.sttpCode AS sttpCode");
selectMap.put("sttpName", "t.sttpName AS sttpName");
selectMap.put("sttpFullPath", "t.sttpFullPath AS sttpFullPath");
selectMap.put("sttpTreeLevel", "t.sttpTreeLevel AS sttpTreeLevel");
selectMap.put("rstcd", "t.rstcd AS rstcd");
selectMap.put("ennm", "t.ennm AS ennm");
selectMap.put("baseId", "t.baseId AS baseId");
selectMap.put("baseName", "t.baseName AS baseName");
selectMap.put("hbrvcd", "t.hbrvcd AS hbrvcd");
selectMap.put("hbrvcdName", "t.hbrvcdName AS hbrvcdName");
selectMap.put("lgtd", "t.lgtd AS lgtd");
selectMap.put("lttd", "t.lttd AS lttd");
selectMap.put("elev", "t.elev AS elev");
selectMap.put("stlc", "t.stlc AS stlc");
selectMap.put("dtin", "t.dtin AS dtin");
selectMap.put("dtinName", "t.dtinName AS dtinName");
selectMap.put("dtinTm", "t.dtinTm AS dtinTm");
selectMap.put("bldsttCcode", "t.bldsttCcode AS bldsttCcode");
selectMap.put("bldsttCcodeName", "t.bldsttCcodeName AS bldsttCcodeName");
selectMap.put("stdsdt", "t.stdsdt AS stdsdt");
selectMap.put("pststdt", "t.pststdt AS pststdt");
selectMap.put("pesstdt", "t.pesstdt AS pesstdt");
selectMap.put("swdt", "t.swdt AS swdt");
selectMap.put("jcdt", "t.jcdt AS jcdt");
selectMap.put("wddt", "t.wddt AS wddt");
selectMap.put("introduce", "t.introduce AS introduce");
selectMap.put("ydxs", "t.ydxs AS ydxs");
selectMap.put("ydzcd", "t.ydzcd AS ydzcd");
selectMap.put("ydjkz", "t.ydjkz AS ydjkz");
selectMap.put("ydjkcnt", "t.ydjkcnt AS ydjkcnt");
selectMap.put("jkhg", "t.jkhg AS jkhg");
selectMap.put("ydyyxs", "t.ydyyxs AS ydyyxs");
selectMap.put("ydckz", "t.ydckz AS ydckz");
selectMap.put("ydckcnt", "t.ydckcnt AS ydckcnt");
selectMap.put("ckhg", "t.ckhg AS ckhg");
selectMap.put("ydcsv", "t.ydcsv AS ydcsv");
selectMap.put("ydcscd", "t.ydcscd AS ydcscd");
selectMap.put("ydcskd", "t.ydcskd AS ydcskd");
selectMap.put("ydcspd", "t.ydcspd AS ydcspd");
selectMap.put("ydcscnt", "t.ydcscnt AS ydcscnt");
selectMap.put("ydxxccnt", "t.ydxxccnt AS ydxxccnt");
selectMap.put("v", "t.v AS v");
selectMap.put("fzrdmxz", "t.fzrdmxz AS fzrdmxz");
selectMap.put("fzrtdsz", "t.fzrtdsz AS fzrtdsz");
selectMap.put("fzryxwdp", "t.fzryxwdp AS fzryxwdp");
selectMap.put("fzrpj", "t.fzrpj AS fzrpj");
selectMap.put("symtlc", "t.symtlc AS symtlc");
selectMap.put("symtxs", "t.symtxs AS symtxs");
selectMap.put("xymtlc", "t.xymtlc AS xymtlc");
selectMap.put("xymtxs", "t.xymtxs AS xymtxs");
selectMap.put("jyfs", "t.jyfs AS jyfs");
selectMap.put("yyfs", "t.yyfs AS yyfs");
selectMap.put("syjcnt", "t.syjcnt AS syjcnt");
selectMap.put("syjhg", "t.syjhg AS syjhg");
selectMap.put("syjq", "t.syjq AS syjq");
selectMap.put("syjsz", "t.syjsz AS syjsz");
selectMap.put("syjwdp", "t.syjwdp AS syjwdp");
selectMap.put("sjgycnt", "t.sjgycnt AS sjgycnt");
selectMap.put("zygydxms", "t.zygydxms AS zygydxms");
selectMap.put("jggydxms", "t.jggydxms AS jggydxms");
selectMap.put("gytm", "t.gytm AS gytm");
selectMap.put("yxtm", "t.yxtm AS yxtm");
selectMap.put("fpssmn", "t.fpssmn AS fpssmn");
selectMap.put("dtfrqcy", "t.dtfrqcy AS dtfrqcy");
selectMap.put("jbtxcs", "t.jbtxcs AS jbtxcs");
selectMap.put("isUp", "t.isUp AS isUp");
selectMap.put("isDown", "t.isDown AS isDown");
selectMap.put("mway", "t.mway AS mway");
selectMap.put("mwayName", "t.mwayName AS mwayName");
selectMap.put("remark", "t.remark AS remark");
selectMap.put("vlsr", "t.vlsr AS vlsr");
selectMap.put("vlsrTm", "t.vlsrTm AS vlsrTm");
selectMap.put("logo", "t.logo AS logo");
selectMap.put("orderIndex", "t.orderIndex AS orderIndex");
selectMap.put("description", "t.description AS description");
selectMap.put("baseStepSort", "t.baseStepSort AS baseStepSort");
selectMap.put("rvcdStepSort", "t.rvcdStepSort AS rvcdStepSort");
selectMap.put("rstcdStepSort", "t.rstcdStepSort AS rstcdStepSort");
selectMap.put("siteStepSort", "t.siteStepSort AS siteStepSort");
return selectMap;
}
private String buildVmsstbprptFilterCondition(DataSourceRequest.FilterDescriptor filter, private String buildVmsstbprptFilterCondition(DataSourceRequest.FilterDescriptor filter,
Map<String, Object> paramMap, Map<String, Object> paramMap,
int[] indexHolder) { int[] indexHolder) {
@ -309,8 +439,11 @@ public class FpBuildServiceImpl implements FpBuildService {
} }
Map<String, String> columnMap = new HashMap<>(); Map<String, String> columnMap = new HashMap<>();
columnMap.put("stcd", "fp.STCD"); columnMap.put("stcd", "fp.STCD");
columnMap.put("stCode", "fp.ST_CODE");
columnMap.put("logo", "fp.LOGO"); columnMap.put("logo", "fp.LOGO");
columnMap.put("stnm", "fp.STNM"); columnMap.put("stnm", "fp.STNM");
columnMap.put("stName", "fp.STNM");
columnMap.put("sttp", "fp.STTP");
columnMap.put("sttpCode", "fp.STTP"); columnMap.put("sttpCode", "fp.STTP");
columnMap.put("sttpName", "sttp.STTP_NAME"); columnMap.put("sttpName", "sttp.STTP_NAME");
columnMap.put("sttpFullPath", "sttp.FULL_PATH"); columnMap.put("sttpFullPath", "sttp.FULL_PATH");
@ -378,9 +511,13 @@ public class FpBuildServiceImpl implements FpBuildService {
columnMap.put("jbtxcs", "fp.JBTXCS"); columnMap.put("jbtxcs", "fp.JBTXCS");
columnMap.put("isUp", "fp.IS_UP"); columnMap.put("isUp", "fp.IS_UP");
columnMap.put("isDown", "fp.IS_DOWN"); columnMap.put("isDown", "fp.IS_DOWN");
columnMap.put("mway", "NULL");
columnMap.put("mwayName", "NULL");
columnMap.put("remark", "fp.REMARK"); columnMap.put("remark", "fp.REMARK");
columnMap.put("vlsr", "fp.VLSR"); columnMap.put("vlsr", "fp.VLSR");
columnMap.put("vlsrTm", "fp.VLSR_TM"); columnMap.put("vlsrTm", "fp.VLSR_TM");
columnMap.put("orderIndex", "fp.ORDER_INDEX");
columnMap.put("description", "NULL");
columnMap.put("siteStepSort", "fp.ORDER_INDEX"); columnMap.put("siteStepSort", "fp.ORDER_INDEX");
columnMap.put("rstcdStepSort", "eng.ORDER_INDEX"); columnMap.put("rstcdStepSort", "eng.ORDER_INDEX");
columnMap.put("baseStepSort", "hb.ORDER_INDEX"); columnMap.put("baseStepSort", "hb.ORDER_INDEX");
@ -390,15 +527,15 @@ public class FpBuildServiceImpl implements FpBuildService {
private String buildVmsstbprptOrderBySql(List<DataSourceRequest.SortDescriptor> sorts) { private String buildVmsstbprptOrderBySql(List<DataSourceRequest.SortDescriptor> sorts) {
if (sorts == null || sorts.isEmpty()) { if (sorts == null || sorts.isEmpty()) {
return " ORDER BY NVL(hb.ORDER_INDEX, 999999) ASC, NVL(hbrv.ORDER_INDEX, 999999) ASC, " + return " ORDER BY t.baseStepSort ASC NULLS LAST, t.rvcdStepSort ASC NULLS LAST, " +
"NVL(eng.ORDER_INDEX, 999999) ASC, NVL(fp.ORDER_INDEX, 999999) ASC, fp.STCD ASC"; "t.rstcdStepSort ASC NULLS LAST, t.siteStepSort ASC NULLS LAST, t.stcd ASC";
} }
List<String> orderItems = new ArrayList<>(); List<String> orderItems = new ArrayList<>();
for (DataSourceRequest.SortDescriptor sort : sorts) { for (DataSourceRequest.SortDescriptor sort : sorts) {
if (sort == null || sort.getField() == null || sort.getField().isBlank()) { if (sort == null || sort.getField() == null || sort.getField().isBlank()) {
continue; continue;
} }
String column = mapVmsstbprptColumn(sort.getField()); String column = mapVmsstbprptOuterColumn(sort.getField());
if (column == null) { if (column == null) {
continue; continue;
} }
@ -406,9 +543,102 @@ public class FpBuildServiceImpl implements FpBuildService {
orderItems.add(column + " " + direction + " NULLS LAST"); orderItems.add(column + " " + direction + " NULLS LAST");
} }
if (orderItems.isEmpty()) { if (orderItems.isEmpty()) {
return " ORDER BY NVL(hb.ORDER_INDEX, 999999) ASC, NVL(hbrv.ORDER_INDEX, 999999) ASC, " + return " ORDER BY t.baseStepSort ASC NULLS LAST, t.rvcdStepSort ASC NULLS LAST, " +
"NVL(eng.ORDER_INDEX, 999999) ASC, NVL(fp.ORDER_INDEX, 999999) ASC, fp.STCD ASC"; "t.rstcdStepSort ASC NULLS LAST, t.siteStepSort ASC NULLS LAST, t.stcd ASC";
} }
return " ORDER BY " + String.join(", ", orderItems); return " ORDER BY " + String.join(", ", orderItems);
} }
private String mapVmsstbprptOuterColumn(String field) {
if (field == null || field.isBlank()) {
return null;
}
return switch (field) {
case "stcd" -> "t.stcd";
case "stCode" -> "t.stCode";
case "logo" -> "t.logo";
case "stnm" -> "t.stnm";
case "stName" -> "t.stName";
case "sttp" -> "t.sttp";
case "sttpCode" -> "t.sttpCode";
case "sttpName" -> "t.sttpName";
case "sttpFullPath" -> "t.sttpFullPath";
case "sttpTreeLevel" -> "t.sttpTreeLevel";
case "rstcd" -> "t.rstcd";
case "ennm" -> "t.ennm";
case "baseId" -> "t.baseId";
case "baseName" -> "t.baseName";
case "hbrvcd" -> "t.hbrvcd";
case "hbrvcdName" -> "t.hbrvcdName";
case "lgtd" -> "t.lgtd";
case "lttd" -> "t.lttd";
case "elev" -> "t.elev";
case "stlc" -> "t.stlc";
case "dtin" -> "t.dtin";
case "dtinName" -> "t.dtinName";
case "dtinTm" -> "t.dtinTm";
case "bldsttCcode" -> "t.bldsttCcode";
case "bldsttCcodeName" -> "t.bldsttCcodeName";
case "stdsdt" -> "t.stdsdt";
case "pststdt" -> "t.pststdt";
case "pesstdt" -> "t.pesstdt";
case "swdt" -> "t.swdt";
case "jcdt" -> "t.jcdt";
case "wddt" -> "t.wddt";
case "introduce" -> "t.introduce";
case "ydxs" -> "t.ydxs";
case "ydzcd" -> "t.ydzcd";
case "ydjkz" -> "t.ydjkz";
case "ydjkcnt" -> "t.ydjkcnt";
case "jkhg" -> "t.jkhg";
case "ydyyxs" -> "t.ydyyxs";
case "ydckz" -> "t.ydckz";
case "ydckcnt" -> "t.ydckcnt";
case "ckhg" -> "t.ckhg";
case "ydcsv" -> "t.ydcsv";
case "ydcscd" -> "t.ydcscd";
case "ydcskd" -> "t.ydcskd";
case "ydcspd" -> "t.ydcspd";
case "ydcscnt" -> "t.ydcscnt";
case "ydxxccnt" -> "t.ydxxccnt";
case "v" -> "t.v";
case "fzrdmxz" -> "t.fzrdmxz";
case "fzrtdsz" -> "t.fzrtdsz";
case "fzryxwdp" -> "t.fzryxwdp";
case "fzrpj" -> "t.fzrpj";
case "symtlc" -> "t.symtlc";
case "symtxs" -> "t.symtxs";
case "xymtlc" -> "t.xymtlc";
case "xymtxs" -> "t.xymtxs";
case "jyfs" -> "t.jyfs";
case "yyfs" -> "t.yyfs";
case "syjcnt" -> "t.syjcnt";
case "syjhg" -> "t.syjhg";
case "syjq" -> "t.syjq";
case "syjsz" -> "t.syjsz";
case "syjwdp" -> "t.syjwdp";
case "sjgycnt" -> "t.sjgycnt";
case "zygydxms" -> "t.zygydxms";
case "jggydxms" -> "t.jggydxms";
case "gytm" -> "t.gytm";
case "yxtm" -> "t.yxtm";
case "fpssmn" -> "t.fpssmn";
case "dtfrqcy" -> "t.dtfrqcy";
case "jbtxcs" -> "t.jbtxcs";
case "isUp" -> "t.isUp";
case "isDown" -> "t.isDown";
case "mway" -> "t.mway";
case "mwayName" -> "t.mwayName";
case "remark" -> "t.remark";
case "vlsr" -> "t.vlsr";
case "vlsrTm" -> "t.vlsrTm";
case "orderIndex" -> "t.orderIndex";
case "description" -> "t.description";
case "baseStepSort" -> "t.baseStepSort";
case "rvcdStepSort" -> "t.rvcdStepSort";
case "rstcdStepSort" -> "t.rstcdStepSort";
case "siteStepSort" -> "t.siteStepSort";
default -> null;
};
}
} }