feat: 首页-环保设施运行状况

This commit is contained in:
tangwei 2026-06-26 15:00:39 +08:00
parent 4ab11f3b94
commit 4d3dec4b00
4 changed files with 575 additions and 0 deletions

View File

@ -38,4 +38,10 @@ public class SdEngMonitorController {
public ResponseResult getEiaapprovalKendoList(@RequestBody DataSourceRequest dataSourceRequest) {
return ResponseResult.successData(engInfoBHService.getEiaapprovalKendoList(dataSourceRequest));
}
@PostMapping("/operat/GetKendoListCust")
@Operation(summary = "首页-环保设施运行状况")
public ResponseResult getOperatKendoList(@RequestBody DataSourceRequest dataSourceRequest) {
return ResponseResult.successData(engInfoBHService.getOperatKendoList(dataSourceRequest));
}
}

View File

@ -0,0 +1,32 @@
package com.yfd.platform.qgc_base.domain.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
@Data
@Schema(description = "环保设施运行状况")
public class EngOperatVo implements Serializable {
private static final long serialVersionUID = 1L;
private String repCode;
private String sttpCode;
private String pcode;
private String pname;
private String stcd;
private String ennm;
private String stnm;
private String addvcdName;
private String rvcdName;
private String sttpName;
private String baseId;
private Integer dtin;
private Integer runState;
private Integer stdState;
private Integer runSstate;
private Integer bldsttCcode;
private Integer yr;
private Integer count;
}

View File

@ -8,6 +8,7 @@ import com.yfd.platform.qgc_base.domain.SdEngInfoBH;
import com.yfd.platform.qgc_base.domain.SdEngInfoBHRequest;
import com.yfd.platform.qgc_base.domain.vo.EngBaseInfoVo;
import com.yfd.platform.qgc_base.domain.vo.EngEiaapprovalVo;
import com.yfd.platform.qgc_base.domain.vo.EngOperatVo;
import com.yfd.platform.qgc_base.domain.vo.EngStInfoResultVo;
import com.yfd.platform.qgc_base.domain.vo.EngVmsstbprptVo;
@ -81,4 +82,6 @@ public interface ISdEngInfoBHService extends IService<SdEngInfoBH> {
DataSourceResult<EngEiaapprovalVo> getEiaapprovalKendoList(DataSourceRequest dataSourceRequest);
DataSourceResult<EngVmsstbprptVo> getVmsstbprptKendoList(DataSourceRequest dataSourceRequest);
DataSourceResult<EngOperatVo> getOperatKendoList(DataSourceRequest dataSourceRequest);
}

View File

