Merge branch 'dev-tw'

This commit is contained in:
tangwei 2026-06-09 10:17:59 +08:00
commit 48bfe316d7
6 changed files with 516 additions and 0 deletions

View File

@ -36,6 +36,12 @@ public class EngEqDataController {
return ResponseResult.successData(engEqDataService.getKendoListCust(dataSourceRequest)); return ResponseResult.successData(engEqDataService.getKendoListCust(dataSourceRequest));
} }
@PostMapping("/data/day/GetKendoListCust")
@Operation(summary = "生态流量日数据")
public ResponseResult getDayKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
return ResponseResult.successData(engEqDataService.getDayKendoListCust(dataSourceRequest));
}
@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,123 @@
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 EngEqDayDataVo {
@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 dt;
@Schema(description = "环保部规则详情ID")
private String qecRuleDid;
@Schema(description = "水利部规则详情ID")
private String qecMwrruleDid;
@Schema(description = "去年同期生态流量")
private BigDecimal beforeQec;
@Schema(description = "基地排序")
private Integer baseStepSort;
@Schema(description = "流域排序")
private Integer rvcdStepSort;
@Schema(description = "电站排序")
private Integer rstcdStepSort;
@Schema(description = "站点排序")
private Integer siteStepSort;
}

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.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.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;
@ -18,6 +19,8 @@ public interface EngEqDataService {
DataSourceResult getKendoListCust(DataSourceRequest dataSourceRequest); DataSourceResult getKendoListCust(DataSourceRequest dataSourceRequest);
DataSourceResult<EngEqDayDataVo> getDayKendoListCust(DataSourceRequest dataSourceRequest);
DataSourceResult<EngEqIntervalVo> getIntervalKendoListCust(DataSourceRequest dataSourceRequest); DataSourceResult<EngEqIntervalVo> getIntervalKendoListCust(DataSourceRequest dataSourceRequest);
DataSourceResult<EngEqMsstbprptVo> getMsstbprptList(DataSourceRequest dataSourceRequest); DataSourceResult<EngEqMsstbprptVo> getMsstbprptList(DataSourceRequest dataSourceRequest);

View File

@ -12,6 +12,7 @@ import com.yfd.platform.common.MicroservicDynamicSQLMapper;
import com.yfd.platform.common.enums.QecIntervalEnum; 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.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;
@ -60,6 +61,15 @@ public class EngEqDataServiceImpl implements EngEqDataService {
return queryGroupList(dataSourceRequest, loadOptions); return queryGroupList(dataSourceRequest, loadOptions);
} }
@Override
public DataSourceResult<EngEqDayDataVo> getDayKendoListCust(DataSourceRequest dataSourceRequest) {
DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest();
if (CollUtil.isEmpty(dataSourceRequest == null ? null : dataSourceRequest.getGroup())) {
return queryDayDetailList(dataSourceRequest, loadOptions);
}
return queryDayGroupList(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();
@ -1485,6 +1495,101 @@ public class EngEqDataServiceImpl implements EngEqDataService {
return result; return result;
} }
private DataSourceResult<EngEqDayDataVo> queryDayDetailList(DataSourceRequest dataSourceRequest,
DataSourceLoadOptionsBase loadOptions) {
StringBuilder sql = new StringBuilder();
sql.append("SELECT ")
.append(buildDayDetailSelectSql(dataSourceRequest == null ? null : dataSourceRequest.getSelect()))
.append(" FROM (")
.append(buildDayViewSql())
.append(") t WHERE 1 = 1 ");
Map<String, Object> paramMap = new HashMap<>();
String filterSql = buildDayFilterCondition(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), paramMap, new int[]{0});
if (StrUtil.isNotBlank(filterSql)) {
sql.append(" AND ").append(filterSql).append(" ");
}
sql.append(buildDayDetailOrderBySql(dataSourceRequest == null ? null : dataSourceRequest.getSort()));
Page<?> page = loadOptions == null ? null : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake());
List<EngEqDayDataVo> list = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, EngEqDayDataVo.class);
DataSourceResult<EngEqDayDataVo> result = new DataSourceResult<>();
result.setData(list);
result.setTotal(page != null ? page.getTotal() : list.size());
result.setAggregates(new HashMap<>());
return result;
}
private DataSourceResult<EngEqDayDataVo> queryDayGroupList(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 = mapDayColumn(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 = mapDayColumn(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(buildDayViewSql())
.append(") t WHERE 1 = 1 ");
Map<String, Object> paramMap = new HashMap<>();
String filterSql = buildDayFilterCondition(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 = mapDayColumn(descriptor.getField());
if (StrUtil.isNotBlank(column)) {
groupByColumns.add(column);
}
}
if (!groupByColumns.isEmpty()) {
sql.append(" GROUP BY ").append(String.join(", ", groupByColumns)).append(" ");
}
sql.append(buildDayGroupOrderBySql(groups));
List<Map<String, Object>> rows = microservicDynamicSQLMapper.pageAllList(null, sql.toString(), paramMap);
DataSourceResult<EngEqDayDataVo> result = new DataSourceResult<>();
if (Boolean.TRUE.equals(dataSourceRequest.getGroupResultFlat())) {
result.setData((List<EngEqDayDataVo>) (List<?>) new GroupHelper().faltGroup(rows, Arrays.asList(groupInfos)));
} else {
result.setData((List<EngEqDayDataVo>) (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<>();
@ -2513,6 +2618,79 @@ public class EngEqDataServiceImpl implements EngEqDataService {
"LEFT JOIN SD_QEC_R bsqr ON bsqr.STCD = sqr.STCD AND ADD_MONTHS(bsqr.TM, 12) = sqr.TM AND NVL(bsqr.IS_DELETED, 0) = 0 "; "LEFT JOIN SD_QEC_R bsqr ON bsqr.STCD = sqr.STCD AND ADD_MONTHS(bsqr.TM, 12) = sqr.TM AND NVL(bsqr.IS_DELETED, 0) = 0 ";
} }
private String buildDayViewSql() {
return "SELECT " +
"day.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, " +
"runDay.QI AS qi, " +
"runDay.QO AS qo, " +
"runDay.RZ AS rz, " +
"runDay.DZ AS dz, " +
"day.QEC_LIMIT AS qecLimit, " +
"day.QEC AS qec, " +
"day.MWR_LIMIT AS mwrLimit, " +
"day.AVQ_LIMIT AS avqLimit, " +
"day.QEC_C AS qecC, " +
"day.MWR_C AS mwrC, " +
"day.AVQ_C AS avqC, " +
"day.SFDB AS sfdb, " +
"CASE NVL(day.SFDB, -1) WHEN 0 THEN '不达标' WHEN 1 THEN '达标' WHEN 2 THEN '无生态流量数据' WHEN 3 THEN '无生态流量限值要求' ELSE NULL END AS sfdbName, " +
"day.SFDB AS qecSfdb, " +
"day.MWR_SFDB AS mwrSfdb, " +
"CASE NVL(day.MWR_SFDB, -1) WHEN 0 THEN '不达标' WHEN 1 THEN '达标' WHEN 2 THEN '无生态流量数据' WHEN 3 THEN '无生态流量限值要求' ELSE NULL END AS mwrSfdbName, " +
"day.AVQ_SFDB AS avqSfdb, " +
"CASE NVL(day.AVQ_SFDB, -1) WHEN 0 THEN '不达标' WHEN 1 THEN '达标' WHEN 2 THEN '无生态流量数据' WHEN 3 THEN '无生态流量限值要求' ELSE NULL END AS avqSfdbName, " +
"day.DT AS dt, " +
"day.QEC_RULE_DID AS qecRuleDid, " +
"day.QEC_MWRRULE_DID AS qecMwrruleDid, " +
"beforeDay.QEC AS beforeQec, " +
"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_QECDAY_S day " +
"INNER JOIN SD_ENGINFO_B_H eng ON eng.STCD = day.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 (" + buildDayRunDaySql() + ") runDay ON runDay.STCD = day.STCD AND runDay.DT = day.DT " +
"LEFT JOIN SD_QECDAY_S beforeDay ON beforeDay.STCD = day.STCD " +
" AND ADD_MONTHS(beforeDay.DT, 12) = day.DT AND NVL(beforeDay.IS_DELETED, 0) = 0 " +
"WHERE NVL(day.IS_DELETED, 0) = 0";
}
private String buildDayRunDaySql() {
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 " +
"FROM SD_HYDROPW_R run " +
"WHERE NVL(run.IS_DELETED, 0) = 0 " +
"GROUP BY run.STCD, TRUNC(run.TM)";
}
private String buildDetailSelectSql(List<String> selectFields) { private String buildDetailSelectSql(List<String> selectFields) {
Map<String, String> columns = detailFieldColumns(); Map<String, String> columns = detailFieldColumns();
List<String> selected = new ArrayList<>(); List<String> selected = new ArrayList<>();
@ -2532,6 +2710,25 @@ public class EngEqDataServiceImpl implements EngEqDataService {
return String.join(", ", selected); return String.join(", ", selected);
} }
private String buildDayDetailSelectSql(List<String> selectFields) {
Map<String, String> columns = dayFieldColumns();
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");
@ -2576,6 +2773,48 @@ public class EngEqDataServiceImpl implements EngEqDataService {
return columns; return columns;
} }
private Map<String, String> dayFieldColumns() {
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("dt", "t.dt AS dt");
columns.put("qecRuleDid", "t.qecRuleDid AS qecRuleDid");
columns.put("qecMwrruleDid", "t.qecMwrruleDid AS qecMwrruleDid");
columns.put("beforeQec", "t.beforeQec AS beforeQec");
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";
@ -3353,6 +3592,10 @@ public class EngEqDataServiceImpl implements EngEqDataService {
return "tm".equalsIgnoreCase(field); return "tm".equalsIgnoreCase(field);
} }
private boolean isEqDayDateField(String field) {
return "dt".equalsIgnoreCase(field) || "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 + "}";
@ -3364,6 +3607,83 @@ public class EngEqDataServiceImpl implements EngEqDataService {
return "TO_DATE(#{map." + paramKey + "}, 'YYYY-MM-DD HH24:MI:SS')"; return "TO_DATE(#{map." + paramKey + "}, 'YYYY-MM-DD HH24:MI:SS')";
} }
private String buildDayFilterCondition(DataSourceRequest.FilterDescriptor filter,
Map<String, Object> paramMap,
int[] indexHolder) {
if (filter == null) {
return "";
}
if (StrUtil.isNotBlank(filter.getField())) {
return buildDayLeafCondition(filter, paramMap, indexHolder);
}
if (CollUtil.isEmpty(filter.getFilters())) {
return "";
}
List<String> conditions = new ArrayList<>();
for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) {
String childSql = buildDayFilterCondition(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 buildDayLeafCondition(DataSourceRequest.FilterDescriptor filter,
Map<String, Object> paramMap,
int[] indexHolder) {
String column = mapDayColumn(filter.getField());
if (StrUtil.isBlank(column)) {
return "";
}
return buildGenericCondition(column, filter, paramMap, indexHolder, isEqDayDateField(filter.getField()));
}
private String buildDayDetailOrderBySql(List<DataSourceRequest.SortDescriptor> sortList) {
if (CollUtil.isEmpty(sortList)) {
return " ORDER BY baseStepSort ASC, rvcdStepSort ASC, rstcdStepSort ASC, siteStepSort ASC, dt DESC";
}
List<String> orders = new ArrayList<>();
for (DataSourceRequest.SortDescriptor sort : sortList) {
if (sort == null || StrUtil.isBlank(sort.getField())) {
continue;
}
String column = mapDayOrderColumn(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, dt DESC";
}
return " ORDER BY " + String.join(", ", orders);
}
private String buildDayGroupOrderBySql(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 = mapDayColumn(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);
}
@ -3825,6 +4145,51 @@ public class EngEqDataServiceImpl implements EngEqDataService {
}; };
} }
private String mapDayColumn(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 "dt", "tm" -> "t.dt";
case "qecRuleDid" -> "t.qecRuleDid";
case "qecMwrruleDid" -> "t.qecMwrruleDid";
case "beforeQec" -> "t.beforeQec";
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 mapOrderColumn(String field) { private String mapOrderColumn(String field) {
if (StrUtil.isBlank(field)) { if (StrUtil.isBlank(field)) {
return null; return null;
@ -3837,4 +4202,18 @@ public class EngEqDataServiceImpl implements EngEqDataService {
default -> null; default -> null;
}; };
} }
private String mapDayOrderColumn(String field) {
if (StrUtil.isBlank(field)) {
return null;
}
return switch (field) {
case "baseStepSort", "rvcdStepSort", "rstcdStepSort", "siteStepSort",
"dt", "stcd", "stnm", "ennm", "qi", "qo", "qec", "sfdb",
"rz", "dz", "qecLimit", "mwrLimit", "avqLimit", "baseName",
"rvcdName", "hbrvcdName", "addvcdName", "beforeQec" -> field;
case "tm" -> "dt";
default -> null;
};
}
} }

View File

@ -226,6 +226,9 @@ public class FpVmsstbprptVo implements Serializable {
@Schema(description = "数据来源") @Schema(description = "数据来源")
private String vlsr; private String vlsr;
@Schema(description = "LOGO")
private String logo;
@Schema(description = "数据来源时间") @Schema(description = "数据来源时间")
private Date vlsrTm; private Date vlsrTm;

View File

@ -98,6 +98,7 @@ 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.LOGO AS logo, ")
.append("fp.STNM AS stnm, ") .append("fp.STNM AS stnm, ")
.append("fp.STTP AS sttpCode, ") .append("fp.STTP AS sttpCode, ")
.append("sttp.STTP_NAME AS sttpName, ") .append("sttp.STTP_NAME AS sttpName, ")
@ -313,6 +314,7 @@ public class FpBuildServiceImpl implements FpBuildService {
columnMap.put("sttpName", "sttp.STTP_NAME"); columnMap.put("sttpName", "sttp.STTP_NAME");
columnMap.put("sttpFullPath", "sttp.FULL_PATH"); columnMap.put("sttpFullPath", "sttp.FULL_PATH");
columnMap.put("rstcd", "fp.RSTCD"); columnMap.put("rstcd", "fp.RSTCD");
columnMap.put("logo", "fp.LOGO");
columnMap.put("ennm", "eng.ENNM"); columnMap.put("ennm", "eng.ENNM");
columnMap.put("baseId", "eng.BASE_ID"); columnMap.put("baseId", "eng.BASE_ID");
columnMap.put("baseName", "hb.BASENAME"); columnMap.put("baseName", "hb.BASENAME");