diff --git a/backend/src/main/java/com/yfd/platform/config/SecurityConfig.java b/backend/src/main/java/com/yfd/platform/config/SecurityConfig.java
index 58ec8889..c8c7cb72 100644
--- a/backend/src/main/java/com/yfd/platform/config/SecurityConfig.java
+++ b/backend/src/main/java/com/yfd/platform/config/SecurityConfig.java
@@ -65,6 +65,7 @@ public class SecurityConfig {
.requestMatchers("/eq/**").permitAll()
.requestMatchers("/env/**").permitAll()
.requestMatchers("/warn/**").permitAll()
+ .requestMatchers("/overview/**").permitAll()
.requestMatchers("/wt/**").permitAll()
.requestMatchers("/fb/**").permitAll()
.requestMatchers("/zq/**").permitAll()
diff --git a/backend/src/main/java/com/yfd/platform/config/SwaggerConfig.java b/backend/src/main/java/com/yfd/platform/config/SwaggerConfig.java
index f46f9a63..5e695eed 100644
--- a/backend/src/main/java/com/yfd/platform/config/SwaggerConfig.java
+++ b/backend/src/main/java/com/yfd/platform/config/SwaggerConfig.java
@@ -151,6 +151,15 @@ public class SwaggerConfig {
.build();
}
+ @Bean
+ public GroupedOpenApi groupEnvOverviewApi() {
+ return GroupedOpenApi.builder()
+ .group("3.10 全过程-生态环保数据服务-首页(overview)")
+ .packagesToScan("com.yfd.platform.qgc_env.overview.controller")
+ .build();
+ }
+
+
diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/controller/SdEngInfoBHController.java b/backend/src/main/java/com/yfd/platform/qgc_base/controller/SdEngInfoBHController.java
index b5c994ee..798ab6d7 100644
--- a/backend/src/main/java/com/yfd/platform/qgc_base/controller/SdEngInfoBHController.java
+++ b/backend/src/main/java/com/yfd/platform/qgc_base/controller/SdEngInfoBHController.java
@@ -93,6 +93,14 @@ public class SdEngInfoBHController {
return ResponseResult.successData(engInfoBHService.getVmsstbprptKendoList(dataSourceRequest));
}
+ @PostMapping("/stbprpData/GetKendoListCust")
+ @Operation(summary = "电站通用实时监测数据查询")
+ public ResponseResult getStbprpDataKendoListCust(@RequestBody DataSourceRequest dataSourceRequest,
+ @RequestParam("tbCode") String tbCode,
+ @RequestParam(value = "ignorePageLimit", required = false) Boolean ignorePageLimit) {
+ return ResponseResult.successData(engInfoBHService.getStbprpDataKendoListCust(dataSourceRequest, tbCode, ignorePageLimit));
+ }
+
@Log(module = "电站管理", value = "新增电站")
@PostMapping("/add")
@Operation(summary = "新增电站")
diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/domain/MsOperationLog.java b/backend/src/main/java/com/yfd/platform/qgc_base/domain/MsOperationLog.java
index 277171ac..04d9e34a 100644
--- a/backend/src/main/java/com/yfd/platform/qgc_base/domain/MsOperationLog.java
+++ b/backend/src/main/java/com/yfd/platform/qgc_base/domain/MsOperationLog.java
@@ -29,4 +29,11 @@ public class MsOperationLog implements Serializable {
@TableField("REMARK")
private String remark;
+
+ @TableField("TABLE_NAME")
+ private String tableName;
+
+ @TableField("RECORD_ID")
+ private String recordId;
+
}
diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/domain/vo/EngStbprpDataVo.java b/backend/src/main/java/com/yfd/platform/qgc_base/domain/vo/EngStbprpDataVo.java
new file mode 100644
index 00000000..afd9546c
--- /dev/null
+++ b/backend/src/main/java/com/yfd/platform/qgc_base/domain/vo/EngStbprpDataVo.java
@@ -0,0 +1,24 @@
+package com.yfd.platform.qgc_base.domain.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+
+import java.io.Serializable;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+@Schema(description = "电站通用监测数据动态行")
+public class EngStbprpDataVo extends LinkedHashMap implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ public EngStbprpDataVo() {
+ super();
+ }
+
+ public EngStbprpDataVo(Map source) {
+ super();
+ if (source != null && !source.isEmpty()) {
+ putAll(source);
+ }
+ }
+}
diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/entity/vo/BatchDeleteAo.java b/backend/src/main/java/com/yfd/platform/qgc_base/entity/vo/BatchDeleteAo.java
index 2fbb7069..f9bab6ca 100644
--- a/backend/src/main/java/com/yfd/platform/qgc_base/entity/vo/BatchDeleteAo.java
+++ b/backend/src/main/java/com/yfd/platform/qgc_base/entity/vo/BatchDeleteAo.java
@@ -12,6 +12,9 @@ public class BatchDeleteAo implements Serializable {
private static final long serialVersionUID = 1L;
+ @Schema(description = "数据来源")
+ private String source;
+
@Schema(description = "数据类型")
private String dataType;
diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/service/ISdEngInfoBHService.java b/backend/src/main/java/com/yfd/platform/qgc_base/service/ISdEngInfoBHService.java
index e9128874..7d034512 100644
--- a/backend/src/main/java/com/yfd/platform/qgc_base/service/ISdEngInfoBHService.java
+++ b/backend/src/main/java/com/yfd/platform/qgc_base/service/ISdEngInfoBHService.java
@@ -84,4 +84,6 @@ public interface ISdEngInfoBHService extends IService {
DataSourceResult getVmsstbprptKendoList(DataSourceRequest dataSourceRequest);
DataSourceResult getOperatKendoList(DataSourceRequest dataSourceRequest);
+
+ DataSourceResult getStbprpDataKendoListCust(DataSourceRequest dataSourceRequest, String tbCode, Boolean ignorePageLimit);
}
diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/MsOperationLogServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/MsOperationLogServiceImpl.java
index 8e70e7fb..a915ff1d 100644
--- a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/MsOperationLogServiceImpl.java
+++ b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/MsOperationLogServiceImpl.java
@@ -275,7 +275,7 @@ public class MsOperationLogServiceImpl implements IMsOperationLogService {
if (engInfo == null) {
return;
}
- MsOperationLog mainLog = buildMainLog("新增电站", source);
+ MsOperationLog mainLog = buildMainLog(null,"新增电站", source);
msOperationLogMapper.insert(mainLog);
List details = new ArrayList<>();
@@ -311,7 +311,7 @@ public class MsOperationLogServiceImpl implements IMsOperationLogService {
return;
}
- MsOperationLog mainLog = buildMainLog("修改电站", source);
+ MsOperationLog mainLog = buildMainLog(before.getStcd(),"修改电站", source);
msOperationLogMapper.insert(mainLog);
List details = new ArrayList<>();
@@ -348,7 +348,7 @@ public class MsOperationLogServiceImpl implements IMsOperationLogService {
if (engInfo == null) {
return;
}
- MsOperationLog mainLog = buildMainLog("删除电站", source);
+ MsOperationLog mainLog = buildMainLog(engInfo.getStcd(),"删除电站", source);
msOperationLogMapper.insert(mainLog);
List details = new ArrayList<>();
@@ -378,10 +378,12 @@ public class MsOperationLogServiceImpl implements IMsOperationLogService {
batchInsertDetails(details);
}
- private MsOperationLog buildMainLog(String remark, String source) {
+ private MsOperationLog buildMainLog(String recordId,String remark, String source) {
MsOperationLog log = new MsOperationLog();
log.setOperator(resolveOperator());
log.setOperateTime(new Date());
+ log.setTableName(ENG_TABLE_NAME);
+ log.setRecordId(recordId);
log.setSource(StrUtil.trimToNull(source));
log.setRemark(remark);
return log;
diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdEngInfoBHServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdEngInfoBHServiceImpl.java
index 315005fd..520e3752 100644
--- a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdEngInfoBHServiceImpl.java
+++ b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdEngInfoBHServiceImpl.java
@@ -27,12 +27,14 @@ 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.EngStbprpDataVo;
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;
import com.yfd.platform.qgc_base.mapper.SdEngInfoBHMapper;
import com.yfd.platform.qgc_base.service.IMsOperationLogService;
import com.yfd.platform.qgc_base.service.ISdEngInfoBHService;
+import com.yfd.platform.system.service.IAdminAuthService;
import com.yfd.platform.utils.QgcQueryWrapperUtil;
import com.yfd.platform.utils.SecurityUtils;
import jakarta.annotation.Resource;
@@ -41,15 +43,7 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import java.lang.reflect.Field;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
import java.util.stream.Collectors;
/**
@@ -88,6 +82,9 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl queryPageList(Page page, String ennm, String rvcd, String baseId, String hycd) {
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
@@ -100,7 +97,7 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl authorizedStations = getUserAuthorizedStationCodes();
if (authorizedStations != null && !authorizedStations.isEmpty()) {
wrapper.in(SdEngInfoBH::getStcd, authorizedStations);
- }else if (!"admin".equals(SecurityUtils.getCurrentUsername())){
+ }else if (!adminAuthService.isCurrentManagedAdmin()){
return page;
}
return this.page(page, wrapper);
@@ -142,7 +139,7 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl authorizedStations = getUserAuthorizedStationCodes();
@@ -709,6 +706,59 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl result = new DataSourceResult<>();
+ result.setAggregates(new HashMap<>());
+ if (StrUtil.isBlank(tbCode)) {
+ result.setData(new ArrayList<>());
+ result.setTotal(0L);
+ return result;
+ }
+ DataSourceRequest request = dataSourceRequest == null ? new DataSourceRequest() : dataSourceRequest;
+ if (!Boolean.TRUE.equals(ignorePageLimit) && request.getTake() == 0) {
+ request.setTake(2000);
+ }
+
+ DataSourceLoadOptionsBase loadOptions = request.toDevRequest();
+ List tableMetaList = queryStbprpTableMeta(tbCode);
+ if (CollUtil.isEmpty(tableMetaList)) {
+ return result;
+ }
+
+ String firstTableName = tableMetaList.getFirst().tableName();
+ String detailSql = buildStbprpDataDetailSql(request, tableMetaList);
+ Map paramMap = new HashMap<>();
+ String filterSql = buildStbprpDataFilterCondition(request.getFilter(), paramMap, new int[]{0}, tableMetaList);
+ if (StrUtil.isNotBlank(filterSql)) {
+ detailSql = detailSql + " AND " + filterSql;
+ }
+
+ if (CollUtil.isEmpty(request.getGroup())) {
+ String sql = detailSql + buildStbprpDataOrderBySql(request.getSort(), tableMetaList);
+ Page> page = loadOptions == null ? null : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake());
+ List
+ *
+ *
+ * 使用示例:
+ * // 在查询方法末尾调用:
+ * dictCodeToNameConverter.convertCodeToName(voList, CODE_TO_NAME_META_LIST);
+ *
+ */
+ private static final List CODE_TO_NAME_META_LIST = new ArrayList<>();
+
+// static {
+//
+// CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("grd").modifyProperty("grdName").dictType("STATIC").dictSource("TEST").build());
+// CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("baseid").modifyProperty("basename").dictType("DYNAMIC").dictSource("SD_HYDROBASE").codeColumn("BASEID").nameColumn("BASENAME").filter("NVL(IS_DELETED, 0) = 0 ").build());
+// }
+
+
@Override
public Page queryPageList(Page page, String hbrvnm, String baseid) {
return this.page(page, this.lambdaQuery()
@@ -110,7 +145,7 @@ public class SdHbrvDicServiceImpl extends ServiceImpl authorizedStations = getUserAuthorizedStationCodes();
diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdHydrobaseServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdHydrobaseServiceImpl.java
index 652d5d4d..9669eba8 100644
--- a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdHydrobaseServiceImpl.java
+++ b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdHydrobaseServiceImpl.java
@@ -13,6 +13,7 @@ import com.yfd.platform.qgc_base.entity.vo.HydrobaseWbsVo;
import com.yfd.platform.qgc_base.mapper.SdEngInfoBHMapper;
import com.yfd.platform.qgc_base.mapper.SdHydrobaseMapper;
import com.yfd.platform.qgc_base.service.ISdHydrobaseService;
+import com.yfd.platform.system.service.IAdminAuthService;
import com.yfd.platform.utils.SecurityUtils;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
@@ -39,6 +40,9 @@ public class SdHydrobaseServiceImpl extends ServiceImpl queryPageList(Page page, String basename, String pbaseid) {
return this.page(page, this.lambdaQuery()
@@ -91,7 +95,7 @@ public class SdHydrobaseServiceImpl extends ServiceImpl();
}
- }else if (!"admin".equals(SecurityUtils.getCurrentUsername())){
+ }else if (!adminAuthService.isCurrentManagedAdmin()){
return new ArrayList<>();
}
// else {
diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdRvcdDicServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdRvcdDicServiceImpl.java
index 60446e27..ff89fa82 100644
--- a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdRvcdDicServiceImpl.java
+++ b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdRvcdDicServiceImpl.java
@@ -11,6 +11,7 @@ import com.yfd.platform.qgc_base.mapper.SdRvcdDicMapper;
import com.yfd.platform.qgc_base.service.ISdRvcdDicService;
import com.yfd.platform.qgc_data.domain.SysUserDataScope;
import com.yfd.platform.qgc_data.mapper.SysUserDataScopeMapper;
+import com.yfd.platform.system.service.IAdminAuthService;
import com.yfd.platform.utils.SecurityUtils;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
@@ -33,6 +34,9 @@ public class SdRvcdDicServiceImpl extends ServiceImpl queryPageList(Page page, String rvnm, String prvcd) {
return this.page(page, this.lambdaQuery()
@@ -120,7 +124,7 @@ public class SdRvcdDicServiceImpl extends ServiceImpl selectForDropdown(String rvnm, String rvcd) {
List dropdownList = this.baseMapper.selectRegDropdown(rvnm, rvcd);
- if("admin".equals(SecurityUtils.getCurrentUsername())){
+ if(adminAuthService.isCurrentManagedAdmin()){
return dropdownList;
}
Set authorizedStations = getUserAuthorizedStationCodes();
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 5a7a0cfc..d470ba6e 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
@@ -5746,7 +5746,8 @@ public class EngEqDataServiceImpl implements EngEqDataService {
}
return switch (field) {
case "id" -> "t.id";
- case "stcd" -> "t.stcd";
+ case "rstcd" -> "t.stcd";
+// case "rstcd" -> "t.rstcd";
case "stnm", "ennm" -> "t.ennm";
case "baseId" -> "t.baseId";
case "baseName" -> "t.baseName";
diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/overview/controller/OverviewController.java b/backend/src/main/java/com/yfd/platform/qgc_env/overview/controller/OverviewController.java
new file mode 100644
index 00000000..a3ed0a61
--- /dev/null
+++ b/backend/src/main/java/com/yfd/platform/qgc_env/overview/controller/OverviewController.java
@@ -0,0 +1,35 @@
+package com.yfd.platform.qgc_env.overview.controller;
+
+import com.yfd.platform.common.DataSourceRequest;
+import com.yfd.platform.config.ResponseResult;
+import com.yfd.platform.qgc_env.overview.service.OverviewService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/overview")
+@Tag(name = "首页概览")
+@Validated
+public class OverviewController {
+
+ @Resource
+ private OverviewService overviewService;
+
+ @PostMapping("/msstbprpt/GetKendoList")
+ @Operation(summary = "首页基础设施概览列表")
+ public ResponseResult getMsstbprptList(@RequestBody DataSourceRequest dataSourceRequest) {
+ return ResponseResult.successData(overviewService.getMsstbprptList(dataSourceRequest));
+ }
+
+ @PostMapping("/oped/GetKendoListCust")
+ @Operation(summary = "首页环保设施运行状况明细")
+ public ResponseResult getOpedList(@RequestBody DataSourceRequest dataSourceRequest) {
+ return ResponseResult.successData(overviewService.getOpedList(dataSourceRequest));
+ }
+}
diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/overview/entity/vo/OverviewMsstbprptVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/overview/entity/vo/OverviewMsstbprptVo.java
new file mode 100644
index 00000000..effa1e33
--- /dev/null
+++ b/backend/src/main/java/com/yfd/platform/qgc_env/overview/entity/vo/OverviewMsstbprptVo.java
@@ -0,0 +1,72 @@
+package com.yfd.platform.qgc_env.overview.entity.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+@Schema(description = "首页基础设施概览列表")
+public class OverviewMsstbprptVo implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ private String id;
+ private String stcd;
+ private String stnm;
+ private String sttp;
+ private String sttpCode;
+ private String sttpName;
+ private String sttpFullPath;
+ private Integer sttpTreeLevel;
+ private String blprdId;
+ private Double lgtd;
+ private Double lttd;
+ private Double dtmel;
+ private String stlc;
+ private Integer usfl;
+ private String rstcd;
+ private String ennm;
+ private String baseId;
+ private String baseName;
+ private String hbrvcd;
+ private String hbrvcdName;
+ private String rvcd;
+ private String rvcdName;
+ private String addvcd;
+ private String addvcdName;
+ private String country;
+ private String countryName;
+ private String stCode;
+ private String stName;
+ private Date stdsdt;
+ private Date pststdt;
+ private Date pesstdt;
+ private Date ststdt;
+ private Date jcdt;
+ private Date stwddt;
+ private String introduce;
+ private String precis;
+ private String logo;
+ private String inffile;
+ private Integer dtin;
+ private String dtinName;
+ private Date dtinTm;
+ private Integer bldsttCode;
+ private String bldsttCcode;
+ private String bldsttCcodeName;
+ private Double inv;
+ private Integer invinmn;
+ private String dsun;
+ private String jbtxcs;
+ private Integer dtfrqcy;
+ private String remark;
+ private String vlsr;
+ private Date vlsrTm;
+ private Integer orderIndex;
+ private Integer baseStepSort;
+ private Integer rvcdStepSort;
+ private Integer rstcdStepSort;
+ private Integer siteStepSort;
+}
diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/overview/entity/vo/OverviewOpedVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/overview/entity/vo/OverviewOpedVo.java
new file mode 100644
index 00000000..67a71e8a
--- /dev/null
+++ b/backend/src/main/java/com/yfd/platform/qgc_env/overview/entity/vo/OverviewOpedVo.java
@@ -0,0 +1,65 @@
+package com.yfd.platform.qgc_env.overview.entity.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+@Data
+@Schema(description = "首页环保设施运行状况明细")
+public class OverviewOpedVo implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ private Map _tls = new HashMap<>();
+
+ private String id;
+ private String recordUser;
+ private Date recordTime;
+ private Date modifyTime;
+ private String displayRecordUser;
+ private String repCode;
+ private String pcode;
+ private String pname;
+ private String psttpName;
+ private String sttpName;
+ private String baseId;
+ private String stcd;
+ private String stnm;
+ private String sttpCode;
+ private String baseName;
+ private String rstcd;
+ private String ennm;
+ private String bldsttCcode;
+ private String bldsttCcodeName;
+ private Date dtinTm;
+ private Integer dtin;
+ private String dtinName;
+ private Integer runState;
+ private String runStateName;
+ private Integer stdState;
+ private String stdStateName;
+ private Integer stdSstate;
+ private String stdSstateName;
+ private Integer runSstate;
+ private String runSstateName;
+ private Integer mway;
+ private String mwayName;
+ private String hbrvcd;
+ private String hbrvcdName;
+ private String addvcdName;
+ private String rvcdName;
+ private Integer baseStepSort;
+ private Integer baseStepsort;
+ private Integer rvcdStepSort;
+ private Integer rstcdStepSort;
+ private Integer rstcdStepsort;
+ private Integer siteStepSort;
+ private Integer count;
+ private Date jcdt;
+ private String departmentId;
+ private String displayDepartment;
+}
diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/overview/service/OverviewService.java b/backend/src/main/java/com/yfd/platform/qgc_env/overview/service/OverviewService.java
new file mode 100644
index 00000000..481e665f
--- /dev/null
+++ b/backend/src/main/java/com/yfd/platform/qgc_env/overview/service/OverviewService.java
@@ -0,0 +1,13 @@
+package com.yfd.platform.qgc_env.overview.service;
+
+import com.yfd.platform.common.DataSourceRequest;
+import com.yfd.platform.common.DataSourceResult;
+import com.yfd.platform.qgc_env.overview.entity.vo.OverviewMsstbprptVo;
+import com.yfd.platform.qgc_env.overview.entity.vo.OverviewOpedVo;
+
+public interface OverviewService {
+
+ DataSourceResult getMsstbprptList(DataSourceRequest dataSourceRequest);
+
+ DataSourceResult getOpedList(DataSourceRequest dataSourceRequest);
+}
diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/overview/service/impl/OverviewServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/overview/service/impl/OverviewServiceImpl.java
new file mode 100644
index 00000000..79ec09ab
--- /dev/null
+++ b/backend/src/main/java/com/yfd/platform/qgc_env/overview/service/impl/OverviewServiceImpl.java
@@ -0,0 +1,1343 @@
+package com.yfd.platform.qgc_env.overview.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yfd.platform.common.DataSourceLoadOptionsBase;
+import com.yfd.platform.common.DataSourceRequest;
+import com.yfd.platform.common.DataSourceResult;
+import com.yfd.platform.common.GroupHelper;
+import com.yfd.platform.common.GroupingInfo;
+import com.yfd.platform.common.MicroservicDynamicSQLMapper;
+import com.yfd.platform.qgc_env.overview.entity.vo.OverviewMsstbprptVo;
+import com.yfd.platform.qgc_env.overview.entity.vo.OverviewOpedVo;
+import com.yfd.platform.qgc_env.overview.service.OverviewService;
+import com.yfd.platform.utils.QgcQueryWrapperUtil;
+import jakarta.annotation.Resource;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.time.Year;
+
+@Service
+public class OverviewServiceImpl implements OverviewService {
+
+ @Resource
+ private MicroservicDynamicSQLMapper microservicDynamicSQLMapper;
+
+ @Override
+ public DataSourceResult getMsstbprptList(DataSourceRequest dataSourceRequest) {
+ DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest();
+ List selectFields = resolveSelectFields(dataSourceRequest == null ? null : dataSourceRequest.getSelect());
+
+ StringBuilder sql = new StringBuilder();
+ sql.append("SELECT ")
+ .append(buildSelectSql(selectFields))
+ .append(" FROM (")
+ .append(buildBaseSql())
+ .append(") t WHERE 1 = 1 ");
+
+ Map paramMap = new HashMap<>();
+ String filterSql = buildFilterCondition(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), paramMap, new int[]{0});
+ if (StrUtil.isNotBlank(filterSql)) {
+ sql.append(" AND ").append(filterSql);
+ }
+ sql.append(buildOrderBySql(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, OverviewMsstbprptVo.class
+ );
+
+ DataSourceResult result = new DataSourceResult<>();
+ result.setData(list);
+ result.setTotal(page == null ? list.size() : page.getTotal());
+ result.setAggregates(new HashMap<>());
+ return result;
+ }
+
+ @Override
+ @SuppressWarnings("unchecked")
+ public DataSourceResult getOpedList(DataSourceRequest dataSourceRequest) {
+ DataSourceResult result = new DataSourceResult<>();
+ result.setAggregates(new HashMap<>());
+ if (dataSourceRequest == null) {
+ result.setData(new ArrayList<>());
+ result.setTotal(0L);
+ return result;
+ }
+
+ DataSourceLoadOptionsBase loadOptions = dataSourceRequest.toDevRequest();
+ Map paramMap = new HashMap<>();
+ paramMap.put("stateYear", resolveOpedStateYear());
+ if (shouldQueryOpedSummary(dataSourceRequest)) {
+ return queryOpedSummaryList(dataSourceRequest, loadOptions, paramMap);
+ }
+
+ String filterSql = buildOpedFilterCondition(dataSourceRequest.getFilter(), paramMap, new int[]{0});
+ if (CollUtil.isNotEmpty(dataSourceRequest.getGroup())) {
+ GroupingInfo[] groupInfos = loadOptions == null ? null : loadOptions.getGroup();
+ String groupSql = buildOpedGroupSql(buildOpedDetailSql(null, filterSql), groupInfos);
+ Page> page = loadOptions == null ? null
+ : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake());
+ List> rows = microservicDynamicSQLMapper.pageAllList(page, groupSql, paramMap);
+ 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(0L);
+ return result;
+ }
+
+ String sql = buildOpedDetailSql(dataSourceRequest.getSelect(), filterSql)
+ + buildOpedOrderBySql(dataSourceRequest.getSort());
+ Page> page = loadOptions == null ? null
+ : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake());
+ List list = microservicDynamicSQLMapper.pageAllListWithResultType(
+ page, sql, paramMap, OverviewOpedVo.class
+ );
+ result.setData(list);
+ result.setTotal(page == null ? list.size() : page.getTotal());
+ return result;
+ }
+
+ private DataSourceResult queryOpedSummaryList(DataSourceRequest dataSourceRequest,
+ DataSourceLoadOptionsBase loadOptions,
+ Map paramMap) {
+ String effectiveFilterSql = buildOpedEffectiveFilterCondition(dataSourceRequest.getFilter(), paramMap, new int[]{0});
+ StringBuilder sql = new StringBuilder();
+ sql.append("SELECT ")
+ .append(buildOpedSummarySelectSql(dataSourceRequest.getSelect()))
+ .append(" FROM (")
+ .append(buildOpedCategorySql())
+ .append(") cat ")
+ .append("LEFT JOIN (SELECT * FROM (")
+ .append(buildOpedBaseSql())
+ .append(") t WHERE 1 = 1 ");
+ if (StrUtil.isNotBlank(effectiveFilterSql)) {
+ sql.append(" AND ").append(effectiveFilterSql);
+ }
+ sql.append(") src ON cat.repCode = src.repCode ")
+ .append("GROUP BY cat.repCode, cat.sttpName, cat.orderIndex ")
+ .append(buildOpedSummaryOrderBySql(dataSourceRequest.getSort()));
+
+ Page> page = loadOptions == null ? null
+ : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake());
+ List list = microservicDynamicSQLMapper.pageAllListWithResultType(
+ page, sql.toString(), paramMap, OverviewOpedVo.class
+ );
+
+ DataSourceResult result = new DataSourceResult<>();
+ result.setData(list);
+ result.setTotal(page == null ? list.size() : page.getTotal());
+ result.setAggregates(new HashMap<>());
+ return result;
+ }
+
+ private String buildBaseSql() {
+ return buildFbSql() + " UNION ALL " + buildDwSql() + " UNION ALL " + buildFpSql();
+ }
+
+ private String buildFbSql() {
+ return "SELECT " +
+ "fb.STCD AS id, " +
+ "fb.STCD AS stcd, " +
+ "fb.STNM AS stnm, " +
+ "fb.STTP AS sttp, " +
+ "fb.STTP AS sttpCode, " +
+ "sttp.STTP_NAME AS sttpName, " +
+ "sttp.FULL_PATH AS sttpFullPath, " +
+ "sttp.TREE_LEVEL AS sttpTreeLevel, " +
+ "CAST(fb.BLPRD AS VARCHAR2(64)) AS blprdId, " +
+ "fb.LGTD AS lgtd, " +
+ "fb.LTTD AS lttd, " +
+ "fb.ELEV AS dtmel, " +
+ "fb.STLC AS stlc, " +
+ "fb.USFL AS usfl, " +
+ "fb.RSTCD AS rstcd, " +
+ "eng.ENNM AS ennm, " +
+ "NVL(fb.BASE_ID, eng.BASE_ID) AS baseId, " +
+ "hb.BASENAME AS baseName, " +
+ "NVL(fb.HBRVCD, eng.HBRVCD) AS hbrvcd, " +
+ "hbrv.HBRVNM AS hbrvcdName, " +
+ "eng.RVCD AS rvcd, " +
+ "rv.RVNM AS rvcdName, " +
+ "eng.ADDVCD AS addvcd, " +
+ "addv.ADDVNM AS addvcdName, " +
+ "eng.COUNTRY AS country, " +
+ "country.COUNTRY_NAME AS countryName, " +
+ "CAST(NULL AS VARCHAR2(64)) AS stCode, " +
+ "CAST(NULL AS VARCHAR2(200)) AS stName, " +
+ "fb.STDSDT AS stdsdt, " +
+ "fb.PSTSTDT AS pststdt, " +
+ "fb.PESSTDT AS pesstdt, " +
+ "fb.SWDT AS ststdt, " +
+ "fb.JCDT AS jcdt, " +
+ "fb.WDDT AS stwddt, " +
+ "fb.INTRODUCE AS introduce, " +
+ "fb.INTRODUCE AS precis, " +
+ "fb.LOGO AS logo, " +
+ "fb.INFFILE AS inffile, " +
+ "fb.DTIN AS dtin, " +
+ "CASE WHEN NVL(fb.DTIN, 0) = 1 THEN '已接入' ELSE '未接入' END AS dtinName, " +
+ "fb.DTIN_TM AS dtinTm, " +
+ "fb.BLDSTT_CODE AS bldsttCode, " +
+ "CASE fb.BLDSTT_CODE WHEN 0 THEN '0' WHEN 1 THEN '1' WHEN 2 THEN '2' ELSE NULL END AS bldsttCcode, " +
+ "CASE fb.BLDSTT_CODE WHEN 0 THEN '未建/规划' WHEN 1 THEN '在建' WHEN 2 THEN '已建' ELSE NULL END AS bldsttCcodeName, " +
+ "fb.INV AS inv, " +
+ "fb.INVINMN AS invinmn, " +
+ "fb.DSUN AS dsun, " +
+ "fb.JBTXCS AS jbtxcs, " +
+ "fb.DTFRQCY AS dtfrqcy, " +
+ "fb.REMARK AS remark, " +
+ "fb.VLSR AS vlsr, " +
+ "fb.VLSR_TM AS vlsrTm, " +
+ "fb.ORDER_INDEX AS orderIndex, " +
+ "NVL(hb.ORDER_INDEX, 999999) AS baseStepSort, " +
+ "NVL(hbrv.ORDER_INDEX, 999999) AS rvcdStepSort, " +
+ "NVL(eng.ORDER_INDEX, 999999) AS rstcdStepSort, " +
+ "NVL(fb.ORDER_INDEX, 999999) AS siteStepSort " +
+ "FROM SD_FBRD_B_H fb " +
+ "LEFT JOIN SD_STTP_B sttp ON sttp.STTP_CODE = fb.STTP AND NVL(sttp.ENABLE, 1) = 1 " +
+ "LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = fb.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 " +
+ "LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = NVL(fb.BASE_ID, eng.BASE_ID) AND NVL(hb.IS_DELETED, 0) = 0 " +
+ "LEFT JOIN SD_HBRV_DIC hbrv ON hbrv.HBRVCD = NVL(fb.HBRVCD, eng.HBRVCD) AND hbrv.BASEID = NVL(fb.BASE_ID, 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 SD_COUNTRY_B country ON country.COUNTRY_ID = eng.COUNTRY AND NVL(country.ENABLED, 1) = 1 ";
+ }
+
+ private String buildDwSql() {
+ return "SELECT " +
+ "dw.STCD AS id, " +
+ "dw.STCD AS stcd, " +
+ "dw.STNM AS stnm, " +
+ "dw.STTP AS sttp, " +
+ "dw.STTP AS sttpCode, " +
+ "sttp.STTP_NAME AS sttpName, " +
+ "sttp.FULL_PATH AS sttpFullPath, " +
+ "sttp.TREE_LEVEL AS sttpTreeLevel, " +
+ "CAST(NULL AS VARCHAR2(64)) AS blprdId, " +
+ "dw.LGTD AS lgtd, " +
+ "dw.LTTD AS lttd, " +
+ "dw.ELEV AS dtmel, " +
+ "dw.STLC AS stlc, " +
+ "dw.USFL AS usfl, " +
+ "dw.RSTCD AS rstcd, " +
+ "eng.ENNM AS ennm, " +
+ "NVL(dw.BASE_ID, eng.BASE_ID) AS baseId, " +
+ "hb.BASENAME AS baseName, " +
+ "NVL(dw.HBRVCD, eng.HBRVCD) AS hbrvcd, " +
+ "hbrv.HBRVNM AS hbrvcdName, " +
+ "eng.RVCD AS rvcd, " +
+ "rv.RVNM AS rvcdName, " +
+ "eng.ADDVCD AS addvcd, " +
+ "addv.ADDVNM AS addvcdName, " +
+ "eng.COUNTRY AS country, " +
+ "country.COUNTRY_NAME AS countryName, " +
+ "CAST(NULL AS VARCHAR2(64)) AS stCode, " +
+ "CAST(NULL AS VARCHAR2(200)) AS stName, " +
+ "dw.STDSDT AS stdsdt, " +
+ "dw.PSTSTDT AS pststdt, " +
+ "dw.PESSTDT AS pesstdt, " +
+ "dw.SWDT AS ststdt, " +
+ "dw.JCDT AS jcdt, " +
+ "dw.WDDT AS stwddt, " +
+ "dw.INTRODUCE AS introduce, " +
+ "dw.INTRODUCE AS precis, " +
+ "dw.LOGO AS logo, " +
+ "dw.INFFILE AS inffile, " +
+ "dw.DTIN AS dtin, " +
+ "CASE WHEN NVL(dw.DTIN, 0) = 1 THEN '已接入' ELSE '未接入' END AS dtinName, " +
+ "dw.DTIN_TM AS dtinTm, " +
+ "dw.BLDSTT_CODE AS bldsttCode, " +
+ "CASE dw.BLDSTT_CODE WHEN 0 THEN '0' WHEN 1 THEN '1' WHEN 2 THEN '2' ELSE NULL END AS bldsttCcode, " +
+ "CASE dw.BLDSTT_CODE WHEN 0 THEN '未建/规划' WHEN 1 THEN '在建' WHEN 2 THEN '已建' ELSE NULL END AS bldsttCcodeName, " +
+ "dw.INV AS inv, " +
+ "dw.INVINMN AS invinmn, " +
+ "CAST(NULL AS VARCHAR2(500)) AS dsun, " +
+ "dw.QTSSJBTX AS jbtxcs, " +
+ "dw.DTFRQCY AS dtfrqcy, " +
+ "dw.REMARK AS remark, " +
+ "dw.VLSR AS vlsr, " +
+ "dw.VLSR_TM AS vlsrTm, " +
+ "dw.ORDER_INDEX AS orderIndex, " +
+ "NVL(hb.ORDER_INDEX, 999999) AS baseStepSort, " +
+ "NVL(hbrv.ORDER_INDEX, 999999) AS rvcdStepSort, " +
+ "NVL(eng.ORDER_INDEX, 999999) AS rstcdStepSort, " +
+ "NVL(dw.ORDER_INDEX, 999999) AS siteStepSort " +
+ "FROM SD_DW_B_H dw " +
+ "LEFT JOIN SD_STTP_B sttp ON sttp.STTP_CODE = dw.STTP AND NVL(sttp.IS_DELETED, 0) = 0 AND NVL(sttp.ENABLE, 1) = 1 " +
+ "LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = dw.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 " +
+ "LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = NVL(dw.BASE_ID, eng.BASE_ID) AND NVL(hb.IS_DELETED, 0) = 0 " +
+ "LEFT JOIN SD_HBRV_DIC hbrv ON hbrv.HBRVCD = NVL(dw.HBRVCD, eng.HBRVCD) AND hbrv.BASEID = NVL(dw.BASE_ID, 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 SD_COUNTRY_B country ON country.COUNTRY_ID = eng.COUNTRY AND NVL(country.ENABLED, 1) = 1 " +
+ "WHERE NVL(dw.IS_DELETED, 0) = 0 ";
+ }
+
+ private String buildFpSql() {
+ return "SELECT " +
+ "fp.STCD AS id, " +
+ "fp.STCD AS stcd, " +
+ "fp.STNM AS stnm, " +
+ "fp.STTP AS sttp, " +
+ "fp.STTP AS sttpCode, " +
+ "sttp.STTP_NAME AS sttpName, " +
+ "sttp.FULL_PATH AS sttpFullPath, " +
+ "sttp.TREE_LEVEL AS sttpTreeLevel, " +
+ "CAST(fp.BLPRD AS VARCHAR2(64)) AS blprdId, " +
+ "fp.LGTD AS lgtd, " +
+ "fp.LTTD AS lttd, " +
+ "fp.ELEV AS dtmel, " +
+ "fp.STLC AS stlc, " +
+ "fp.USFL AS usfl, " +
+ "fp.RSTCD AS rstcd, " +
+ "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, " +
+ "eng.ADDVCD AS addvcd, " +
+ "addv.ADDVNM AS addvcdName, " +
+ "eng.COUNTRY AS country, " +
+ "country.COUNTRY_NAME AS countryName, " +
+ "CAST(NULL AS VARCHAR2(64)) AS stCode, " +
+ "CAST(NULL AS VARCHAR2(200)) AS stName, " +
+ "fp.STDSDT AS stdsdt, " +
+ "fp.PSTSTDT AS pststdt, " +
+ "fp.PESSTDT AS pesstdt, " +
+ "fp.SWDT AS ststdt, " +
+ "fp.JCDT AS jcdt, " +
+ "fp.WDDT AS stwddt, " +
+ "fp.INTRODUCE AS introduce, " +
+ "fp.INTRODUCE AS precis, " +
+ "fp.LOGO AS logo, " +
+ "fp.INFFILE AS inffile, " +
+ "fp.DTIN AS dtin, " +
+ "CASE WHEN NVL(fp.DTIN, 0) = 1 THEN '已接入' ELSE '未接入' END AS dtinName, " +
+ "fp.DTIN_TM AS dtinTm, " +
+ "fp.BLDSTT_CODE AS bldsttCode, " +
+ "CASE fp.BLDSTT_CODE WHEN 0 THEN '0' WHEN 1 THEN '1' WHEN 2 THEN '2' ELSE NULL END AS bldsttCcode, " +
+ "CASE fp.BLDSTT_CODE WHEN 0 THEN '未建/规划' WHEN 1 THEN '在建' WHEN 2 THEN '已建' ELSE NULL END AS bldsttCcodeName, " +
+ "fp.INV AS inv, " +
+ "fp.INVINMN AS invinmn, " +
+ "CAST(NULL AS VARCHAR2(500)) AS dsun, " +
+ "fp.JBTXCS AS jbtxcs, " +
+ "fp.DTFRQCY AS dtfrqcy, " +
+ "fp.REMARK AS remark, " +
+ "fp.VLSR AS vlsr, " +
+ "fp.VLSR_TM AS vlsrTm, " +
+ "fp.ORDER_INDEX AS orderIndex, " +
+ "NVL(hb.ORDER_INDEX, 999999) AS baseStepSort, " +
+ "NVL(hbrv.ORDER_INDEX, 999999) AS rvcdStepSort, " +
+ "NVL(eng.ORDER_INDEX, 999999) AS rstcdStepSort, " +
+ "NVL(fp.ORDER_INDEX, 999999) AS siteStepSort " +
+ "FROM SD_FPSS_B_H fp " +
+ "LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = fp.RSTCD " +
+ "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_STTP_B sttp ON sttp.STTP_CODE = fp.STTP AND NVL(sttp.IS_DELETED, 0) = 0 AND NVL(sttp.ENABLE, 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 SD_COUNTRY_B country ON country.COUNTRY_ID = eng.COUNTRY AND NVL(country.ENABLED, 1) = 1 ";
+ }
+
+ private List resolveSelectFields(List select) {
+ List fields = CollUtil.isEmpty(select)
+ ? new ArrayList<>(buildSelectMap().keySet())
+ : new ArrayList<>(select);
+ LinkedHashSet uniqueFields = new LinkedHashSet<>();
+ for (String field : fields) {
+ if (StrUtil.isNotBlank(field)) {
+ uniqueFields.add(field.trim());
+ }
+ }
+ if (uniqueFields.isEmpty()) {
+ uniqueFields.add("stcd");
+ }
+ return new ArrayList<>(uniqueFields);
+ }
+
+ private String buildSelectSql(List selectFields) {
+ Map columnMap = buildSelectMap();
+ List selectParts = new ArrayList<>();
+ for (String field : selectFields) {
+ String column = columnMap.get(field);
+ if (StrUtil.isNotBlank(column)) {
+ selectParts.add(column);
+ } else {
+ selectParts.add("NULL AS \"" + field + "\"");
+ }
+ }
+ if (selectParts.isEmpty()) {
+ selectParts.add("t.stcd AS \"stcd\"");
+ }
+ return String.join(", ", selectParts);
+ }
+
+ private Map buildSelectMap() {
+ Map columnMap = new LinkedHashMap<>();
+ columnMap.put("id", "t.id AS \"id\"");
+ columnMap.put("stcd", "t.stcd AS \"stcd\"");
+ columnMap.put("stnm", "t.stnm AS \"stnm\"");
+ columnMap.put("sttp", "t.sttp AS \"sttp\"");
+ columnMap.put("sttpCode", "t.sttpCode AS \"sttpCode\"");
+ columnMap.put("sttpName", "t.sttpName AS \"sttpName\"");
+ columnMap.put("sttpFullPath", "t.sttpFullPath AS \"sttpFullPath\"");
+ columnMap.put("sttpTreeLevel", "t.sttpTreeLevel AS \"sttpTreeLevel\"");
+ columnMap.put("blprdId", "t.blprdId AS \"blprdId\"");
+ columnMap.put("lgtd", "t.lgtd AS \"lgtd\"");
+ columnMap.put("lttd", "t.lttd AS \"lttd\"");
+ columnMap.put("dtmel", "t.dtmel AS \"dtmel\"");
+ columnMap.put("stlc", "t.stlc AS \"stlc\"");
+ columnMap.put("usfl", "t.usfl AS \"usfl\"");
+ columnMap.put("rstcd", "t.rstcd AS \"rstcd\"");
+ columnMap.put("ennm", "t.ennm AS \"ennm\"");
+ columnMap.put("baseId", "t.baseId AS \"baseId\"");
+ columnMap.put("baseName", "t.baseName AS \"baseName\"");
+ columnMap.put("hbrvcd", "t.hbrvcd AS \"hbrvcd\"");
+ columnMap.put("hbrvcdName", "t.hbrvcdName AS \"hbrvcdName\"");
+ columnMap.put("rvcd", "t.rvcd AS \"rvcd\"");
+ columnMap.put("rvcdName", "t.rvcdName AS \"rvcdName\"");
+ columnMap.put("addvcd", "t.addvcd AS \"addvcd\"");
+ columnMap.put("addvcdName", "t.addvcdName AS \"addvcdName\"");
+ columnMap.put("country", "t.country AS \"country\"");
+ columnMap.put("countryName", "t.countryName AS \"countryName\"");
+ columnMap.put("stCode", "t.stCode AS \"stCode\"");
+ columnMap.put("stName", "t.stName AS \"stName\"");
+ columnMap.put("stdsdt", "t.stdsdt AS \"stdsdt\"");
+ columnMap.put("pststdt", "t.pststdt AS \"pststdt\"");
+ columnMap.put("pesstdt", "t.pesstdt AS \"pesstdt\"");
+ columnMap.put("ststdt", "t.ststdt AS \"ststdt\"");
+ columnMap.put("jcdt", "t.jcdt AS \"jcdt\"");
+ columnMap.put("stwddt", "t.stwddt AS \"stwddt\"");
+ columnMap.put("introduce", "t.introduce AS \"introduce\"");
+ columnMap.put("precis", "t.precis AS \"precis\"");
+ columnMap.put("logo", "t.logo AS \"logo\"");
+ columnMap.put("inffile", "t.inffile AS \"inffile\"");
+ columnMap.put("dtin", "t.dtin AS \"dtin\"");
+ columnMap.put("dtinName", "t.dtinName AS \"dtinName\"");
+ columnMap.put("dtinTm", "t.dtinTm AS \"dtinTm\"");
+ columnMap.put("bldsttCode", "t.bldsttCode AS \"bldsttCode\"");
+ columnMap.put("bldsttCcode", "t.bldsttCcode AS \"bldsttCcode\"");
+ columnMap.put("bldsttCcodeName", "t.bldsttCcodeName AS \"bldsttCcodeName\"");
+ columnMap.put("inv", "t.inv AS \"inv\"");
+ columnMap.put("invinmn", "t.invinmn AS \"invinmn\"");
+ columnMap.put("dsun", "t.dsun AS \"dsun\"");
+ columnMap.put("jbtxcs", "t.jbtxcs AS \"jbtxcs\"");
+ columnMap.put("dtfrqcy", "t.dtfrqcy AS \"dtfrqcy\"");
+ columnMap.put("remark", "t.remark AS \"remark\"");
+ columnMap.put("vlsr", "t.vlsr AS \"vlsr\"");
+ columnMap.put("vlsrTm", "t.vlsrTm AS \"vlsrTm\"");
+ columnMap.put("orderIndex", "t.orderIndex AS \"orderIndex\"");
+ columnMap.put("baseStepSort", "t.baseStepSort AS \"baseStepSort\"");
+ columnMap.put("rvcdStepSort", "t.rvcdStepSort AS \"rvcdStepSort\"");
+ columnMap.put("rstcdStepSort", "t.rstcdStepSort AS \"rstcdStepSort\"");
+ columnMap.put("siteStepSort", "t.siteStepSort AS \"siteStepSort\"");
+ return columnMap;
+ }
+
+ private String buildFilterCondition(DataSourceRequest.FilterDescriptor filter,
+ Map paramMap,
+ int[] indexHolder) {
+ if (filter == null) {
+ return "";
+ }
+ if (StrUtil.isNotBlank(filter.getField())) {
+ return buildLeafCondition(filter, paramMap, indexHolder);
+ }
+ if (CollUtil.isEmpty(filter.getFilters())) {
+ return "";
+ }
+ List conditions = new ArrayList<>();
+ for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) {
+ String childSql = buildFilterCondition(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 buildLeafCondition(DataSourceRequest.FilterDescriptor filter,
+ Map paramMap,
+ int[] indexHolder) {
+ String field = filter.getField();
+ if (StrUtil.isBlank(field)) {
+ return "";
+ }
+ String operator = StrUtil.blankToDefault(filter.getOperator(), "eq").toLowerCase();
+ String column = mapFilterColumn(field);
+ if (StrUtil.isBlank(column)) {
+ return "";
+ }
+ 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