feat: 电站统计查询

This commit is contained in:
tangwei 2026-06-03 09:33:55 +08:00
parent b44a4b932f
commit d2432c77e9
4 changed files with 365 additions and 0 deletions

View File

@ -3,6 +3,7 @@ package com.yfd.platform.qgc_eng.eq.controller;
import com.yfd.platform.common.DataSourceLoadOptionsBase; import com.yfd.platform.common.DataSourceLoadOptionsBase;
import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.common.DataSourceRequest;
import com.yfd.platform.config.ResponseResult; import com.yfd.platform.config.ResponseResult;
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqVmsstbprptVo;
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqRateCountVo; import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqRateCountVo;
import com.yfd.platform.qgc_eng.eq.service.EngEqDataService; import com.yfd.platform.qgc_eng.eq.service.EngEqDataService;
import com.yfd.platform.qgc_eng.eq.entity.vo.QgcQecStaticVo; import com.yfd.platform.qgc_eng.eq.entity.vo.QgcQecStaticVo;
@ -49,6 +50,12 @@ public class EngEqDataController {
return ResponseResult.successData(engEqDataService.getWbsbList(dataSourceRequest)); return ResponseResult.successData(engEqDataService.getWbsbList(dataSourceRequest));
} }
@PostMapping("/vmsstbprpt/GetKendoList")
@Operation(summary = "电站统计查询")
public ResponseResult getVmsstbprptList(@RequestBody DataSourceRequest dataSourceRequest) {
return ResponseResult.successData(engEqDataService.getVmsstbprptList(dataSourceRequest));
}
@PostMapping("/evnmAutoMonitor/GetKendoListCust") @PostMapping("/evnmAutoMonitor/GetKendoListCust")
@Operation(summary = "生态流量监测数量统计") @Operation(summary = "生态流量监测数量统计")
public ResponseResult getEvnmAutoMonitorList(@RequestBody DataSourceRequest dataSourceRequest) { public ResponseResult getEvnmAutoMonitorList(@RequestBody DataSourceRequest dataSourceRequest) {

View File

@ -0,0 +1,70 @@
package com.yfd.platform.qgc_eng.eq.entity.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
@Data
@Schema(description = "电站统计查询")
public class EngEqVmsstbprptVo implements Serializable {
private static final long serialVersionUID = 1L;
@Schema(description = "站类编码")
private String sttpCode;
@Schema(description = "站类名称")
private String sttpName;
@Schema(description = "电站编码")
private String stcd;
@Schema(description = "电站名称")
private String stnm;
@Schema(description = "工程名称")
private String ennm;
@Schema(description = "基地编码")
private String baseId;
@Schema(description = "基地名称")
private String baseName;
@Schema(description = "基地流域编码")
private String hbrvcd;
@Schema(description = "基地流域名称")
private String hbrvcdName;
@Schema(description = "流域编码")
private String rvcd;
@Schema(description = "流域名称")
private String rvcdName;
@Schema(description = "工程规模")
private Integer prsc;
@Schema(description = "建设状态")
private String bldstt;
@Schema(description = "建设状态分类")
private Integer bldsttCcode;
@Schema(description = "环保数据接入状态")
private Integer dtinEnv;
@Schema(description = "基地排序")
private Integer baseStepSort;
@Schema(description = "流域排序")
private Integer rvcdStepSort;
@Schema(description = "电站排序")
private Integer rstcdStepSort;
@Schema(description = "站点排序")
private Integer siteStepSort;
}

View File

@ -3,6 +3,7 @@ package com.yfd.platform.qgc_eng.eq.service;
import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.common.DataSourceRequest;
import com.yfd.platform.common.DataSourceResult; import com.yfd.platform.common.DataSourceResult;
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqRateCountVo; import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqRateCountVo;
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqVmsstbprptVo;
import com.yfd.platform.qgc_eng.eq.entity.vo.QgcQecStaticVo; import com.yfd.platform.qgc_eng.eq.entity.vo.QgcQecStaticVo;
import com.yfd.platform.qgc_eng.eq.entity.vo.SdEqMonitorCountVo; import com.yfd.platform.qgc_eng.eq.entity.vo.SdEqMonitorCountVo;
import com.yfd.platform.qgc_eng.eq.entity.vo.WbsbVo; import com.yfd.platform.qgc_eng.eq.entity.vo.WbsbVo;
@ -15,6 +16,8 @@ public interface EngEqDataService {
DataSourceResult<WbsbVo> getWbsbList(DataSourceRequest dataSourceRequest); DataSourceResult<WbsbVo> getWbsbList(DataSourceRequest dataSourceRequest);
DataSourceResult<EngEqVmsstbprptVo> getVmsstbprptList(DataSourceRequest dataSourceRequest);
DataSourceResult<SdEqMonitorCountVo> getEvnmAutoMonitorList(DataSourceRequest dataSourceRequest); DataSourceResult<SdEqMonitorCountVo> getEvnmAutoMonitorList(DataSourceRequest dataSourceRequest);
DataSourceResult<EngEqRateCountVo> qecRateCount(DataSourceRequest dataSourceRequest); DataSourceResult<EngEqRateCountVo> qecRateCount(DataSourceRequest dataSourceRequest);

View File

@ -14,6 +14,7 @@ import com.yfd.platform.common.enums.ShowEnum;
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqDataVo; import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqDataVo;
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqRateCountVo; import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqRateCountVo;
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqStaticIntervalVo; import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqStaticIntervalVo;
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqVmsstbprptVo;
import com.yfd.platform.qgc_eng.eq.entity.vo.QgcQecStaticVo; import com.yfd.platform.qgc_eng.eq.entity.vo.QgcQecStaticVo;
import com.yfd.platform.qgc_eng.eq.entity.vo.QgcQecVo; import com.yfd.platform.qgc_eng.eq.entity.vo.QgcQecVo;
import com.yfd.platform.qgc_eng.eq.entity.vo.SdEqMonitorCountVo; import com.yfd.platform.qgc_eng.eq.entity.vo.SdEqMonitorCountVo;
@ -123,6 +124,15 @@ public class EngEqDataServiceImpl implements EngEqDataService {
return queryWbsbGroupList(dataSourceRequest, loadOptions); return queryWbsbGroupList(dataSourceRequest, loadOptions);
} }
@Override
public DataSourceResult<EngEqVmsstbprptVo> getVmsstbprptList(DataSourceRequest dataSourceRequest) {
DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest();
if (CollUtil.isEmpty(dataSourceRequest == null ? null : dataSourceRequest.getGroup())) {
return queryVmsstbprptDetailList(dataSourceRequest, loadOptions);
}
return queryVmsstbprptGroupList(dataSourceRequest, loadOptions);
}
@Override @Override
public DataSourceResult<SdEqMonitorCountVo> getEvnmAutoMonitorList(DataSourceRequest dataSourceRequest) { public DataSourceResult<SdEqMonitorCountVo> getEvnmAutoMonitorList(DataSourceRequest dataSourceRequest) {
List<String> showIds = findFilterValues(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), "showIds"); List<String> showIds = findFilterValues(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), "showIds");
@ -253,6 +263,101 @@ public class EngEqDataServiceImpl implements EngEqDataService {
return result; return result;
} }
private DataSourceResult<EngEqVmsstbprptVo> queryVmsstbprptDetailList(DataSourceRequest dataSourceRequest,
DataSourceLoadOptionsBase loadOptions) {
StringBuilder sql = new StringBuilder();
sql.append("SELECT ")
.append(buildVmsstbprptDetailSelectSql(dataSourceRequest == null ? null : dataSourceRequest.getSelect()))
.append(" FROM (")
.append(buildVmsstbprptViewSql())
.append(") t WHERE 1 = 1 ");
Map<String, Object> paramMap = new HashMap<>();
String filterSql = buildVmsstbprptFilterCondition(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), paramMap, new int[]{0});
if (StrUtil.isNotBlank(filterSql)) {
sql.append(" AND ").append(filterSql).append(" ");
}
sql.append(buildVmsstbprptDetailOrderBySql(dataSourceRequest == null ? null : dataSourceRequest.getSort()));
Page<?> page = loadOptions == null ? null : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake());
List<EngEqVmsstbprptVo> list = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, EngEqVmsstbprptVo.class);
DataSourceResult<EngEqVmsstbprptVo> result = new DataSourceResult<>();
result.setData(list);
result.setTotal(page != null ? page.getTotal() : list.size());
result.setAggregates(new HashMap<>());
return result;
}
private DataSourceResult<EngEqVmsstbprptVo> queryVmsstbprptGroupList(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 = mapVmsstbprptColumn(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 = mapVmsstbprptColumn(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(buildVmsstbprptViewSql())
.append(") t WHERE 1 = 1 ");
Map<String, Object> paramMap = new HashMap<>();
String filterSql = buildVmsstbprptFilterCondition(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 = mapVmsstbprptColumn(descriptor.getField());
if (StrUtil.isNotBlank(column)) {
groupByColumns.add(column);
}
}
if (!groupByColumns.isEmpty()) {
sql.append(" GROUP BY ").append(String.join(", ", groupByColumns)).append(" ");
}
sql.append(buildVmsstbprptGroupOrderBySql(groups));
List<Map<String, Object>> rows = microservicDynamicSQLMapper.pageAllList(null, sql.toString(), paramMap);
DataSourceResult<EngEqVmsstbprptVo> result = new DataSourceResult<>();
if (Boolean.TRUE.equals(dataSourceRequest.getGroupResultFlat())) {
result.setData((List<EngEqVmsstbprptVo>) (List<?>) new GroupHelper().faltGroup(rows, Arrays.asList(groupInfos)));
} else {
result.setData((List<EngEqVmsstbprptVo>) (List<?>) new GroupHelper().group(rows, Arrays.asList(groupInfos)));
}
result.setTotal((long) rows.size());
result.setAggregates(new HashMap<>());
return result;
}
private DataSourceResult<WbsbVo> queryWbsbDetailList(DataSourceRequest dataSourceRequest, private DataSourceResult<WbsbVo> queryWbsbDetailList(DataSourceRequest dataSourceRequest,
DataSourceLoadOptionsBase loadOptions) { DataSourceLoadOptionsBase loadOptions) {
StringBuilder sql = new StringBuilder(); StringBuilder sql = new StringBuilder();
@ -278,6 +383,158 @@ public class EngEqDataServiceImpl implements EngEqDataService {
return result; return result;
} }
private String buildVmsstbprptViewSql() {
return "SELECT " +
"'ENG' AS sttpCode, " +
"'电站' AS sttpName, " +
"eng.STCD AS stcd, " +
"eng.ENNM AS stnm, " +
"eng.ENNM AS ennm, " +
"eng.BASE_ID AS baseId, " +
"hb.BASENAME AS baseName, " +
"eng.HBRVCD AS hbrvcd, " +
"hbrv.HBRVNM AS hbrvcdName, " +
"eng.RVCD AS rvcd, " +
"rv.RVNM AS rvcdName, " +
"eng.PRSC AS prsc, " +
"eng.BLDSTT AS bldstt, " +
"eng.BLDSTT_CODE AS bldsttCcode, " +
"eng.DTIN_ENV AS dtinEnv, " +
"NVL(hb.ORDER_INDEX, 999999) AS baseStepSort, " +
"NVL(along.ORDER_INDEX, 999999) AS rvcdStepSort, " +
"NVL(eng.ORDER_INDEX, 999999) AS rstcdStepSort, " +
"NVL(eng.ORDER_INDEX, 999999) AS siteStepSort " +
"FROM SD_ENGINFO_B_H eng " +
"LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = eng.BASE_ID AND NVL(hb.IS_DELETED, 0) = 0 " +
"LEFT JOIN SD_HBRV_DIC hbrv ON hbrv.HBRVCD = eng.HBRVCD AND hbrv.BASEID = eng.BASE_ID " +
" AND NVL(hbrv.IS_DELETED, 0) = 0 AND NVL(hbrv.ENABLED, 1) = 1 " +
"LEFT JOIN SD_RVCD_DIC rv ON rv.RVCD = eng.RVCD " +
"LEFT JOIN MS_ALONG_B along ON along.RVCD = eng.HBRVCD AND along.CODE = 'common' AND NVL(along.IS_DELETED, 0) = 0 " +
"WHERE NVL(eng.IS_DELETED, 0) = 0";
}
private String buildVmsstbprptDetailSelectSql(List<String> selectFields) {
Map<String, String> columns = vmsstbprptFieldColumns();
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> vmsstbprptFieldColumns() {
Map<String, String> columns = new LinkedHashMap<>();
columns.put("sttpCode", "t.sttpCode AS sttpCode");
columns.put("sttpName", "t.sttpName AS sttpName");
columns.put("stcd", "t.stcd AS stcd");
columns.put("stnm", "t.stnm AS stnm");
columns.put("ennm", "t.ennm AS ennm");
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("rvcd", "t.rvcd AS rvcd");
columns.put("rvcdName", "t.rvcdName AS rvcdName");
columns.put("prsc", "t.prsc AS prsc");
columns.put("bldstt", "t.bldstt AS bldstt");
columns.put("bldsttCcode", "t.bldsttCcode AS bldsttCcode");
columns.put("dtinEnv", "t.dtinEnv AS dtinEnv");
columns.put("baseStepSort", "t.baseStepSort AS baseStepSort");
columns.put("rvcdStepSort", "t.rvcdStepSort AS rvcdStepSort");
columns.put("rstcdStepSort", "t.rstcdStepSort AS rstcdStepSort");
columns.put("siteStepSort", "t.siteStepSort AS siteStepSort");
return columns;
}
private String buildVmsstbprptFilterCondition(DataSourceRequest.FilterDescriptor filter,
Map<String, Object> paramMap,
int[] indexHolder) {
if (filter == null) {
return "";
}
if (StrUtil.isNotBlank(filter.getField())) {
return buildVmsstbprptLeafCondition(filter, paramMap, indexHolder);
}
if (CollUtil.isEmpty(filter.getFilters())) {
return "";
}
List<String> conditions = new ArrayList<>();
for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) {
String childSql = buildVmsstbprptFilterCondition(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 buildVmsstbprptLeafCondition(DataSourceRequest.FilterDescriptor filter,
Map<String, Object> paramMap,
int[] indexHolder) {
String column = mapVmsstbprptColumn(filter.getField());
if (StrUtil.isBlank(column)) {
return "";
}
return buildGenericCondition(column, filter, paramMap, indexHolder, false);
}
private String buildVmsstbprptDetailOrderBySql(List<DataSourceRequest.SortDescriptor> sortList) {
if (CollUtil.isEmpty(sortList)) {
return " ORDER BY NVL(t.baseStepSort, 999999) ASC, NVL(t.rvcdStepSort, 999999) ASC, " +
"NVL(t.rstcdStepSort, 999999) ASC, NVL(t.siteStepSort, 999999) ASC, t.stcd ASC";
}
List<String> orders = new ArrayList<>();
for (DataSourceRequest.SortDescriptor sort : sortList) {
if (sort == null || StrUtil.isBlank(sort.getField())) {
continue;
}
String column = mapVmsstbprptColumn(sort.getField());
if (StrUtil.isBlank(column)) {
continue;
}
String dir = "desc".equalsIgnoreCase(sort.getDir()) || "des".equalsIgnoreCase(sort.getDir()) ? "DESC" : "ASC";
orders.add(column + " " + dir);
}
if (orders.isEmpty()) {
return " ORDER BY NVL(t.baseStepSort, 999999) ASC, NVL(t.rvcdStepSort, 999999) ASC, " +
"NVL(t.rstcdStepSort, 999999) ASC, NVL(t.siteStepSort, 999999) ASC, t.stcd ASC";
}
return " ORDER BY " + String.join(", ", orders);
}
private String buildVmsstbprptGroupOrderBySql(List<DataSourceRequest.GroupDescriptor> groups) {
if (CollUtil.isEmpty(groups)) {
return "";
}
List<String> orders = new ArrayList<>();
for (DataSourceRequest.GroupDescriptor descriptor : groups) {
if (descriptor == null || StrUtil.isBlank(descriptor.getField())) {
continue;
}
String column = mapVmsstbprptColumn(descriptor.getField());
if (StrUtil.isBlank(column)) {
continue;
}
String dir = "desc".equalsIgnoreCase(descriptor.getDir()) || "des".equalsIgnoreCase(descriptor.getDir()) ? "DESC" : "ASC";
orders.add(column + " " + dir);
}
return orders.isEmpty() ? "" : " ORDER BY " + String.join(", ", orders);
}
private DataSourceResult<WbsbVo> queryWbsbGroupList(DataSourceRequest dataSourceRequest, private DataSourceResult<WbsbVo> queryWbsbGroupList(DataSourceRequest dataSourceRequest,
DataSourceLoadOptionsBase loadOptions) { DataSourceLoadOptionsBase loadOptions) {
List<DataSourceRequest.GroupDescriptor> groups = dataSourceRequest.getGroup(); List<DataSourceRequest.GroupDescriptor> groups = dataSourceRequest.getGroup();
@ -1401,6 +1658,34 @@ public class EngEqDataServiceImpl implements EngEqDataService {
}; };
} }
private String mapVmsstbprptColumn(String field) {
if (StrUtil.isBlank(field)) {
return null;
}
return switch (field) {
case "sttpCode" -> "t.sttpCode";
case "sttpName" -> "t.sttpName";
case "stcd" -> "t.stcd";
case "stnm" -> "t.stnm";
case "ennm" -> "t.ennm";
case "baseId" -> "t.baseId";
case "baseName" -> "t.baseName";
case "hbrvcd" -> "t.hbrvcd";
case "hbrvcdName" -> "t.hbrvcdName";
case "rvcd" -> "t.rvcd";
case "rvcdName" -> "t.rvcdName";
case "prsc" -> "t.prsc";
case "bldstt" -> "t.bldstt";
case "bldsttCcode" -> "t.bldsttCcode";
case "dtinEnv" -> "t.dtinEnv";
case "baseStepSort" -> "NVL(t.baseStepSort, 999999)";
case "rvcdStepSort" -> "NVL(t.rvcdStepSort, 999999)";
case "rstcdStepSort" -> "NVL(t.rstcdStepSort, 999999)";
case "siteStepSort" -> "NVL(t.siteStepSort, 999999)";
default -> null;
};
}
private String mapWbsbColumn(String field) { private String mapWbsbColumn(String field) {
if (StrUtil.isBlank(field)) { if (StrUtil.isBlank(field)) {
return null; return null;