@ -26,6 +26,7 @@ import com.yfd.platform.qgc_base.domain.SdEngInfoBH;
import com.yfd.platform.qgc_base.domain.SdEngInfoBHRequest;
import com.yfd.platform.qgc_base.domain.vo.EngBaseInfoVo;
import com.yfd.platform.qgc_base.domain.vo.EngEiaapprovalVo;
import com.yfd.platform.qgc_base.domain.vo.EngOperatVo;
import com.yfd.platform.qgc_base.domain.vo.EngStBaseInfoVo;
import com.yfd.platform.qgc_base.domain.vo.EngStInfoResultVo;
import com.yfd.platform.qgc_base.domain.vo.EngVmsstbprptVo;
@ -691,6 +692,132 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl<SdEngInfoBHMapper, SdEng
return result;
}
@Override
public DataSourceResult<EngOperatVo> getOperatKendoList(DataSourceRequest dataSourceRequest) {
DataSourceResult<EngOperatVo> result = new DataSourceResult<>();
result.setAggregates(new HashMap<>());
if (dataSourceRequest == null) {
result.setData(new ArrayList<>());
result.setTotal(0L);
return result;
}
DataSourceLoadOptionsBase loadOptions = dataSourceRequest.toDevRequest();
if (CollUtil.isEmpty(dataSourceRequest.getGroup())) {
return queryOperatSummaryList(dataSourceRequest, loadOptions);
}
return queryOperatGroupList(dataSourceRequest, loadOptions);
}
private DataSourceResult<EngOperatVo> queryOperatSummaryList(DataSourceRequest dataSourceRequest,
DataSourceLoadOptionsBase loadOptions) {
StringBuilder sql = new StringBuilder();
sql.append("SELECT ")
.append(buildOperatSummarySelectSql(dataSourceRequest.getSelect()))
.append(" FROM (")
.append(buildOperatCategorySql())
.append(") cat ")
.append("LEFT JOIN (SELECT * FROM (")
.append(buildOperatBaseViewSql())
.append(") t WHERE 1 = 1 ");
Map<String, Object> paramMap = new HashMap<>();
String filterSql = buildOperatBaseFilterCondition(dataSourceRequest.getFilter(), paramMap, new int[]{0});
if (StringUtils.hasText(filterSql)) {
sql.append(" AND ").append(filterSql);
}
sql.append(") src ON cat.repCode = src.repCode ")
.append("GROUP BY cat.repCode, cat.sttpName, cat.orderIndex ")
.append(buildOperatSummaryOrderBySql(dataSourceRequest.getSort()));
Page<?> page = loadOptions == null ? null
: QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake());
List<EngOperatVo> list = microservicDynamicSQLMapper.pageAllListWithResultType(
page, sql.toString(), paramMap, EngOperatVo.class);
DataSourceResult<EngOperatVo> result = new DataSourceResult<>();
result.setData(list);
result.setTotal(page == null ? list.size() : page.getTotal());
result.setAggregates(new HashMap<>());
return result;
}
private DataSourceResult<EngOperatVo> queryOperatGroupList(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 || !StringUtils.hasText(descriptor.getField())) {
continue;
}
String column = mapOperatGroupColumn(descriptor.getField());
if (!StringUtils.hasText(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 = mapOperatGroupColumn(aggregate.getField());
if (!StringUtils.hasText(aggregateColumn) || !StringUtils.hasText(aggregate.getAggregate())) {
continue;
}
String aggregateSql = buildAggregateSql(aggregate.getAggregate(), aggregateColumn, aggregate.getField());
if (StringUtils.hasText(aggregateSql)) {
selectItems.add(aggregateSql);
}
}
}
}
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(buildOperatStateViewSql())
.append(") t WHERE 1 = 1 ");
Map<String, Object> paramMap = new HashMap<>();
if (!containsOperatYearFilter(dataSourceRequest.getFilter())) {
sql.append(" AND t.yr = ").append(new Date().getYear() + 1900);
}
String filterSql = buildOperatGroupFilterCondition(dataSourceRequest.getFilter(), paramMap, new int[]{0});
if (StringUtils.hasText(filterSql)) {
sql.append(" AND ").append(filterSql);
}
List<String> groupByColumns = new ArrayList<>();
for (DataSourceRequest.GroupDescriptor descriptor : groups) {
if (descriptor == null || !StringUtils.hasText(descriptor.getField())) {
continue;
}
String column = mapOperatGroupColumn(descriptor.getField());
if (StringUtils.hasText(column)) {
groupByColumns.add(column);
}
}
if (!groupByColumns.isEmpty()) {
sql.append(" GROUP BY ").append(String.join(", ", groupByColumns));
}
sql.append(buildOperatGroupOrderBySql(groups));
List<Map<String, Object>> rows = microservicDynamicSQLMapper.pageAllList(null, sql.toString(), paramMap);
DataSourceResult<EngOperatVo> result = new DataSourceResult<>();
if (Boolean.TRUE.equals(dataSourceRequest.getGroupResultFlat())) {
result.setData((List<EngOperatVo>) (List<?>) new GroupHelper().faltGroup(rows, Arrays.asList(groupInfos)));
} else {
result.setData((List<EngOperatVo>) (List<?>) new GroupHelper().group(rows, Arrays.asList(groupInfos)));
}
result.setTotal(0L);
result.setAggregates(new HashMap<>());
return result;
}
@Override
public DataSourceResult<EngEiaapprovalVo> getEiaapprovalKendoList(DataSourceRequest dataSourceRequest) {
DataSourceResult<EngEiaapprovalVo> result = new DataSourceResult<>();
@ -953,6 +1080,7 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl<SdEngInfoBHMapper, SdEng
" WHEN '3' THEN '混合式' " +
" ELSE NULL END AS dvtpName, " +
"eng.DTIN AS dtin, " +
"eng.DTIN_ENV AS dtinEnv, " +
"CASE NVL(eng.DTIN, 0) " +
" WHEN 0 THEN '否' " +
" WHEN 1 THEN '是' " +
@ -1289,6 +1417,410 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl<SdEngInfoBHMapper, SdEng
return orderItems.isEmpty() ? "" : " ORDER BY " + String.join(", ", orderItems);
}
private String buildOperatCategorySql() {
return "SELECT STTP_CODE AS repCode, STTP_NAME AS sttpName, ORDER_INDEX AS orderIndex " +
"FROM SD_STTP_B WHERE NVL(IS_DELETED, 0) = 0 " +
"AND STTP_CODE IN ('FP', 'DW', 'VP', 'FB', 'VA', 'FH', 'EQ')";
}
private String buildOperatBaseViewSql() {
return buildOperatBaseSelectSql("vp.STCD", "vp.STNM", "vp.STTP", "vp.DTIN", "vp.BLDSTT_CODE",
"NVL(vp.BASE_ID, eng.BASE_ID)", "NVL(vp.HBRVCD, eng.HBRVCD)", "eng.RVCD", "eng.RVCD_NAME",
"eng.ADDVCD_NAME", "vp.RSTCD", "eng.ENNM", "SD_VP_B_H vp",
"LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = vp.RSTCD AND NVL(eng.IS_DELETED, 0) = 0",
"NVL(vp.IS_DELETED, 0) = 0") +
" UNION ALL " +
buildOperatBaseSelectSql("fb.STCD", "fb.STNM", "fb.STTP", "fb.DTIN", "fb.BLDSTT_CODE",
"NVL(fb.BASE_ID, eng.BASE_ID)", "NVL(fb.HBRVCD, eng.HBRVCD)", "eng.RVCD", "eng.RVCD_NAME",
"eng.ADDVCD_NAME", "fb.RSTCD", "eng.ENNM", "SD_FBRD_B_H fb",
"LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = fb.RSTCD AND NVL(eng.IS_DELETED, 0) = 0",
" 1=1 "
// "NVL(fb.IS_DELETED, 0) = 0"
) +
" UNION ALL " +
buildOperatBaseSelectSql("va.STCD", "va.STNM", "va.STTP", "va.DTIN", "va.BLDSTT_CODE",
"NVL(va.BASE_ID, eng.BASE_ID)", "NVL(va.HBRVCD, eng.HBRVCD)", "eng.RVCD", "eng.RVCD_NAME",
"eng.ADDVCD_NAME", "va.RSTCD", "eng.ENNM", "SD_VA_B_H va",
"LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = va.RSTCD AND NVL(eng.IS_DELETED, 0) = 0",
"NVL(va.IS_DELETED, 0) = 0") +
" UNION ALL " +
buildOperatBaseSelectSql("fh.STCD", "fh.STNM", "'FH'", "fh.DTIN", "NULL",
"NVL(fh.BASE_ID, eng.BASE_ID)", "NVL(fh.HBRVCD, eng.HBRVCD)", "NVL(fh.RVCD, eng.RVCD)",
"NVL(eng.RVCD_NAME, NULL)", "eng.ADDVCD_NAME", "fh.RSTCD", "eng.ENNM", "SD_FHBT_B_H fh",
"LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = fh.RSTCD AND NVL(eng.IS_DELETED, 0) = 0",
"NVL(fh.IS_DELETED, 0) = 0") +
" UNION ALL " +
buildOperatBaseSelectSql("dw.STCD", "dw.STNM", "dw.STTP", "dw.DTIN", "dw.BLDSTT_CODE",
"eng.BASE_ID", "eng.HBRVCD", "eng.RVCD", "eng.RVCD_NAME", "eng.ADDVCD_NAME", "dw.RSTCD",
"eng.ENNM", "SD_DFLTKW_B_H dw",
"LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = dw.RSTCD AND NVL(eng.IS_DELETED, 0) = 0",
"NVL(dw.IS_DELETED, 0) = 0") +
" UNION ALL " +
buildOperatBaseSelectSql("fp.STCD", "fp.STNM", "fp.STTP", "fp.DTIN", "fp.BLDSTT_CODE",
"eng.BASE_ID", "eng.HBRVCD", "eng.RVCD", "eng.RVCD_NAME", "eng.ADDVCD_NAME", "fp.RSTCD",
"eng.ENNM", "SD_FPSS_B_H fp",
"LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = fp.RSTCD AND NVL(eng.IS_DELETED, 0) = 0",
"1 = 1") +
" UNION ALL " +
buildOperatBaseSelectSql("eq.STCD", "eq.STNM", "eq.STTP", "eq.DTIN", "eq.BLDSTT_CODE",
"NVL(eq.BASE_ID, eng.BASE_ID)", "NVL(eq.HBRVCD, eng.HBRVCD)", "eng.RVCD", "eng.RVCD_NAME",
"eng.ADDVCD_NAME", "eq.RSTCD", "eng.ENNM", "SD_EQ_B_H eq",
"LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = eq.RSTCD AND NVL(eng.IS_DELETED, 0) = 0",
"NVL(eq.IS_DELETED, 0) = 0");
}
private String buildOperatBaseSelectSql(String stcdExpr,
String stnmExpr,
String sttpExpr,
String dtinExpr,
String bldsttExpr,
String baseIdExpr,
String hbrvcdExpr,
String rvcdExpr,
String rvcdNameExpr,
String addvcdNameExpr,
String rstcdExpr,
String ennmExpr,
String fromSql,
String joinSql,
String whereSql) {
return "SELECT " +
stcdExpr + " AS stcd, " +
stnmExpr + " AS stnm, " +
sttpExpr + " AS sttpCode, " +
"CASE WHEN INSTR(" + sttpExpr + ", '_') > 0 THEN SUBSTR(" + sttpExpr + ", 1, INSTR(" + sttpExpr + ", '_') - 1) ELSE " + sttpExpr + " END AS repCode, " +
dtinExpr + " AS dtin, " +
bldsttExpr + " AS bldsttCcode, " +
baseIdExpr + " AS baseId, " +
hbrvcdExpr + " AS hbrvcd, " +
rvcdExpr + " AS rvcd, " +
rvcdNameExpr + " AS rvcdName, " +
addvcdNameExpr + " AS addvcdName, " +
rstcdExpr + " AS rstcd, " +
ennmExpr + " AS ennm " +
"FROM " + fromSql + " " +
joinSql + " WHERE " + whereSql;
}
private String buildOperatStateViewSql() {
return "SELECT " +
"src.repCode AS repCode, " +
"src.sttpCode AS sttpCode, " +
"src.repCode AS pcode, " +
"parent.STTP_NAME AS pname, " +
"child.STTP_NAME AS sttpName, " +
"src.stcd AS stcd, " +
"src.ennm AS ennm, " +
"src.stnm AS stnm, " +
"src.addvcdName AS addvcdName, " +
"src.rvcdName AS rvcdName, " +
"src.baseId AS baseId, " +
"src.dtin AS dtin, " +
"src.bldsttCcode AS bldsttCcode, " +
"state.RUN_STATE AS runState, " +
"state.STD_STATE AS stdState, " +
"state.STD_SSTATE AS runSstate, " +
"state.YR AS yr " +
"FROM (" + buildOperatBaseViewSql() + ") src " +
"LEFT JOIN SD_STTP_B child ON child.STTP_CODE = src.sttpCode AND NVL(child.IS_DELETED, 0) = 0 " +
"LEFT JOIN SD_STTP_B parent ON parent.STTP_CODE = src.repCode AND NVL(parent.IS_DELETED, 0) = 0 " +
"INNER JOIN MS_STSTATE_T state ON state.STCD = src.stcd AND NVL(state.IS_DELETED, 0) = 0";
}
private String buildOperatSummarySelectSql(List<String> selectFields) {
Map<String, String> columnMap = new LinkedHashMap<>();
columnMap.put("repCode", "cat.repCode AS repCode");
columnMap.put("sttpName", "cat.sttpName AS sttpName");
columnMap.put("count", "COUNT(src.repCode) AS count");
List<String> items = new ArrayList<>();
if (CollUtil.isNotEmpty(selectFields)) {
for (String field : selectFields) {
String column = columnMap.get(field);
if (StringUtils.hasText(column)) {
items.add(column);
}
}
}
if (items.isEmpty()) {
items.addAll(columnMap.values());
}
return String.join(", ", items);
}
private String buildOperatSummaryOrderBySql(List<DataSourceRequest.SortDescriptor> sortList) {
if (CollUtil.isEmpty(sortList)) {
return " ORDER BY cat.orderIndex ASC NULLS LAST, cat.repCode ASC";
}
List<String> orderItems = new ArrayList<>();
for (DataSourceRequest.SortDescriptor sortDescriptor : sortList) {
if (sortDescriptor == null || !StringUtils.hasText(sortDescriptor.getField())) {
continue;
}
String column = mapOperatSummaryColumn(sortDescriptor.getField());
if (!StringUtils.hasText(column)) {
continue;
}
String dir = "desc".equalsIgnoreCase(sortDescriptor.getDir()) || "des".equalsIgnoreCase(sortDescriptor.getDir()) ? "DESC" : "ASC";
orderItems.add(column + " " + dir);
}
if (orderItems.isEmpty()) {
return " ORDER BY cat.orderIndex ASC NULLS LAST, cat.repCode ASC";
}
return " ORDER BY " + String.join(", ", orderItems);
}
private String buildOperatBaseFilterCondition(DataSourceRequest.FilterDescriptor filter,
Map<String, Object> paramMap,
int[] indexHolder) {
if (filter == null) {
return "";
}
if (StringUtils.hasText(filter.getField())) {
String column = mapOperatBaseColumn(filter.getField());
return buildOperatCondition(column, filter, paramMap, indexHolder, false, "operatBase");
}
if (CollUtil.isEmpty(filter.getFilters())) {
return "";
}
List<String> childConditions = new ArrayList<>();
for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) {
String childSql = buildOperatBaseFilterCondition(child, paramMap, indexHolder);
if (StringUtils.hasText(childSql)) {
childConditions.add("(" + childSql + ")");
}
}
if (childConditions.isEmpty()) {
return "";
}
String logic = "or".equalsIgnoreCase(filter.getLogic()) ? " OR " : " AND ";
return String.join(logic, childConditions);
}
private String buildOperatGroupFilterCondition(DataSourceRequest.FilterDescriptor filter,
Map<String, Object> paramMap,
int[] indexHolder) {
if (filter == null) {
return "";
}
if (StringUtils.hasText(filter.getField())) {
String field = filter.getField();
String column = mapOperatGroupColumn(field);
boolean dateField = false;
return buildOperatCondition(column, filter, paramMap, indexHolder, dateField, "operatGroup");
}
if (CollUtil.isEmpty(filter.getFilters())) {
return "";
}
List<String> childConditions = new ArrayList<>();
for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) {
String childSql = buildOperatGroupFilterCondition(child, paramMap, indexHolder);
if (StringUtils.hasText(childSql)) {
childConditions.add("(" + childSql + ")");
}
}
if (childConditions.isEmpty()) {
return "";
}
String logic = "or".equalsIgnoreCase(filter.getLogic()) ? " OR " : " AND ";
return String.join(logic, childConditions);
}
private String buildOperatCondition(String column,
DataSourceRequest.FilterDescriptor filter,
Map<String, Object> paramMap,
int[] indexHolder,
boolean dateField,
String keyPrefix) {
if (!StringUtils.hasText(column) || filter == null) {
return "";
}
String operator = filter.getOperator() == null ? "eq" : filter.getOperator().toLowerCase();
Object value = filter.getValue();
if ("isnull".equals(operator)) {
return column + " IS NULL";
}
if ("isnotnull".equals(operator)) {
return column + " IS NOT NULL";
}
if ("isempty".equals(operator)) {
return "(" + column + " IS NULL OR " + column + " = '')";
}
if ("isnotempty".equals(operator)) {
return "(" + column + " IS NOT NULL AND " + column + " <> '')";
}
if ("in".equals(operator) || "ni".equals(operator)) {
List<Object> values = normalizeFilterValues(value);
if (values.isEmpty()) {
return "";
}
List<String> placeholders = new ArrayList<>();
for (Object item : values) {
String key = keyPrefix + indexHolder[0]++;
paramMap.put(key, item);
placeholders.add("#{map." + key + "}");
}
return column + ("ni".equals(operator) ? " NOT IN (" : " IN (") + String.join(", ", placeholders) + ")";
}
if (value == null) {
return "";
}
String key = keyPrefix + indexHolder[0]++;
String expr = buildOperatValueExpr(key, dateField, value);
return switch (operator) {
case "eq" -> {
paramMap.put(key, value);
yield column + " = " + expr;
}
case "neq" -> {
paramMap.put(key, value);
yield column + " <> " + expr;
}
case "contains" -> {
paramMap.put(key, "%" + value + "%");
yield column + " LIKE #{map." + key + "}";
}
case "doesnotcontain" -> {
paramMap.put(key, "%" + value + "%");
yield column + " NOT LIKE #{map." + key + "}";
}
case "startswith" -> {
paramMap.put(key, value + "%");
yield column + " LIKE #{map." + key + "}";
}
case "endswith" -> {
paramMap.put(key, "%" + value);
yield column + " LIKE #{map." + key + "}";
}
case "gt" -> {
paramMap.put(key, value);
yield column + " > " + expr;
}
case "gte" -> {
paramMap.put(key, value);
yield column + " >= " + expr;
}
case "lt" -> {
paramMap.put(key, value);
yield column + " < " + expr;
}
case "lte" -> {
paramMap.put(key, value);
yield column + " <= " + expr;
}
default -> "";
};
}
private String buildOperatValueExpr(String paramKey, boolean dateField, Object value) {
if (!dateField || value == null) {
return "#{map." + paramKey + "}";
}
String text = String.valueOf(value).trim();
if (text.length() <= 10) {
return "TO_DATE(#{map." + paramKey + "}, 'YYYY-MM-DD')";
}
return "TO_DATE(#{map." + paramKey + "}, 'YYYY-MM-DD HH24:MI:SS')";
}
private String mapOperatSummaryColumn(String field) {
if (!StringUtils.hasText(field)) {
return null;
}
return switch (field) {
case "repCode" -> "cat.repCode";
case "sttpName" -> "cat.sttpName";
case "count" -> "COUNT(src.repCode)";
default -> null;
};
}
private String mapOperatBaseColumn(String field) {
if (!StringUtils.hasText(field)) {
return null;
}
return switch (field) {
case "repCode" -> "t.repCode";
case "sttpCode" -> "t.sttpCode";
case "stcd" -> "t.stcd";
case "stnm" -> "t.stnm";
case "rstcd" -> "t.rstcd";
case "ennm" -> "t.ennm";
case "baseId", "baseid" -> "t.baseId";
case "hbrvcd" -> "t.hbrvcd";
case "rvcdName" -> "t.rvcdName";
case "addvcdName" -> "t.addvcdName";
case "dtin" -> "t.dtin";
case "bldsttCcode" -> "t.bldsttCcode";
default -> null;
};
}
private String mapOperatGroupColumn(String field) {
if (!StringUtils.hasText(field)) {
return null;
}
return switch (field) {
case "repCode" -> "t.repCode";
case "sttpCode" -> "t.sttpCode";
case "pcode" -> "t.pcode";
case "pname" -> "t.pname";
case "sttpName" -> "t.sttpName";
case "stcd" -> "t.stcd";
case "ennm" -> "t.ennm";
case "stnm" -> "t.stnm";
case "addvcdName" -> "t.addvcdName";
case "rvcdName" -> "t.rvcdName";
case "baseId", "baseid" -> "t.baseId";
case "dtin" -> "t.dtin";
case "runState" -> "t.runState";
case "stdState" -> "t.stdState";
case "runSstate" -> "t.runSstate";
case "bldsttCcode" -> "t.bldsttCcode";
case "yr" -> "t.yr";
default -> null;
};
}
private String buildOperatGroupOrderBySql(List<DataSourceRequest.GroupDescriptor> groups) {
if (CollUtil.isEmpty(groups)) {
return "";
}
List<String> orderItems = new ArrayList<>();
for (DataSourceRequest.GroupDescriptor descriptor : groups) {
if (descriptor == null || !StringUtils.hasText(descriptor.getField())) {
continue;
}
String column = mapOperatGroupColumn(descriptor.getField());
if (!StringUtils.hasText(column)) {
continue;
}
String dir = "desc".equalsIgnoreCase(descriptor.getDir()) || "des".equalsIgnoreCase(descriptor.getDir()) ? "DESC" : "ASC";
orderItems.add(column + " " + dir);
}
if (orderItems.isEmpty()) {
return "";
}
return " ORDER BY " + String.join(", ", orderItems);
}
private boolean containsOperatYearFilter(DataSourceRequest.FilterDescriptor filter) {
if (filter == null) {
return false;
}
if ("yr".equalsIgnoreCase(filter.getField())) {
return true;
}
if (CollUtil.isEmpty(filter.getFilters())) {
return false;
}
for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) {
if (containsOperatYearFilter(child)) {
return true;
}
}
return false;
}
private String buildAggregateSql(String aggregate, String column, String field) {
String upperField = field == null ? "" : field.toUpperCase();
return switch (aggregate.toLowerCase()) {
@ -1307,10 +1839,12 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl<SdEngInfoBHMapper, SdEng
}
return switch (field) {
case "id" -> "t.id";
case "sttp" -> "t.sttp";
case "sttpCode" -> "t.sttpCode";
case "sttpName" -> "t.sttpName";
case "stcd" -> "t.stcd";
case "stnm", "ennm" -> "t.stnm";
case "dtinEnv" -> "t.dtinEnv";
case "baseId" -> "t.baseId";
case "baseName" -> "t.baseName";
case "hbrvcd" -> "t.hbrvcd";