feat: 生态流量泄放设施基础信息查询

This commit is contained in:
tangwei 2026-06-18 14:21:28 +08:00
parent d42040b133
commit eea7aa8213
4 changed files with 379 additions and 0 deletions

View File

@ -4,6 +4,7 @@ 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_eng.eq.entity.vo.EngEqBaseMsstbprptVo;
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqDrtpDataVo;
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqIntervalVo;
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqLimitQueryVo;
@ -73,6 +74,13 @@ public class EngEqDataController {
return ResponseResult.successData(result);
}
@PostMapping("/base/msstbprpt/GetKendoList")
@Operation(summary = "生态流量泄放设施基础信息查询")
public ResponseResult getBaseMsstbprptList(@RequestBody DataSourceRequest dataSourceRequest) {
DataSourceResult<EngEqBaseMsstbprptVo> result = engEqDataService.getBaseMsstbprptList(dataSourceRequest);
return ResponseResult.successData(result);
}
@PostMapping("/interval/qgc/hour/GetKendoListCust")
@Operation(summary = "生态流量达标率小时统计(二级页面)")
public ResponseResult getQgcHourKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {

View File

@ -0,0 +1,77 @@
package com.yfd.platform.qgc_eng.eq.entity.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
@Data
@Schema(description = "生态流量泄放设施基础信息查询")
public class EngEqBaseMsstbprptVo implements Serializable {
private static final long serialVersionUID = 1L;
@Schema(description = "设施编码")
private String stcd;
@Schema(description = "设施名称")
private String stnm;
@Schema(description = "设施类型编码")
private String sttpCode;
@Schema(description = "设施类型名称")
private String sttpName;
@Schema(description = "所属电站编码")
private String rstcd;
@Schema(description = "所属电站名称")
private String rstcdName;
@Schema(description = "基地编码")
private String baseId;
@Schema(description = "基地名称")
private String baseName;
@Schema(description = "基地流域编码")
private String hbrvcd;
@Schema(description = "基地流域名称")
private String hbrvcdName;
@Schema(description = "设施位置")
private String stlc;
@Schema(description = "经度")
private Double lgtd;
@Schema(description = "纬度")
private Double lttd;
@Schema(description = "高程")
private Double elev;
@Schema(description = "建设状态分类编码")
private Integer bldsttCode;
@Schema(description = "建设状态分类名称")
private String bldsttCodeName;
@Schema(description = "数据接入状态")
private Integer dtin;
@Schema(description = "数据接入状态中文")
private String dtinName;
@Schema(description = "数据接入时间")
private Date dtinTm;
@Schema(description = "数据时间")
private Date tm;
@Schema(description = "排序")
private Integer orderIndex;
}

View File

@ -2,6 +2,7 @@ package com.yfd.platform.qgc_eng.eq.service;
import com.yfd.platform.common.DataSourceRequest;
import com.yfd.platform.common.DataSourceResult;
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqBaseMsstbprptVo;
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;
@ -32,6 +33,8 @@ public interface EngEqDataService {
DataSourceResult<EngEqMsstbprptVo> getMsstbprptList(DataSourceRequest dataSourceRequest);
DataSourceResult<EngEqBaseMsstbprptVo> getBaseMsstbprptList(DataSourceRequest dataSourceRequest);
DataSourceResult<EngEqHourIntervalVo> getQgcHourKendoListCust(DataSourceRequest dataSourceRequest);
DataSourceResult<EngEqDayIntervalVo> getQgcDayKendoListCust(DataSourceRequest dataSourceRequest);

View File

@ -12,6 +12,7 @@ import com.yfd.platform.common.GroupingInfo;
import com.yfd.platform.common.MicroservicDynamicSQLMapper;
import com.yfd.platform.common.enums.QecIntervalEnum;
import com.yfd.platform.common.enums.ShowEnum;
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqBaseMsstbprptVo;
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;
@ -102,6 +103,194 @@ public class EngEqDataServiceImpl implements EngEqDataService {
return queryMsstbprptGroupList(dataSourceRequest, loadOptions);
}
@Override
public DataSourceResult<EngEqBaseMsstbprptVo> getBaseMsstbprptList(DataSourceRequest dataSourceRequest) {
DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest();
if (CollUtil.isEmpty(dataSourceRequest == null ? null : dataSourceRequest.getGroup())) {
return queryBaseMsstbprptDetailList(dataSourceRequest, loadOptions);
}
return queryBaseMsstbprptGroupList(dataSourceRequest, loadOptions);
}
private DataSourceResult<EngEqBaseMsstbprptVo> queryBaseMsstbprptDetailList(DataSourceRequest dataSourceRequest,
DataSourceLoadOptionsBase loadOptions) {
StringBuilder sql = new StringBuilder();
sql.append("SELECT ")
.append(buildBaseMsstbprptDetailSelectSql(dataSourceRequest == null ? null : dataSourceRequest.getSelect()))
.append(" FROM (")
.append(buildBaseMsstbprptViewSql())
.append(") t WHERE 1 = 1 ");
Map<String, Object> paramMap = new HashMap<>();
String filterSql = buildBaseMsstbprptFilterCondition(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), paramMap, new int[]{0});
if (StrUtil.isNotBlank(filterSql)) {
sql.append(" AND ").append(filterSql).append(" ");
}
sql.append(buildBaseMsstbprptDetailOrderBySql(dataSourceRequest == null ? null : dataSourceRequest.getSort()));
Page<?> page = loadOptions == null ? null : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake());
List<EngEqBaseMsstbprptVo> list = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, EngEqBaseMsstbprptVo.class);
DataSourceResult<EngEqBaseMsstbprptVo> result = new DataSourceResult<>();
result.setData(list);
result.setTotal(page != null ? page.getTotal() : list.size());
result.setAggregates(new HashMap<>());
return result;
}
private DataSourceResult<EngEqBaseMsstbprptVo> queryBaseMsstbprptGroupList(DataSourceRequest dataSourceRequest,
DataSourceLoadOptionsBase loadOptions) {
List<DataSourceRequest.GroupDescriptor> groups = dataSourceRequest.getGroup();
GroupingInfo[] groupInfos = loadOptions == null ? new GroupingInfo[0] : loadOptions.getGroup();
List<String> selectItems = new ArrayList<>();
for (DataSourceRequest.GroupDescriptor descriptor : groups) {
if (descriptor == null || StrUtil.isBlank(descriptor.getField())) {
continue;
}
String column = mapBaseMsstbprptColumn(descriptor.getField());
if (StrUtil.isBlank(column)) {
continue;
}
selectItems.add(column + " AS " + descriptor.getField().toUpperCase());
selectItems.add("COUNT(*) AS COUNT_" + descriptor.getField().toUpperCase());
if (CollUtil.isNotEmpty(descriptor.getAggregates())) {
for (DataSourceRequest.AggregateDescriptor aggregate : descriptor.getAggregates()) {
String aggregateColumn = mapBaseMsstbprptColumn(aggregate.getField());
if (StrUtil.isBlank(aggregateColumn) || StrUtil.isBlank(aggregate.getAggregate())) {
continue;
}
selectItems.add(buildAggregateSql(aggregate.getAggregate(), aggregateColumn, aggregate.getField()));
}
}
}
if (selectItems.isEmpty()) {
selectItems.add("t.STCD AS STCD");
selectItems.add("COUNT(*) AS COUNT_STCD");
}
StringBuilder sql = new StringBuilder();
sql.append("SELECT ")
.append(String.join(", ", selectItems))
.append(" FROM (")
.append(buildBaseMsstbprptViewSql())
.append(") t WHERE 1 = 1 ");
Map<String, Object> paramMap = new HashMap<>();
String filterSql = buildBaseMsstbprptFilterCondition(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), paramMap, new int[]{0});
if (StrUtil.isNotBlank(filterSql)) {
sql.append(" AND ").append(filterSql).append(" ");
}
List<String> groupByColumns = new ArrayList<>();
for (DataSourceRequest.GroupDescriptor descriptor : groups) {
if (descriptor == null || StrUtil.isBlank(descriptor.getField())) {
continue;
}
String column = mapBaseMsstbprptColumn(descriptor.getField());
if (StrUtil.isNotBlank(column)) {
groupByColumns.add(column);
}
}
if (!groupByColumns.isEmpty()) {
sql.append(" GROUP BY ").append(String.join(", ", groupByColumns)).append(" ");
}
sql.append(buildBaseMsstbprptGroupOrderBySql(groups));
List<Map<String, Object>> rows = microservicDynamicSQLMapper.pageAllList(null, sql.toString(), paramMap);
DataSourceResult<EngEqBaseMsstbprptVo> result = new DataSourceResult<>();
if (Boolean.TRUE.equals(dataSourceRequest.getGroupResultFlat())) {
result.setData((List<EngEqBaseMsstbprptVo>) (List<?>) new GroupHelper().faltGroup(rows, Arrays.asList(groupInfos)));
} else {
result.setData((List<EngEqBaseMsstbprptVo>) (List<?>) new GroupHelper().group(rows, Arrays.asList(groupInfos)));
}
result.setTotal((long) rows.size());
result.setAggregates(new HashMap<>());
return result;
}
private String buildBaseMsstbprptViewSql() {
return "SELECT " +
"eq.STCD AS stcd, " +
"eq.STNM AS stnm, " +
"eq.STTP AS sttpCode, " +
"CASE eq.STTP " +
" WHEN 'EQ_1' THEN '生态放流孔' " +
" WHEN 'EQ_2' THEN '生态放流闸' " +
" WHEN 'EQ_3' THEN '生态放流洞' " +
" WHEN 'EQ_4' THEN '生态放流管' " +
" WHEN 'EQ_5' THEN '基荷发电' " +
" WHEN 'EQ_6' THEN '生态机组' " +
" ELSE eq.STTP END AS sttpName, " +
"eq.RSTCD AS rstcd, " +
"eng.ENNM AS rstcdName, " +
"eq.BASE_ID AS baseId, " +
"hb.BASENAME AS baseName, " +
"eq.HBRVCD AS hbrvcd, " +
"hbrv.HBRVNM AS hbrvcdName, " +
"eq.STLC AS stlc, " +
"eq.LGTD AS lgtd, " +
"eq.LTTD AS lttd, " +
"eq.ELEV AS elev, " +
"eq.BLDSTT_CODE AS bldsttCode, " +
"CASE eq.BLDSTT_CODE WHEN 0 THEN '未建/规划' WHEN 1 THEN '在建' WHEN 2 THEN '已建' ELSE NULL END AS bldsttCodeName, " +
"eq.DTIN AS dtin, " +
"CASE NVL(eq.DTIN, 0) WHEN 1 THEN '是' WHEN 0 THEN '否' ELSE NULL END AS dtinName, " +
"eq.DTIN_TM AS dtinTm, " +
"eq.TM AS tm, " +
"eq.ORDER_INDEX AS orderIndex " +
"FROM SD_EQ_B_H eq " +
"LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = eq.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 " +
"LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = eq.BASE_ID AND NVL(hb.IS_DELETED, 0) = 0 " +
"LEFT JOIN SD_HBRV_DIC hbrv ON hbrv.HBRVCD = eq.HBRVCD AND hbrv.BASEID = eq.BASE_ID " +
" AND NVL(hbrv.IS_DELETED, 0) = 0 AND NVL(hbrv.ENABLED, 1) = 1 " +
"WHERE NVL(eq.IS_DELETED, 0) = 0";
}
private String buildBaseMsstbprptDetailSelectSql(List<String> selectFields) {
Map<String, String> columns = baseMsstbprptFieldColumns();
List<String> selected = new ArrayList<>();
if (CollUtil.isEmpty(selectFields)) {
selected.addAll(columns.values());
} else {
for (String field : selectFields) {
String column = columns.get(field);
if (StrUtil.isNotBlank(column)) {
selected.add(column);
}
}
if (selected.isEmpty()) {
selected.addAll(columns.values());
}
}
return String.join(", ", selected);
}
private Map<String, String> baseMsstbprptFieldColumns() {
Map<String, String> columns = new LinkedHashMap<>();
columns.put("stcd", "t.stcd AS stcd");
columns.put("stnm", "t.stnm AS stnm");
columns.put("sttp", "t.sttpCode AS sttp");
columns.put("sttpCode", "t.sttpCode AS sttpCode");
columns.put("sttpName", "t.sttpName AS sttpName");
columns.put("rstcd", "t.rstcd AS rstcd");
columns.put("rstcdName", "t.rstcdName AS rstcdName");
columns.put("baseId", "t.baseId AS baseId");
columns.put("baseName", "t.baseName AS baseName");
columns.put("hbrvcd", "t.hbrvcd AS hbrvcd");
columns.put("hbrvcdName", "t.hbrvcdName AS hbrvcdName");
columns.put("stlc", "t.stlc AS stlc");
columns.put("lgtd", "t.lgtd AS lgtd");
columns.put("lttd", "t.lttd AS lttd");
columns.put("elev", "t.elev AS elev");
columns.put("bldsttCode", "t.bldsttCode AS bldsttCode");
columns.put("bldsttCodeName", "t.bldsttCodeName AS bldsttCodeName");
columns.put("dtin", "t.dtin AS dtin");
columns.put("dtinName", "t.dtinName AS dtinName");
columns.put("dtinTm", "t.dtinTm AS dtinTm");
columns.put("tm", "t.tm AS tm");
columns.put("orderIndex", "t.orderIndex AS orderIndex");
return columns;
}
private DataSourceResult<EngEqMsstbprptVo> queryMsstbprptDetailList(DataSourceRequest dataSourceRequest,
DataSourceLoadOptionsBase loadOptions) {
StringBuilder sql = new StringBuilder();
@ -2808,6 +2997,74 @@ public class EngEqDataServiceImpl implements EngEqDataService {
return orders.isEmpty() ? "" : " ORDER BY " + String.join(", ", orders);
}
private String buildBaseMsstbprptFilterCondition(DataSourceRequest.FilterDescriptor filter,
Map<String, Object> paramMap,
int[] indexHolder) {
if (filter == null) {
return "";
}
if (StrUtil.isNotBlank(filter.getField())) {
String column = mapBaseMsstbprptColumn(filter.getField());
if (StrUtil.isBlank(column)) {
return "";
}
return buildGenericCondition(column, filter, paramMap, indexHolder, isBaseMsstbprptDateField(filter.getField()));
}
if (CollUtil.isEmpty(filter.getFilters())) {
return "";
}
List<String> conditions = new ArrayList<>();
for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) {
String childSql = buildBaseMsstbprptFilterCondition(child, paramMap, indexHolder);
if (StrUtil.isNotBlank(childSql)) {
conditions.add("(" + childSql + ")");
}
}
if (conditions.isEmpty()) {
return "";
}
String logic = "or".equalsIgnoreCase(filter.getLogic()) ? " OR " : " AND ";
return String.join(logic, conditions);
}
private String buildBaseMsstbprptDetailOrderBySql(List<DataSourceRequest.SortDescriptor> sortList) {
List<String> orders = new ArrayList<>();
if (CollUtil.isNotEmpty(sortList)) {
for (DataSourceRequest.SortDescriptor sort : sortList) {
if (sort == null || StrUtil.isBlank(sort.getField())) {
continue;
}
String column = mapBaseMsstbprptColumn(sort.getField());
if (StrUtil.isBlank(column)) {
continue;
}
orders.add(column + ("desc".equalsIgnoreCase(sort.getDir()) ? " DESC" : " ASC"));
}
}
if (orders.isEmpty()) {
orders.add("NVL(t.orderIndex, 999999) ASC");
orders.add("t.stnm ASC");
}
return " ORDER BY " + String.join(", ", orders);
}
private String buildBaseMsstbprptGroupOrderBySql(List<DataSourceRequest.GroupDescriptor> groups) {
List<String> orders = new ArrayList<>();
if (CollUtil.isNotEmpty(groups)) {
for (DataSourceRequest.GroupDescriptor descriptor : groups) {
if (descriptor == null || StrUtil.isBlank(descriptor.getField())) {
continue;
}
String column = mapBaseMsstbprptColumn(descriptor.getField());
if (StrUtil.isBlank(column)) {
continue;
}
orders.add(column + ("desc".equalsIgnoreCase(descriptor.getDir()) ? " DESC" : " ASC"));
}
}
return orders.isEmpty() ? "" : " ORDER BY " + String.join(", ", orders);
}
private String buildVmsstbprptFilterCondition(DataSourceRequest.FilterDescriptor filter,
Map<String, Object> paramMap,
int[] indexHolder) {
@ -4200,6 +4457,10 @@ public class EngEqDataServiceImpl implements EngEqDataService {
return "tm".equalsIgnoreCase(field);
}
private boolean isBaseMsstbprptDateField(String field) {
return "tm".equalsIgnoreCase(field) || "dtinTm".equalsIgnoreCase(field);
}
private boolean isEqDayDateField(String field) {
return "dt".equalsIgnoreCase(field) || "tm".equalsIgnoreCase(field);
}
@ -4783,6 +5044,36 @@ public class EngEqDataServiceImpl implements EngEqDataService {
};
}
private String mapBaseMsstbprptColumn(String field) {
if (StrUtil.isBlank(field)) {
return null;
}
return switch (field) {
case "stcd" -> "t.stcd";
case "stnm" -> "t.stnm";
case "sttp", "sttpCode" -> "t.sttpCode";
case "sttpName" -> "t.sttpName";
case "rstcd" -> "t.rstcd";
case "rstcdName" -> "t.rstcdName";
case "baseId" -> "t.baseId";
case "baseName" -> "t.baseName";
case "hbrvcd" -> "t.hbrvcd";
case "hbrvcdName" -> "t.hbrvcdName";
case "stlc" -> "t.stlc";
case "lgtd" -> "t.lgtd";
case "lttd" -> "t.lttd";
case "elev" -> "t.elev";
case "bldsttCode" -> "t.bldsttCode";
case "bldsttCodeName" -> "t.bldsttCodeName";
case "dtin" -> "t.dtin";
case "dtinName" -> "t.dtinName";
case "dtinTm" -> "t.dtinTm";
case "tm" -> "t.tm";
case "orderIndex" -> "NVL(t.orderIndex, 999999)";
default -> null;
};
}
private String mapWbsbColumn(String field) {
if (StrUtil.isBlank(field)) {
return null;