From 95b6e1f34124b36684a277bea9fb8a0d5c16644f Mon Sep 17 00:00:00 2001 From: tangwei Date: Mon, 1 Jun 2026 14:49:07 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=9F=A5=E8=AF=A2=E5=9F=BA=E5=9C=B0/?= =?UTF-8?q?=E5=9F=BA=E5=9C=B0=E6=B5=81=E5=9F=9F=E6=A0=91=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../eq/controller/EngEqDataController.java | 6 + .../platform/qgc_eng/eq/entity/vo/WbsbVo.java | 60 +++ .../qgc_eng/eq/service/EngEqDataService.java | 3 + .../eq/service/impl/EngEqDataServiceImpl.java | 374 ++++++++++++++++++ 4 files changed, 443 insertions(+) create mode 100644 backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/WbsbVo.java 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 2ff956d5..c4a3394b 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 @@ -41,4 +41,10 @@ public class EngEqDataController { QgcQecStaticVo result = engEqDataService.getQgcStaticData(dataSourceRequest, type); return result == null ? ResponseResult.success() : ResponseResult.successData(result); } + + @PostMapping("/wbsb/GetKendoList") + @Operation(summary = "查询基地/基地流域树数据") + public ResponseResult getWbsbList(@RequestBody DataSourceRequest dataSourceRequest) { + return ResponseResult.successData(engEqDataService.getWbsbList(dataSourceRequest)); + } } diff --git a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/WbsbVo.java b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/WbsbVo.java new file mode 100644 index 00000000..a3bd3895 --- /dev/null +++ b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/WbsbVo.java @@ -0,0 +1,60 @@ +package com.yfd.platform.qgc_eng.eq.entity.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +@Data +@Schema(description = "基地/基地流域树节点") +public class WbsbVo implements Serializable { + + private static final long serialVersionUID = 1L; + + private String id; + private String recordUser; + private Date recordTime; + private Date modifyTime; + private String displayRecordUser; + private String isolateType; + private String wbsType; + private String wbsCode; + private String wbsName; + private String wbsSname; + private String wbsNameEn; + private String wbsSnameEn; + private Integer enable; + private String description; + private String parentId; + private String parentCode; + private Integer treeLevel; + private Integer hasChildren; + private String objId; + private String topWbsType; + private String fullPath; + private Integer internal; + private BigDecimal lgtd; + private BigDecimal lttd; + private BigDecimal area; + private BigDecimal perimeter; + private String synopsis; + private String introduce; + private String logo; + private String inffile; + private Integer orderIndex; + private String filterContent; + private String departmentId; + private String systemId; + private String platformId; + private String reachWwqtg; + private BigDecimal maxElev; + private BigDecimal minElev; + private String datTp; + private String rvAg; + private Integer ifInnRv; + private String showControl; + private String stcd; + private String displayDepartment; +} 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 efa88546..ecb95877 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 @@ -3,10 +3,13 @@ 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.QgcQecStaticVo; +import com.yfd.platform.qgc_eng.eq.entity.vo.WbsbVo; public interface EngEqDataService { DataSourceResult getKendoListCust(DataSourceRequest dataSourceRequest); QgcQecStaticVo getQgcStaticData(DataSourceRequest dataSourceRequest, String type); + + DataSourceResult getWbsbList(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 bcc872ac..18636671 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 @@ -15,6 +15,7 @@ import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqDataVo; import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqStaticIntervalVo; import com.yfd.platform.qgc_eng.eq.entity.vo.QgcQecStaticVo; import com.yfd.platform.qgc_eng.eq.entity.vo.QgcQecVo; +import com.yfd.platform.qgc_eng.eq.entity.vo.WbsbVo; import com.yfd.platform.qgc_eng.eq.service.EngEqDataService; import com.yfd.platform.utils.QgcQueryWrapperUtil; import jakarta.annotation.Resource; @@ -108,6 +109,15 @@ public class EngEqDataServiceImpl implements EngEqDataService { .setList(list); } + @Override + public DataSourceResult getWbsbList(DataSourceRequest dataSourceRequest) { + DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest(); + if (CollUtil.isEmpty(dataSourceRequest == null ? null : dataSourceRequest.getGroup())) { + return queryWbsbDetailList(dataSourceRequest, loadOptions); + } + return queryWbsbGroupList(dataSourceRequest, loadOptions); + } + private DataSourceResult queryDetailList(DataSourceRequest dataSourceRequest, DataSourceLoadOptionsBase loadOptions) { StringBuilder sql = new StringBuilder(); @@ -134,6 +144,101 @@ public class EngEqDataServiceImpl implements EngEqDataService { return result; } + private DataSourceResult queryWbsbDetailList(DataSourceRequest dataSourceRequest, + DataSourceLoadOptionsBase loadOptions) { + StringBuilder sql = new StringBuilder(); + sql.append("SELECT ") + .append(buildWbsbDetailSelectSql(dataSourceRequest == null ? null : dataSourceRequest.getSelect())) + .append(" FROM (") + .append(buildWbsbViewSql()) + .append(") t WHERE 1 = 1 "); + + Map paramMap = new HashMap<>(); + String filterSql = buildWbsbFilterCondition(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), paramMap, new int[]{0}); + if (StrUtil.isNotBlank(filterSql)) { + sql.append(" AND ").append(filterSql).append(" "); + } + sql.append(buildWbsbDetailOrderBySql(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, WbsbVo.class); + DataSourceResult result = new DataSourceResult<>(); + result.setData(list); + result.setTotal(page != null ? page.getTotal() : list.size()); + result.setAggregates(new HashMap<>()); + return result; + } + + private DataSourceResult queryWbsbGroupList(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 = mapWbsbColumn(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 = mapWbsbColumn(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.WBSCODE AS WBSCODE"); + selectItems.add("COUNT(*) AS COUNT_WBSCODE"); + } + + StringBuilder sql = new StringBuilder(); + sql.append("SELECT ") + .append(String.join(", ", selectItems)) + .append(" FROM (") + .append(buildWbsbViewSql()) + .append(") t WHERE 1 = 1 "); + + Map paramMap = new HashMap<>(); + String filterSql = buildWbsbFilterCondition(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 = mapWbsbColumn(descriptor.getField()); + if (StrUtil.isNotBlank(column)) { + groupByColumns.add(column); + } + } + if (!groupByColumns.isEmpty()) { + sql.append(" GROUP BY ").append(String.join(", ", groupByColumns)).append(" "); + } + sql.append(buildWbsbGroupOrderBySql(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 List queryStaticIntervals(DataSourceRequest dataSourceRequest, String type) { StringBuilder sql = new StringBuilder(); Map paramMap = new HashMap<>(); @@ -459,6 +564,247 @@ public class EngEqDataServiceImpl implements EngEqDataService { "END"; } + private String buildWbsbViewSql() { + return "SELECT " + + "t.BASEID AS id, " + + "t.RECORD_USER AS recordUser, " + + "t.RECORD_TIME AS recordTime, " + + "t.MODIFY_TIME AS modifyTime, " + + "CAST(NULL AS VARCHAR2(36)) AS displayRecordUser, " + + "CAST(NULL AS VARCHAR2(36)) AS isolateType, " + + "'PSB' AS wbsType, " + + "t.BASEID AS wbsCode, " + + "t.BASENAME AS wbsName, " + + "t.SHORTNAME AS wbsSname, " + + "CAST(NULL AS VARCHAR2(255)) AS wbsNameEn, " + + "CAST(NULL AS VARCHAR2(255)) AS wbsSnameEn, " + + "t.ENABLED AS enable, " + + "t.RMK AS description, " + + "CASE WHEN t.PBASEID = '0' THEN NULL ELSE t.PBASEID END AS parentId, " + + "CASE WHEN t.PBASEID = '0' THEN NULL ELSE t.PBASEID END AS parentCode, " + + "t.GRD AS treeLevel, " + + "CASE WHEN EXISTS (SELECT 1 FROM SD_HYDROBASE c WHERE c.PBASEID = t.BASEID AND NVL(c.IS_DELETED, 0) = 0) THEN 1 ELSE 0 END AS hasChildren, " + + "CAST(NULL AS VARCHAR2(36)) AS objId, " + + "CAST(NULL AS VARCHAR2(20)) AS topWbsType, " + + "t.PATH AS fullPath, " + + "1 AS internal, " + + "CAST(NULL AS NUMBER(10,6)) AS lgtd, " + + "CAST(NULL AS NUMBER(10,6)) AS lttd, " + + "CAST(NULL AS NUMBER(18,6)) AS area, " + + "CAST(NULL AS NUMBER(18,6)) AS perimeter, " + + "CAST(NULL AS VARCHAR2(4000)) AS synopsis, " + + "t.DES AS introduce, " + + "CAST(NULL AS VARCHAR2(255)) AS logo, " + + "CAST(NULL AS VARCHAR2(255)) AS inffile, " + + "t.ORDER_INDEX AS orderIndex, " + + "CAST(NULL AS VARCHAR2(255)) AS filterContent, " + + "CAST(NULL AS VARCHAR2(36)) AS departmentId, " + + "CAST(NULL AS VARCHAR2(36)) AS systemId, " + + "CAST(NULL AS VARCHAR2(36)) AS platformId, " + + "CAST(NULL AS VARCHAR2(50)) AS reachWwqtg, " + + "CAST(NULL AS NUMBER(10,6)) AS maxElev, " + + "CAST(NULL AS NUMBER(10,6)) AS minElev, " + + "CAST(NULL AS VARCHAR2(50)) AS datTp, " + + "CAST(NULL AS VARCHAR2(50)) AS rvAg, " + + "CAST(NULL AS NUMBER(1,0)) AS ifInnRv, " + + "CAST(NULL AS VARCHAR2(2000)) AS showControl, " + + "CAST(NULL AS VARCHAR2(36)) AS stcd, " + + "CAST(NULL AS VARCHAR2(255)) AS displayDepartment " + + "FROM SD_HYDROBASE t WHERE NVL(t.IS_DELETED, 0) = 0 " + + "UNION ALL " + + "SELECT " + + "t.HBRVCD || '_' || t.BASEID AS id, " + + "t.RECORD_USER AS recordUser, " + + "t.RECORD_TIME AS recordTime, " + + "t.MODIFY_TIME AS modifyTime, " + + "CAST(NULL AS VARCHAR2(36)) AS displayRecordUser, " + + "CAST(NULL AS VARCHAR2(36)) AS isolateType, " + + "'PSB_RVCD' AS wbsType, " + + "t.HBRVCD AS wbsCode, " + + "t.HBRVNM AS wbsName, " + + "CAST(NULL AS VARCHAR2(255)) AS wbsSname, " + + "CAST(NULL AS VARCHAR2(255)) AS wbsNameEn, " + + "CAST(NULL AS VARCHAR2(255)) AS wbsSnameEn, " + + "t.ENABLED AS enable, " + + "t.REMARK AS description, " + + "CASE WHEN t.PHBRVCD IS NULL OR t.PHBRVCD = '0' THEN NULL ELSE t.PHBRVCD || '_' || t.BASEID END AS parentId, " + + "CASE WHEN t.PHBRVCD IS NULL OR t.PHBRVCD = '0' THEN NULL ELSE t.PHBRVCD END AS parentCode, " + + "t.GRD AS treeLevel, " + + "CASE WHEN EXISTS (SELECT 1 FROM SD_HBRV_DIC c WHERE c.PHBRVCD = t.HBRVCD AND c.BASEID = t.BASEID AND NVL(c.IS_DELETED, 0) = 0) THEN 1 ELSE 0 END AS hasChildren, " + + "t.BASEID AS objId, " + + "'PSB' AS topWbsType, " + + "t.PATH AS fullPath, " + + "1 AS internal, " + + "CAST(NULL AS NUMBER(10,6)) AS lgtd, " + + "CAST(NULL AS NUMBER(10,6)) AS lttd, " + + "CAST(NULL AS NUMBER(18,6)) AS area, " + + "CAST(NULL AS NUMBER(18,6)) AS perimeter, " + + "CAST(NULL AS VARCHAR2(4000)) AS synopsis, " + + "CAST(NULL AS VARCHAR2(4000)) AS introduce, " + + "CAST(NULL AS VARCHAR2(255)) AS logo, " + + "CAST(NULL AS VARCHAR2(255)) AS inffile, " + + "t.ORDER_INDEX AS orderIndex, " + + "CAST(NULL AS VARCHAR2(255)) AS filterContent, " + + "CAST(NULL AS VARCHAR2(36)) AS departmentId, " + + "CAST(NULL AS VARCHAR2(36)) AS systemId, " + + "CAST(NULL AS VARCHAR2(36)) AS platformId, " + + "CAST(NULL AS VARCHAR2(50)) AS reachWwqtg, " + + "CAST(NULL AS NUMBER(10,6)) AS maxElev, " + + "CAST(NULL AS NUMBER(10,6)) AS minElev, " + + "CAST(NULL AS VARCHAR2(50)) AS datTp, " + + "CAST(NULL AS VARCHAR2(50)) AS rvAg, " + + "CAST(NULL AS NUMBER(1,0)) AS ifInnRv, " + + "CAST(NULL AS VARCHAR2(2000)) AS showControl, " + + "CAST(NULL AS VARCHAR2(36)) AS stcd, " + + "CAST(NULL AS VARCHAR2(255)) AS displayDepartment " + + "FROM SD_HBRV_DIC t WHERE NVL(t.IS_DELETED, 0) = 0 AND t.ORDER_INDEX IS NOT NULL"; + } + + private String buildWbsbDetailSelectSql(List selectFields) { + Map columns = wbsbFieldColumns(); + 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 wbsbFieldColumns() { + Map columns = new LinkedHashMap<>(); + columns.put("id", "t.id AS id"); + columns.put("recordUser", "t.recordUser AS recordUser"); + columns.put("recordTime", "t.recordTime AS recordTime"); + columns.put("modifyTime", "t.modifyTime AS modifyTime"); + columns.put("displayRecordUser", "t.displayRecordUser AS displayRecordUser"); + columns.put("isolateType", "t.isolateType AS isolateType"); + columns.put("wbsType", "t.wbsType AS wbsType"); + columns.put("wbsCode", "t.wbsCode AS wbsCode"); + columns.put("wbsName", "t.wbsName AS wbsName"); + columns.put("wbsSname", "t.wbsSname AS wbsSname"); + columns.put("wbsNameEn", "t.wbsNameEn AS wbsNameEn"); + columns.put("wbsSnameEn", "t.wbsSnameEn AS wbsSnameEn"); + columns.put("enable", "t.enable AS enable"); + columns.put("description", "t.description AS description"); + columns.put("parentId", "t.parentId AS parentId"); + columns.put("parentCode", "t.parentCode AS parentCode"); + columns.put("treeLevel", "t.treeLevel AS treeLevel"); + columns.put("hasChildren", "t.hasChildren AS hasChildren"); + columns.put("objId", "t.objId AS objId"); + columns.put("topWbsType", "t.topWbsType AS topWbsType"); + columns.put("fullPath", "t.fullPath AS fullPath"); + columns.put("internal", "t.internal AS internal"); + columns.put("lgtd", "t.lgtd AS lgtd"); + columns.put("lttd", "t.lttd AS lttd"); + columns.put("area", "t.area AS area"); + columns.put("perimeter", "t.perimeter AS perimeter"); + columns.put("synopsis", "t.synopsis AS synopsis"); + columns.put("introduce", "t.introduce AS introduce"); + columns.put("logo", "t.logo AS logo"); + columns.put("inffile", "t.inffile AS inffile"); + columns.put("orderIndex", "t.orderIndex AS orderIndex"); + columns.put("filterContent", "t.filterContent AS filterContent"); + columns.put("departmentId", "t.departmentId AS departmentId"); + columns.put("systemId", "t.systemId AS systemId"); + columns.put("platformId", "t.platformId AS platformId"); + columns.put("reachWwqtg", "t.reachWwqtg AS reachWwqtg"); + columns.put("maxElev", "t.maxElev AS maxElev"); + columns.put("minElev", "t.minElev AS minElev"); + columns.put("datTp", "t.datTp AS datTp"); + columns.put("rvAg", "t.rvAg AS rvAg"); + columns.put("ifInnRv", "t.ifInnRv AS ifInnRv"); + columns.put("showControl", "t.showControl AS showControl"); + columns.put("stcd", "t.stcd AS stcd"); + columns.put("displayDepartment", "t.displayDepartment AS displayDepartment"); + return columns; + } + + private String buildWbsbFilterCondition(DataSourceRequest.FilterDescriptor filter, + Map paramMap, + int[] indexHolder) { + if (filter == null) { + return ""; + } + if (StrUtil.isNotBlank(filter.getField())) { + return buildWbsbLeafCondition(filter, paramMap, indexHolder); + } + if (CollUtil.isEmpty(filter.getFilters())) { + return ""; + } + List conditions = new ArrayList<>(); + for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) { + String childSql = buildWbsbFilterCondition(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 buildWbsbLeafCondition(DataSourceRequest.FilterDescriptor filter, + Map paramMap, + int[] indexHolder) { + String column = mapWbsbColumn(filter.getField()); + if (StrUtil.isBlank(column)) { + return ""; + } + return buildGenericCondition(column, filter, paramMap, indexHolder, false); + } + + private String buildWbsbDetailOrderBySql(List sortList) { + if (CollUtil.isEmpty(sortList)) { + return " ORDER BY NVL(t.orderIndex, 999999) ASC, t.wbsCode ASC"; + } + List orders = new ArrayList<>(); + for (DataSourceRequest.SortDescriptor sort : sortList) { + if (sort == null || StrUtil.isBlank(sort.getField())) { + continue; + } + String column = mapWbsbColumn(sort.getField()); + if (StrUtil.isBlank(column)) { + continue; + } + String dir = "desc".equalsIgnoreCase(sort.getDir()) || "des".equalsIgnoreCase(sort.getDir()) ? "DESC" : "ASC"; + orders.add(column + " " + dir); + } + if (orders.isEmpty()) { + return " ORDER BY NVL(t.orderIndex, 999999) ASC, t.wbsCode ASC"; + } + return " ORDER BY " + String.join(", ", orders); + } + + private String buildWbsbGroupOrderBySql(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 = mapWbsbColumn(descriptor.getField()); + if (StrUtil.isBlank(column)) { + continue; + } + String dir = "desc".equalsIgnoreCase(descriptor.getDir()) || "des".equalsIgnoreCase(descriptor.getDir()) ? "DESC" : "ASC"; + orders.add(column + " " + dir); + } + return orders.isEmpty() ? "" : " ORDER BY " + String.join(", ", orders); + } + private String buildFilterCondition(DataSourceRequest.FilterDescriptor filter, Map paramMap, int[] indexHolder) { @@ -747,6 +1093,34 @@ public class EngEqDataServiceImpl implements EngEqDataService { }; } + private String mapWbsbColumn(String field) { + if (StrUtil.isBlank(field)) { + return null; + } + return switch (field) { + case "id" -> "t.id"; + case "wbsType" -> "t.wbsType"; + case "wbsCode" -> "t.wbsCode"; + case "wbsName" -> "t.wbsName"; + case "wbsSname" -> "t.wbsSname"; + case "enable" -> "t.enable"; + case "description" -> "t.description"; + case "parentId" -> "t.parentId"; + case "parentCode" -> "t.parentCode"; + case "treeLevel" -> "t.treeLevel"; + case "hasChildren" -> "t.hasChildren"; + case "objId", "objid" -> "t.objId"; + case "topWbsType" -> "t.topWbsType"; + case "fullPath" -> "t.fullPath"; + case "internal" -> "t.internal"; + case "introduce" -> "t.introduce"; + case "orderIndex" -> "NVL(t.orderIndex, 999999)"; + case "recordTime" -> "t.recordTime"; + case "modifyTime" -> "t.modifyTime"; + default -> null; + }; + } + private String mapEqColumn(String field) { if (StrUtil.isBlank(field)) { return null;