feat: 生态流量周旬月季年数据

This commit is contained in:
tangwei 2026-06-15 15:54:04 +08:00
parent 47fa1688d6
commit 5632e00f0b
4 changed files with 516 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.DataSourceRequest;
import com.yfd.platform.common.DataSourceResult; import com.yfd.platform.common.DataSourceResult;
import com.yfd.platform.config.ResponseResult; import com.yfd.platform.config.ResponseResult;
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.EngEqIntervalVo;
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqMsstbprptVo; import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqMsstbprptVo;
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqRuleVo; import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqRuleVo;
@ -42,6 +43,13 @@ public class EngEqDataController {
return ResponseResult.successData(engEqDataService.getDayKendoListCust(dataSourceRequest)); return ResponseResult.successData(engEqDataService.getDayKendoListCust(dataSourceRequest));
} }
@PostMapping("/data/drtp/GetKendoListCust")
@Operation(summary = "生态流量周旬月季年数据")
public ResponseResult getDrtpKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
DataSourceResult<EngEqDrtpDataVo> result = engEqDataService.getDrtpKendoListCust(dataSourceRequest);
return ResponseResult.successData(result);
}
@PostMapping("/interval/GetKendoListCust") @PostMapping("/interval/GetKendoListCust")
@Operation(summary = "生态流量达标情况") @Operation(summary = "生态流量达标情况")
public ResponseResult getIntervalKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) { public ResponseResult getIntervalKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {

View File

@ -0,0 +1,126 @@
package com.yfd.platform.qgc_eng.eq.entity.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
@Data
@Schema(description = "生态流量周旬月季年数据")
public class EngEqDrtpDataVo {
@Schema(description = "主键")
private String id;
@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 String addvcdName;
@Schema(description = "入库流量")
private BigDecimal qi;
@Schema(description = "出库流量")
private BigDecimal qo;
@Schema(description = "坝上水位")
private BigDecimal rz;
@Schema(description = "坝下水位")
private BigDecimal dz;
@Schema(description = "生态流量限值(环保部)")
private BigDecimal qecLimit;
@Schema(description = "生态流量")
private BigDecimal qec;
@Schema(description = "生态流量限值(水利部)")
private BigDecimal mwrLimit;
@Schema(description = "生态流量限值(多年平均)")
private BigDecimal avqLimit;
@Schema(description = "生态流量系数(环保部)")
private BigDecimal qecC;
@Schema(description = "生态流量系数(水利部)")
private BigDecimal mwrC;
@Schema(description = "生态流量系数(多年平均)")
private BigDecimal avqC;
@Schema(description = "生态流量是否达标")
private Integer sfdb;
@Schema(description = "生态流量是否达标中文")
private String sfdbName;
@Schema(description = "生态流量是否达标(环保部)")
private Integer qecSfdb;
@Schema(description = "生态流量是否达标(水利部)")
private Integer mwrSfdb;
@Schema(description = "生态流量是否达标(水利部)中文")
private String mwrSfdbName;
@Schema(description = "生态流量是否达标(多年平均)")
private Integer avqSfdb;
@Schema(description = "生态流量是否达标(多年平均)中文")
private String avqSfdbName;
@Schema(description = "数据时间")
private Date tm;
@Schema(description = "")
private Integer month;
@Schema(description = "")
private Integer year;
@Schema(description = "维度类型")
private String drtp;
@Schema(description = "时段")
private Integer dr;
@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.EngEqDayDataVo; 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; import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqDayIntervalVo;
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqHourIntervalVo; import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqHourIntervalVo;
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqIntervalVo; import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqIntervalVo;
@ -21,6 +22,8 @@ public interface EngEqDataService {
DataSourceResult<EngEqDayDataVo> getDayKendoListCust(DataSourceRequest dataSourceRequest); DataSourceResult<EngEqDayDataVo> getDayKendoListCust(DataSourceRequest dataSourceRequest);
DataSourceResult<EngEqDrtpDataVo> getDrtpKendoListCust(DataSourceRequest dataSourceRequest);
DataSourceResult<EngEqIntervalVo> getIntervalKendoListCust(DataSourceRequest dataSourceRequest); DataSourceResult<EngEqIntervalVo> getIntervalKendoListCust(DataSourceRequest dataSourceRequest);
DataSourceResult<EngEqMsstbprptVo> getMsstbprptList(DataSourceRequest dataSourceRequest); DataSourceResult<EngEqMsstbprptVo> getMsstbprptList(DataSourceRequest dataSourceRequest);

View File

@ -13,6 +13,7 @@ import com.yfd.platform.common.enums.QecIntervalEnum;
import com.yfd.platform.common.enums.ShowEnum; 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.EngEqDayDataVo; 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; import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqDayIntervalVo;
import com.yfd.platform.qgc_eng.eq.entity.vo.EngFidVo; import com.yfd.platform.qgc_eng.eq.entity.vo.EngFidVo;
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqHourIntervalVo; import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqHourIntervalVo;
@ -70,6 +71,15 @@ public class EngEqDataServiceImpl implements EngEqDataService {
return queryDayGroupList(dataSourceRequest, loadOptions); return queryDayGroupList(dataSourceRequest, loadOptions);
} }
@Override
public DataSourceResult<EngEqDrtpDataVo> getDrtpKendoListCust(DataSourceRequest dataSourceRequest) {
DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest();
if (CollUtil.isEmpty(dataSourceRequest == null ? null : dataSourceRequest.getGroup())) {
return queryDrtpDetailList(dataSourceRequest, loadOptions);
}
return queryDrtpGroupList(dataSourceRequest, loadOptions);
}
@Override @Override
public DataSourceResult<EngEqIntervalVo> getIntervalKendoListCust(DataSourceRequest dataSourceRequest) { public DataSourceResult<EngEqIntervalVo> getIntervalKendoListCust(DataSourceRequest dataSourceRequest) {
DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest(); DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest();
@ -1590,6 +1600,101 @@ public class EngEqDataServiceImpl implements EngEqDataService {
return result; return result;
} }
private DataSourceResult<EngEqDrtpDataVo> queryDrtpDetailList(DataSourceRequest dataSourceRequest,
DataSourceLoadOptionsBase loadOptions) {
StringBuilder sql = new StringBuilder();
sql.append("SELECT ")
.append(buildDrtpDetailSelectSql(dataSourceRequest == null ? null : dataSourceRequest.getSelect()))
.append(" FROM (")
.append(buildDrtpViewSql())
.append(") t WHERE 1 = 1 ");
Map<String, Object> paramMap = new HashMap<>();
String filterSql = buildDrtpFilterCondition(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), paramMap, new int[]{0});
if (StrUtil.isNotBlank(filterSql)) {
sql.append(" AND ").append(filterSql).append(" ");
}
sql.append(buildDrtpDetailOrderBySql(dataSourceRequest == null ? null : dataSourceRequest.getSort()));
Page<?> page = loadOptions == null ? null : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake());
List<EngEqDrtpDataVo> list = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, EngEqDrtpDataVo.class);
DataSourceResult<EngEqDrtpDataVo> result = new DataSourceResult<>();
result.setData(list);
result.setTotal(page != null ? page.getTotal() : list.size());
result.setAggregates(new HashMap<>());
return result;
}
private DataSourceResult<EngEqDrtpDataVo> queryDrtpGroupList(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 = mapDrtpColumn(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 = mapDrtpColumn(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(buildDrtpViewSql())
.append(") t WHERE 1 = 1 ");
Map<String, Object> paramMap = new HashMap<>();
String filterSql = buildDrtpFilterCondition(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 = mapDrtpColumn(descriptor.getField());
if (StrUtil.isNotBlank(column)) {
groupByColumns.add(column);
}
}
if (!groupByColumns.isEmpty()) {
sql.append(" GROUP BY ").append(String.join(", ", groupByColumns)).append(" ");
}
sql.append(buildDrtpGroupOrderBySql(groups));
List<Map<String, Object>> rows = microservicDynamicSQLMapper.pageAllList(null, sql.toString(), paramMap);
DataSourceResult<EngEqDrtpDataVo> result = new DataSourceResult<>();
if (Boolean.TRUE.equals(dataSourceRequest.getGroupResultFlat())) {
result.setData((List<EngEqDrtpDataVo>) (List<?>) new GroupHelper().faltGroup(rows, Arrays.asList(groupInfos)));
} else {
result.setData((List<EngEqDrtpDataVo>) (List<?>) new GroupHelper().group(rows, Arrays.asList(groupInfos)));
}
result.setTotal((long) rows.size());
result.setAggregates(new HashMap<>());
return result;
}
private DataSourceResult<EngEqIntervalVo> queryIntervalDetailList(DataSourceRequest dataSourceRequest, private DataSourceResult<EngEqIntervalVo> queryIntervalDetailList(DataSourceRequest dataSourceRequest,
DataSourceLoadOptionsBase loadOptions) { DataSourceLoadOptionsBase loadOptions) {
Map<String, Object> paramMap = new HashMap<>(); Map<String, Object> paramMap = new HashMap<>();
@ -2683,6 +2788,75 @@ public class EngEqDataServiceImpl implements EngEqDataService {
"WHERE NVL(day.IS_DELETED, 0) = 0"; "WHERE NVL(day.IS_DELETED, 0) = 0";
} }
private String buildDrtpViewSql() {
return "SELECT " +
"drtp.ID AS id, " +
"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, " +
"addv.ADDVNM AS addvcdName, " +
"runDrtp.QI AS qi, " +
"runDrtp.QO AS qo, " +
"runDrtp.RZ AS rz, " +
"runDrtp.DZ AS dz, " +
"drtp.QEC_LIMIT AS qecLimit, " +
"drtp.QEC AS qec, " +
"drtp.MWR_LIMIT AS mwrLimit, " +
"drtp.AVQ_LIMIT AS avqLimit, " +
"drtp.QEC_C AS qecC, " +
"drtp.MWR_C AS mwrC, " +
"drtp.AVQ_C AS avqC, " +
"drtp.SFDB AS sfdb, " +
"CASE NVL(drtp.SFDB, -1) WHEN 0 THEN '不达标' WHEN 1 THEN '达标' WHEN 2 THEN '无生态流量数据' WHEN 3 THEN '无生态流量限值要求' ELSE NULL END AS sfdbName, " +
"drtp.SFDB AS qecSfdb, " +
"drtp.MWR_SFDB AS mwrSfdb, " +
"CASE NVL(drtp.MWR_SFDB, -1) WHEN 0 THEN '不达标' WHEN 1 THEN '达标' WHEN 2 THEN '无生态流量数据' WHEN 3 THEN '无生态流量限值要求' ELSE NULL END AS mwrSfdbName, " +
"drtp.AVQ_SFDB AS avqSfdb, " +
"CASE NVL(drtp.AVQ_SFDB, -1) WHEN 0 THEN '不达标' WHEN 1 THEN '达标' WHEN 2 THEN '无生态流量数据' WHEN 3 THEN '无生态流量限值要求' ELSE NULL END AS avqSfdbName, " +
"drtp.TM AS tm, " +
"drtp.YEAR AS year, " +
"drtp.MONTH AS month, " +
"drtp.DRTP AS drtp, " +
"drtp.DR AS dr, " +
"NVL(hb.ORDER_INDEX, 999999) AS baseStepSort, " +
"NVL(along.ORDER_INDEX, 999999) AS rvcdStepSort, " +
"NVL(rstSort.SORT, 999999) AS rstcdStepSort, " +
"NVL(siteSort.SORT, 999999) AS siteStepSort " +
"FROM SD_QECDRTP_S drtp " +
"INNER JOIN SD_ENGINFO_B_H eng ON eng.STCD = drtp.STCD AND NVL(eng.IS_DELETED, 0) = 0 " +
"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 SD_ADDVCD_DIC addv ON addv.ADDVCD = eng.ADDVCD " +
"LEFT JOIN MS_ALONG_B along ON along.RVCD = eng.HBRVCD AND along.CODE = 'common' AND NVL(along.IS_DELETED, 0) = 0 " +
"LEFT JOIN ( " +
" SELECT det.SORT, cfg.RVCD, det.STCD " +
" FROM MS_ALONGDET_B det " +
" INNER JOIN MS_ALONG_B cfg ON det.ALONG_ID = cfg.ID " +
" WHERE NVL(det.IS_DELETED, 0) = 0 AND NVL(cfg.IS_DELETED, 0) = 0 AND cfg.CODE = 'common' " +
") rstSort ON rstSort.RVCD = eng.HBRVCD AND rstSort.STCD = eng.STCD " +
"LEFT JOIN ( " +
" SELECT det.SORT, cfg.RVCD, det.STCD " +
" FROM MS_ALONGDET_B det " +
" INNER JOIN MS_ALONG_B cfg ON det.ALONG_ID = cfg.ID " +
" WHERE NVL(det.IS_DELETED, 0) = 0 AND NVL(cfg.IS_DELETED, 0) = 0 AND cfg.CODE = 'common' " +
") siteSort ON siteSort.RVCD = eng.HBRVCD AND siteSort.STCD = eng.STCD " +
"LEFT JOIN SD_HYDROPWDRTP_S runDrtp ON drtp.STCD = runDrtp.STCD " +
" AND drtp.DRTP = runDrtp.DRTP " +
" AND NVL(drtp.DR, -1) = NVL(runDrtp.DR, -1) " +
" AND NVL(drtp.MONTH, -1) = NVL(runDrtp.MONTH, -1) " +
" AND drtp.YEAR = runDrtp.YEAR " +
" AND NVL(runDrtp.IS_DELETED, 0) = 0 " +
"WHERE NVL(drtp.IS_DELETED, 0) = 0";
}
private String buildDayRunDaySql() { private String buildDayRunDaySql() {
return "SELECT run.STCD, TRUNC(run.TM) AS DT, " + return "SELECT run.STCD, TRUNC(run.TM) AS DT, " +
"AVG(run.QI) AS QI, AVG(run.QO) AS QO, AVG(run.RZ) AS RZ, AVG(run.DZ) AS DZ " + "AVG(run.QI) AS QI, AVG(run.QO) AS QO, AVG(run.RZ) AS RZ, AVG(run.DZ) AS DZ " +
@ -2729,6 +2903,25 @@ public class EngEqDataServiceImpl implements EngEqDataService {
return String.join(", ", selected); return String.join(", ", selected);
} }
private String buildDrtpDetailSelectSql(List<String> selectFields) {
Map<String, String> columns = drtpFieldColumns();
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> detailFieldColumns() { private Map<String, String> detailFieldColumns() {
Map<String, String> columns = new LinkedHashMap<>(); Map<String, String> columns = new LinkedHashMap<>();
columns.put("id", "sqr.ID AS id"); columns.put("id", "sqr.ID AS id");
@ -2815,6 +3008,49 @@ public class EngEqDataServiceImpl implements EngEqDataService {
return columns; return columns;
} }
private Map<String, String> drtpFieldColumns() {
Map<String, String> columns = new LinkedHashMap<>();
columns.put("id", "t.id AS id");
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("addvcdName", "t.addvcdName AS addvcdName");
columns.put("qi", "t.qi AS qi");
columns.put("qo", "t.qo AS qo");
columns.put("rz", "t.rz AS rz");
columns.put("dz", "t.dz AS dz");
columns.put("qecLimit", "t.qecLimit AS qecLimit");
columns.put("qec", "t.qec AS qec");
columns.put("mwrLimit", "t.mwrLimit AS mwrLimit");
columns.put("avqLimit", "t.avqLimit AS avqLimit");
columns.put("qecC", "t.qecC AS qecC");
columns.put("mwrC", "t.mwrC AS mwrC");
columns.put("avqC", "t.avqC AS avqC");
columns.put("sfdb", "t.sfdb AS sfdb");
columns.put("sfdbName", "t.sfdbName AS sfdbName");
columns.put("qecSfdb", "t.qecSfdb AS qecSfdb");
columns.put("mwrSfdb", "t.mwrSfdb AS mwrSfdb");
columns.put("mwrSfdbName", "t.mwrSfdbName AS mwrSfdbName");
columns.put("avqSfdb", "t.avqSfdb AS avqSfdb");
columns.put("avqSfdbName", "t.avqSfdbName AS avqSfdbName");
columns.put("tm", "t.tm AS tm");
columns.put("year", "t.year AS year");
columns.put("month", "t.month AS month");
columns.put("drtp", "t.drtp AS drtp");
columns.put("dr", "t.dr AS dr");
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 buildDetailOrderBySql(List<DataSourceRequest.SortDescriptor> sortList) { private String buildDetailOrderBySql(List<DataSourceRequest.SortDescriptor> sortList) {
if (CollUtil.isEmpty(sortList)) { if (CollUtil.isEmpty(sortList)) {
return " ORDER BY baseStepSort ASC, rvcdStepSort ASC, rstcdStepSort ASC, siteStepSort ASC, tm DESC"; return " ORDER BY baseStepSort ASC, rvcdStepSort ASC, rstcdStepSort ASC, siteStepSort ASC, tm DESC";
@ -3596,6 +3832,10 @@ public class EngEqDataServiceImpl implements EngEqDataService {
return "dt".equalsIgnoreCase(field) || "tm".equalsIgnoreCase(field); return "dt".equalsIgnoreCase(field) || "tm".equalsIgnoreCase(field);
} }
private boolean isEqDrtpDateField(String field) {
return "tm".equalsIgnoreCase(field);
}
private String buildEqValueExpr(String paramKey, boolean dateField, Object value) { private String buildEqValueExpr(String paramKey, boolean dateField, Object value) {
if (!dateField || value == null) { if (!dateField || value == null) {
return "#{map." + paramKey + "}"; return "#{map." + paramKey + "}";
@ -3684,6 +3924,83 @@ public class EngEqDataServiceImpl implements EngEqDataService {
return orders.isEmpty() ? "" : " ORDER BY " + String.join(", ", orders); return orders.isEmpty() ? "" : " ORDER BY " + String.join(", ", orders);
} }
private String buildDrtpFilterCondition(DataSourceRequest.FilterDescriptor filter,
Map<String, Object> paramMap,
int[] indexHolder) {
if (filter == null) {
return "";
}
if (StrUtil.isNotBlank(filter.getField())) {
return buildDrtpLeafCondition(filter, paramMap, indexHolder);
}
if (CollUtil.isEmpty(filter.getFilters())) {
return "";
}
List<String> conditions = new ArrayList<>();
for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) {
String childSql = buildDrtpFilterCondition(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 buildDrtpLeafCondition(DataSourceRequest.FilterDescriptor filter,
Map<String, Object> paramMap,
int[] indexHolder) {
String column = mapDrtpColumn(filter.getField());
if (StrUtil.isBlank(column)) {
return "";
}
return buildGenericCondition(column, filter, paramMap, indexHolder, isEqDrtpDateField(filter.getField()));
}
private String buildDrtpDetailOrderBySql(List<DataSourceRequest.SortDescriptor> sortList) {
if (CollUtil.isEmpty(sortList)) {
return " ORDER BY baseStepSort ASC, rvcdStepSort ASC, rstcdStepSort ASC, siteStepSort ASC, year DESC, month DESC, drtp ASC, dr ASC";
}
List<String> orders = new ArrayList<>();
for (DataSourceRequest.SortDescriptor sort : sortList) {
if (sort == null || StrUtil.isBlank(sort.getField())) {
continue;
}
String column = mapDrtpOrderColumn(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 baseStepSort ASC, rvcdStepSort ASC, rstcdStepSort ASC, siteStepSort ASC, year DESC, month DESC, drtp ASC, dr ASC";
}
return " ORDER BY " + String.join(", ", orders);
}
private String buildDrtpGroupOrderBySql(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 = mapDrtpColumn(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);
}
@ -4247,4 +4564,66 @@ public class EngEqDataServiceImpl implements EngEqDataService {
default -> null; default -> null;
}; };
} }
private String mapDrtpColumn(String field) {
if (StrUtil.isBlank(field)) {
return null;
}
return switch (field) {
case "id" -> "t.id";
case "stcd" -> "t.stcd";
case "stnm", "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 "addvcdName" -> "t.addvcdName";
case "qi" -> "t.qi";
case "qo" -> "t.qo";
case "rz" -> "t.rz";
case "dz" -> "t.dz";
case "qecLimit" -> "t.qecLimit";
case "qec" -> "t.qec";
case "mwrLimit" -> "t.mwrLimit";
case "avqLimit" -> "t.avqLimit";
case "qecC" -> "t.qecC";
case "mwrC" -> "t.mwrC";
case "avqC" -> "t.avqC";
case "sfdb" -> "t.sfdb";
case "sfdbName" -> "t.sfdbName";
case "qecSfdb" -> "t.qecSfdb";
case "mwrSfdb" -> "t.mwrSfdb";
case "mwrSfdbName" -> "t.mwrSfdbName";
case "avqSfdb" -> "t.avqSfdb";
case "avqSfdbName" -> "t.avqSfdbName";
case "tm" -> "t.tm";
case "year" -> "t.year";
case "month" -> "t.month";
case "drtp" -> "t.drtp";
case "dr" -> "t.dr";
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 mapDrtpOrderColumn(String field) {
if (StrUtil.isBlank(field)) {
return null;
}
return switch (field) {
case "id", "baseId", "hbrvcd", "rvcd", "qecC", "mwrC", "avqC",
"sfdbName", "qecSfdb", "mwrSfdb", "mwrSfdbName", "avqSfdb",
"avqSfdbName", "baseStepSort", "rvcdStepSort", "rstcdStepSort",
"siteStepSort", "tm", "year", "month", "drtp", "dr", "stcd",
"stnm", "ennm", "qi", "qo", "qec", "sfdb", "rz", "dz",
"qecLimit", "mwrLimit", "avqLimit", "baseName", "rvcdName",
"hbrvcdName", "addvcdName" -> field;
default -> null;
};
}
} }