diff --git a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/controller/EngEqDataController.java b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/controller/EngEqDataController.java index 644a77a7..eb74aa9a 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/controller/EngEqDataController.java +++ b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/controller/EngEqDataController.java @@ -36,6 +36,12 @@ public class EngEqDataController { 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") @Operation(summary = "生态流量达标情况") public ResponseResult getIntervalKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) { diff --git a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/EngEqDayDataVo.java b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/EngEqDayDataVo.java new file mode 100644 index 00000000..df557c6f --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/EngEqDayDataVo.java @@ -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; +} diff --git a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/EngEqDataService.java b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/EngEqDataService.java index 03d06e3a..009a42dc 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/EngEqDataService.java +++ b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/EngEqDataService.java @@ -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.EngEqDayDataVo; 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.EngEqIntervalVo; @@ -18,6 +19,8 @@ public interface EngEqDataService { DataSourceResult getKendoListCust(DataSourceRequest dataSourceRequest); + DataSourceResult getDayKendoListCust(DataSourceRequest dataSourceRequest); + DataSourceResult getIntervalKendoListCust(DataSourceRequest dataSourceRequest); DataSourceResult getMsstbprptList(DataSourceRequest dataSourceRequest); diff --git a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/impl/EngEqDataServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/impl/EngEqDataServiceImpl.java index 4a5f4b68..8dac6130 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/impl/EngEqDataServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/impl/EngEqDataServiceImpl.java @@ -12,6 +12,7 @@ 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.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.EngFidVo; import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqHourIntervalVo; @@ -60,6 +61,15 @@ public class EngEqDataServiceImpl implements EngEqDataService { return queryGroupList(dataSourceRequest, loadOptions); } + @Override + public DataSourceResult 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 public DataSourceResult getIntervalKendoListCust(DataSourceRequest dataSourceRequest) { DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest(); @@ -1485,6 +1495,101 @@ public class EngEqDataServiceImpl implements EngEqDataService { return result; } + private DataSourceResult 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 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 list = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, EngEqDayDataVo.class); + DataSourceResult result = new DataSourceResult<>(); + result.setData(list); + result.setTotal(page != null ? page.getTotal() : list.size()); + result.setAggregates(new HashMap<>()); + return result; + } + + private DataSourceResult queryDayGroupList(DataSourceRequest dataSourceRequest, + DataSourceLoadOptionsBase loadOptions) { + List groups = dataSourceRequest.getGroup(); + GroupingInfo[] groupInfos = loadOptions == null ? new GroupingInfo[0] : loadOptions.getGroup(); + List 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 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 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> rows = microservicDynamicSQLMapper.pageAllList(null, sql.toString(), paramMap); + DataSourceResult result = new DataSourceResult<>(); + if (Boolean.TRUE.equals(dataSourceRequest.getGroupResultFlat())) { + result.setData((List) (List) new GroupHelper().faltGroup(rows, Arrays.asList(groupInfos))); + } else { + result.setData((List) (List) new GroupHelper().group(rows, Arrays.asList(groupInfos))); + } + result.setTotal((long) rows.size()); + result.setAggregates(new HashMap<>()); + return result; + } + private DataSourceResult queryIntervalDetailList(DataSourceRequest dataSourceRequest, DataSourceLoadOptionsBase loadOptions) { Map 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 "; } + 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 selectFields) { Map columns = detailFieldColumns(); List selected = new ArrayList<>(); @@ -2532,6 +2710,25 @@ public class EngEqDataServiceImpl implements EngEqDataService { return String.join(", ", selected); } + private String buildDayDetailSelectSql(List selectFields) { + Map columns = dayFieldColumns(); + List 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 detailFieldColumns() { Map columns = new LinkedHashMap<>(); columns.put("id", "sqr.ID AS id"); @@ -2576,6 +2773,48 @@ public class EngEqDataServiceImpl implements EngEqDataService { return columns; } + private Map dayFieldColumns() { + Map 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 sortList) { if (CollUtil.isEmpty(sortList)) { 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); } + private boolean isEqDayDateField(String field) { + return "dt".equalsIgnoreCase(field) || "tm".equalsIgnoreCase(field); + } + private String buildEqValueExpr(String paramKey, boolean dateField, Object value) { if (!dateField || value == null) { return "#{map." + paramKey + "}"; @@ -3364,6 +3607,83 @@ public class EngEqDataServiceImpl implements EngEqDataService { return "TO_DATE(#{map." + paramKey + "}, 'YYYY-MM-DD HH24:MI:SS')"; } + private String buildDayFilterCondition(DataSourceRequest.FilterDescriptor filter, + Map paramMap, + int[] indexHolder) { + if (filter == null) { + return ""; + } + if (StrUtil.isNotBlank(filter.getField())) { + return buildDayLeafCondition(filter, paramMap, indexHolder); + } + if (CollUtil.isEmpty(filter.getFilters())) { + return ""; + } + List 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 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 sortList) { + if (CollUtil.isEmpty(sortList)) { + return " ORDER BY baseStepSort ASC, rvcdStepSort ASC, rstcdStepSort ASC, siteStepSort ASC, dt DESC"; + } + List 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 groups) { + if (CollUtil.isEmpty(groups)) { + return ""; + } + List 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) { if (StrUtil.isBlank(field)) { return null; @@ -3837,4 +4202,18 @@ public class EngEqDataServiceImpl implements EngEqDataService { 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; + }; + } } diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fp/entity/vo/FpVmsstbprptVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/fp/entity/vo/FpVmsstbprptVo.java index 4ad9471d..174a4d1e 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/fp/entity/vo/FpVmsstbprptVo.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fp/entity/vo/FpVmsstbprptVo.java @@ -226,6 +226,9 @@ public class FpVmsstbprptVo implements Serializable { @Schema(description = "数据来源") private String vlsr; + @Schema(description = "LOGO") + private String logo; + @Schema(description = "数据来源时间") private Date vlsrTm; diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fp/service/impl/FpBuildServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/fp/service/impl/FpBuildServiceImpl.java index 7ae27947..5cedcef4 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/fp/service/impl/FpBuildServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/fp/service/impl/FpBuildServiceImpl.java @@ -98,6 +98,7 @@ public class FpBuildServiceImpl implements FpBuildService { StringBuilder sql = new StringBuilder(); sql.append("SELECT ") .append("fp.STCD AS stcd, ") + .append("fp.LOGO AS logo, ") .append("fp.STNM AS stnm, ") .append("fp.STTP AS sttpCode, ") .append("sttp.STTP_NAME AS sttpName, ") @@ -313,6 +314,7 @@ public class FpBuildServiceImpl implements FpBuildService { columnMap.put("sttpName", "sttp.STTP_NAME"); columnMap.put("sttpFullPath", "sttp.FULL_PATH"); columnMap.put("rstcd", "fp.RSTCD"); + columnMap.put("logo", "fp.LOGO"); columnMap.put("ennm", "eng.ENNM"); columnMap.put("baseId", "eng.BASE_ID"); columnMap.put("baseName", "hb.BASENAME");