feat: 电站统计查询

This commit is contained in:
tangwei 2026-06-09 14:09:19 +08:00
parent 48bfe316d7
commit 99446a46c9
4 changed files with 733 additions and 2 deletions

View File

@ -2,6 +2,7 @@ package com.yfd.platform.qgc_base.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yfd.platform.annotation.Log; import com.yfd.platform.annotation.Log;
import com.yfd.platform.common.DataSourceRequest;
import com.yfd.platform.config.ResponseResult; import com.yfd.platform.config.ResponseResult;
import com.yfd.platform.qgc_base.domain.SdEngInfoBH; import com.yfd.platform.qgc_base.domain.SdEngInfoBH;
import com.yfd.platform.qgc_base.domain.SdEngInfoBHRequest; import com.yfd.platform.qgc_base.domain.SdEngInfoBHRequest;
@ -81,6 +82,12 @@ public class SdEngInfoBHController {
return ResponseResult.successData(engInfoBHService.selectRegDropdown(sdEngInfoBHRequest)); return ResponseResult.successData(engInfoBHService.selectRegDropdown(sdEngInfoBHRequest));
} }
@PostMapping("/vmsstbprpt/GetKendoList")
@Operation(summary = "电站统计查询")
public ResponseResult getVmsstbprptList(@RequestBody DataSourceRequest dataSourceRequest) {
return ResponseResult.successData(engInfoBHService.getVmsstbprptKendoList(dataSourceRequest));
}
@Log(module = "电站管理", value = "新增电站") @Log(module = "电站管理", value = "新增电站")
@PostMapping("/add") @PostMapping("/add")
@Operation(summary = "新增电站") @Operation(summary = "新增电站")
@ -104,4 +111,4 @@ public class SdEngInfoBHController {
boolean result = engInfoBHService.deleteEngInfo(stcd); boolean result = engInfoBHService.deleteEngInfo(stcd);
return result ? ResponseResult.success("删除成功") : ResponseResult.error("删除失败"); return result ? ResponseResult.success("删除成功") : ResponseResult.error("删除失败");
} }
} }

View File

@ -0,0 +1,110 @@
package com.yfd.platform.qgc_base.domain.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 EngVmsstbprptVo implements Serializable {
private static final long serialVersionUID = 1L;
private String id;
private String sttpCode;
private String sttpName;
private String stcd;
private String stnm;
private String ennm;
private String baseId;
private String baseName;
private String hbrvcd;
private String hbrvcdName;
private String rvcd;
private String rvcdName;
private String addvcdName;
private String hynm;
private String topHynm;
private String stlc;
private Date jcdt;
private Date piodt;
private Date aiodt;
private String bldstt;
private Integer bldsttCcode;
private Double nrupar;
private Double dstcrvr;
private Double avyrp;
private Double avw;
private Double avq;
private Double avq01;
private Double avq02;
private Double avq03;
private Double avq04;
private Double avq05;
private Double avq06;
private Double avq07;
private Double avq08;
private Double avq09;
private Double avq10;
private Double avq11;
private Double avq12;
private Double obmxq;
private Double obmnq;
private Double hmxq;
private String dsnfqfrq;
private Integer dsrcin;
private String ckfqfqr;
private Integer chrcin;
private Double obmxw3;
private Double dsw3;
private Double ckw3;
private Double avsd;
private Double avs;
private Double obmxs;
private Double ckflz;
private Double dsflz;
private Double normz;
private Double uzfc;
private Double fsltdz;
private String ydownz;
private Double ddz;
private Double nrzar;
private Double bcklen;
private Double ttcp;
private Double nmzcp;
private String fldcpStr;
private Double actcp;
private Double ddcp;
private Double cpsc;
private String rgcp;
private Double dsflzmxq;
private Double dsflzxyz;
private Double ckflzmxq;
private Double ckflzxyz;
private Double ksqadjq;
private Double ksqxyz;
private String gemaxrq;
private Double mxgeqxyz;
private Double ttpwr;
private Integer gncnt;
private String gntp;
private Double grntpwr;
private Double yrge;
private Double ushr;
private Double k;
private String dmtp;
private Double dmcrel;
private Double mxdmhg;
private Double dmlen;
private Double sgyge;
private Double unyge;
private Double gap;
private String dvtp;
private Integer dtin;
private Integer baseStepSort;
private Integer rvcdStepSort;
private Integer rstcdStepSort;
private Integer siteStepSort;
}

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.SdEngInfoBHRequest;
import com.yfd.platform.qgc_base.domain.vo.EngBaseInfoVo; 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.EngEiaapprovalVo;
import com.yfd.platform.qgc_base.domain.vo.EngVmsstbprptVo;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
@ -66,4 +67,6 @@ public interface ISdEngInfoBHService extends IService<SdEngInfoBH> {
EngBaseInfoVo getStInfoByStcd(String stcd); EngBaseInfoVo getStInfoByStcd(String stcd);
DataSourceResult<EngEiaapprovalVo> getEiaapprovalKendoList(DataSourceRequest dataSourceRequest); DataSourceResult<EngEiaapprovalVo> getEiaapprovalKendoList(DataSourceRequest dataSourceRequest);
DataSourceResult<EngVmsstbprptVo> getVmsstbprptKendoList(DataSourceRequest dataSourceRequest);
} }

View File

@ -2,11 +2,16 @@ package com.yfd.platform.qgc_base.service.impl;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions; import cn.hutool.core.bean.copier.CopyOptions;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yfd.platform.common.DataSourceLoadOptionsBase;
import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.common.DataSourceRequest;
import com.yfd.platform.common.DataSourceResult; import com.yfd.platform.common.DataSourceResult;
import com.yfd.platform.common.GroupHelper;
import com.yfd.platform.common.GroupingInfo;
import com.yfd.platform.common.MicroservicDynamicSQLMapper; import com.yfd.platform.common.MicroservicDynamicSQLMapper;
import com.yfd.platform.qgc_data.domain.SysUserDataScope; import com.yfd.platform.qgc_data.domain.SysUserDataScope;
import com.yfd.platform.qgc_data.mapper.SysUserDataScopeMapper; import com.yfd.platform.qgc_data.mapper.SysUserDataScopeMapper;
@ -14,16 +19,20 @@ import com.yfd.platform.qgc_base.domain.SdEngInfoBH;
import com.yfd.platform.qgc_base.domain.SdEngInfoBHRequest; 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.EngBaseInfoVo;
import com.yfd.platform.qgc_base.domain.vo.EngEiaapprovalVo; import com.yfd.platform.qgc_base.domain.vo.EngEiaapprovalVo;
import com.yfd.platform.qgc_base.domain.vo.EngVmsstbprptVo;
import com.yfd.platform.qgc_base.mapper.SdEngInfoBHMapper; import com.yfd.platform.qgc_base.mapper.SdEngInfoBHMapper;
import com.yfd.platform.qgc_base.service.ISdEngInfoBHService; import com.yfd.platform.qgc_base.service.ISdEngInfoBHService;
import com.yfd.platform.utils.QgcQueryWrapperUtil;
import com.yfd.platform.utils.SecurityUtils; import com.yfd.platform.utils.SecurityUtils;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
@ -207,6 +216,137 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl<SdEngInfoBHMapper, SdEng
return this.list(wrapper); return this.list(wrapper);
} }
@Override
public DataSourceResult<EngVmsstbprptVo> getVmsstbprptKendoList(DataSourceRequest dataSourceRequest) {
DataSourceResult<EngVmsstbprptVo> result = new DataSourceResult<>();
result.setAggregates(new HashMap<>());
if (dataSourceRequest == null) {
result.setData(new ArrayList<>());
result.setTotal(0L);
return result;
}
Set<String> authorizedStations = null;
// if (!"admin".equals(SecurityUtils.getCurrentUsername())) {
// authorizedStations = getUserAuthorizedStationCodes();
// if (authorizedStations == null || authorizedStations.isEmpty()) {
// result.setData(new ArrayList<>());
// result.setTotal(0L);
// return result;
// }
// }
DataSourceLoadOptionsBase loadOptions = dataSourceRequest.toDevRequest();
if (CollUtil.isEmpty(dataSourceRequest.getGroup())) {
return queryVmsstbprptDetailList(dataSourceRequest, loadOptions, authorizedStations);
}
return queryVmsstbprptGroupList(dataSourceRequest, loadOptions, authorizedStations);
}
private DataSourceResult<EngVmsstbprptVo> queryVmsstbprptDetailList(DataSourceRequest dataSourceRequest,
DataSourceLoadOptionsBase loadOptions,
Set<String> authorizedStations) {
StringBuilder sql = new StringBuilder();
sql.append("SELECT ")
.append(buildVmsstbprptDetailSelectSql(dataSourceRequest.getSelect()))
.append(" FROM (")
.append(buildVmsstbprptViewSql())
.append(") t WHERE 1 = 1 ");
Map<String, Object> paramMap = new HashMap<>();
appendAuthorizedStations(sql, paramMap, authorizedStations, "t.stcd");
String filterSql = buildVmsstbprptFilterCondition(dataSourceRequest.getFilter(), paramMap, new int[]{0});
if (StrUtil.isNotBlank(filterSql)) {
sql.append(" AND ").append(filterSql);
}
sql.append(buildVmsstbprptDetailOrderBySql(dataSourceRequest.getSort()));
Page<?> page = loadOptions == null ? null : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake());
List<EngVmsstbprptVo> list = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, EngVmsstbprptVo.class);
DataSourceResult<EngVmsstbprptVo> result = new DataSourceResult<>();
result.setData(list);
result.setTotal(page == null ? list.size() : page.getTotal());
result.setAggregates(new HashMap<>());
return result;
}
private DataSourceResult<EngVmsstbprptVo> queryVmsstbprptGroupList(DataSourceRequest dataSourceRequest,
DataSourceLoadOptionsBase loadOptions,
Set<String> authorizedStations) {
List<DataSourceRequest.GroupDescriptor> groups = dataSourceRequest.getGroup();
GroupingInfo[] groupInfos = loadOptions == null ? new GroupingInfo[0] : loadOptions.getGroup();
List<String> selectItems = new ArrayList<>();
for (DataSourceRequest.GroupDescriptor descriptor : groups) {
if (descriptor == null || StrUtil.isBlank(descriptor.getField())) {
continue;
}
String column = mapVmsstbprptColumn(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 = mapVmsstbprptColumn(aggregate.getField());
if (StrUtil.isBlank(aggregateColumn) || StrUtil.isBlank(aggregate.getAggregate())) {
continue;
}
String aggregateSql = buildAggregateSql(aggregate.getAggregate(), aggregateColumn, aggregate.getField());
if (StrUtil.isNotBlank(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(buildVmsstbprptViewSql())
.append(") t WHERE 1 = 1 ");
Map<String, Object> paramMap = new HashMap<>();
appendAuthorizedStations(sql, paramMap, authorizedStations, "t.stcd");
String filterSql = buildVmsstbprptFilterCondition(dataSourceRequest.getFilter(), paramMap, new int[]{0});
if (StrUtil.isNotBlank(filterSql)) {
sql.append(" AND ").append(filterSql);
}
List<String> groupByColumns = new ArrayList<>();
for (DataSourceRequest.GroupDescriptor descriptor : groups) {
if (descriptor == null || StrUtil.isBlank(descriptor.getField())) {
continue;
}
String column = mapVmsstbprptColumn(descriptor.getField());
if (StrUtil.isNotBlank(column)) {
groupByColumns.add(column);
}
}
if (!groupByColumns.isEmpty()) {
sql.append(" GROUP BY ").append(String.join(", ", groupByColumns));
}
sql.append(buildVmsstbprptGroupOrderBySql(groups));
List<Map<String, Object>> rows = microservicDynamicSQLMapper.pageAllList(null, sql.toString(), paramMap);
DataSourceResult<EngVmsstbprptVo> result = new DataSourceResult<>();
if (Boolean.TRUE.equals(dataSourceRequest.getGroupResultFlat())) {
result.setData((List<EngVmsstbprptVo>) (List<?>) new GroupHelper().faltGroup(rows, Arrays.asList(groupInfos)));
} else {
result.setData((List<EngVmsstbprptVo>) (List<?>) new GroupHelper().group(rows, Arrays.asList(groupInfos)));
}
result.setTotal((long) rows.size());
result.setAggregates(new HashMap<>());
return result;
}
@Override @Override
public DataSourceResult<EngEiaapprovalVo> getEiaapprovalKendoList(DataSourceRequest dataSourceRequest) { public DataSourceResult<EngEiaapprovalVo> getEiaapprovalKendoList(DataSourceRequest dataSourceRequest) {
DataSourceResult<EngEiaapprovalVo> result = new DataSourceResult<>(); DataSourceResult<EngEiaapprovalVo> result = new DataSourceResult<>();
@ -319,6 +459,470 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl<SdEngInfoBHMapper, SdEng
return vo; return vo;
} }
private String buildVmsstbprptViewSql() {
return "SELECT " +
"eng.STCD AS id, " +
"'ENG' AS sttpCode, " +
"'电站' AS sttpName, " +
"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, " +
"hy.HYNM AS hynm, " +
"topHy.HYNM AS topHynm, " +
"eng.STLC AS stlc, " +
"eng.JCDT AS jcdt, " +
"eng.PIODT AS piodt, " +
"eng.AIODT AS aiodt, " +
"eng.BLDSTT AS bldstt, " +
"eng.BLDSTT_CODE AS bldsttCcode, " +
"eng.NRUPAR AS nrupar, " +
"eng.DSTCRVR AS dstcrvr, " +
"eng.AVYRP AS avyrp, " +
"eng.AVW AS avw, " +
"eng.AVQ AS avq, " +
"eng.AVQ01 AS avq01, " +
"eng.AVQ02 AS avq02, " +
"eng.AVQ03 AS avq03, " +
"eng.AVQ04 AS avq04, " +
"eng.AVQ05 AS avq05, " +
"eng.AVQ06 AS avq06, " +
"eng.AVQ07 AS avq07, " +
"eng.AVQ08 AS avq08, " +
"eng.AVQ09 AS avq09, " +
"eng.AVQ10 AS avq10, " +
"eng.AVQ11 AS avq11, " +
"eng.AVQ12 AS avq12, " +
"CAST(NULL AS NUMBER) AS obmxq, " +
"CAST(NULL AS NUMBER) AS obmnq, " +
"CAST(NULL AS NUMBER) AS hmxq, " +
"eng.DSNFQFRQ AS dsnfqfrq, " +
"eng.DSRCIN AS dsrcin, " +
"eng.CKFQFQR AS ckfqfqr, " +
"eng.CHRCIN AS chrcin, " +
"eng.OBMXW3 AS obmxw3, " +
"eng.DSW3 AS dsw3, " +
"eng.CKW3 AS ckw3, " +
"eng.AVSD AS avsd, " +
"eng.AVS AS avs, " +
"CAST(NULL AS NUMBER) AS obmxs, " +
"CAST(NULL AS NUMBER) AS ckflz, " +
"CAST(NULL AS NUMBER) AS dsflz, " +
"CAST(NULL AS NUMBER) AS normz, " +
"CAST(NULL AS NUMBER) AS uzfc, " +
"eng.FSLTDZ AS fsltdz, " +
"eng.YDOWNZ AS ydownz, " +
"CAST(NULL AS NUMBER) AS ddz, " +
"eng.NRZAR AS nrzar, " +
"eng.BCKLEN AS bcklen, " +
"CAST(NULL AS NUMBER) AS ttcp, " +
"CAST(NULL AS NUMBER) AS nmzcp, " +
"CAST(NULL AS VARCHAR2(255)) AS fldcpStr, " +
"CAST(NULL AS NUMBER) AS actcp, " +
"CAST(NULL AS NUMBER) AS ddcp, " +
"eng.CPSC AS cpsc, " +
"eng.RGCP AS rgcp, " +
"eng.DSMXQ AS dsflzmxq, " +
"CAST(NULL AS NUMBER) AS dsflzxyz, " +
"eng.CHMXQ AS ckflzmxq, " +
"CAST(NULL AS NUMBER) AS ckflzxyz, " +
"CAST(NULL AS NUMBER) AS ksqadjq, " +
"CAST(NULL AS NUMBER) AS ksqxyz, " +
"eng.GEMAXRQ AS gemaxrq, " +
"CAST(NULL AS NUMBER) AS mxgeqxyz, " +
"eng.YRGEB AS ttpwr, " +
"CAST(NULL AS NUMBER) AS gncnt, " +
"eng.GNTP AS gntp, " +
"CAST(NULL AS NUMBER) AS grntpwr, " +
"eng.TTPWRB AS yrge, " +
"CAST(NULL AS NUMBER) AS ushr, " +
"CAST(NULL AS NUMBER) AS k, " +
"eng.DMTP AS dmtp, " +
"eng.DMCREL AS dmcrel, " +
"eng.MXDMHG AS mxdmhg, " +
"eng.DMLEN AS dmlen, " +
"CAST(NULL AS NUMBER) AS sgyge, " +
"CAST(NULL AS NUMBER) AS unyge, " +
"eng.GAP AS gap, " +
"eng.DVTP AS dvtp, " +
"eng.DTIN AS dtin, " +
"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_ENGINFO_B_H eng " +
"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 SD_HYCD_DIC hy ON hy.HYCD = eng.HYCD AND NVL(hy.IS_DELETED, 0) = 0 AND NVL(hy.ENABLED, 1) = 1 " +
"LEFT JOIN SD_HYCD_DIC topHy ON topHy.HYCD = eng.TOP_HYCD AND NVL(topHy.IS_DELETED, 0) = 0 AND NVL(topHy.ENABLED, 1) = 1 " +
"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 " +
"WHERE NVL(eng.IS_DELETED, 0) = 0";
}
private String buildVmsstbprptDetailSelectSql(List<String> selectFields) {
Map<String, String> columns = vmsstbprptFieldColumns();
List<String> selected = new ArrayList<>();
if (CollUtil.isEmpty(selectFields)) {
selected.addAll(columns.values());
} else {
for (String field : selectFields) {
String column = columns.get(field);
if (StrUtil.isNotBlank(column)) {
selected.add(column);
}
}
if (selected.isEmpty()) {
selected.addAll(columns.values());
}
}
return String.join(", ", selected);
}
private Map<String, String> vmsstbprptFieldColumns() {
Map<String, String> columns = new LinkedHashMap<>();
columns.put("id", "t.id AS id");
columns.put("sttpCode", "t.sttpCode AS sttpCode");
columns.put("sttpName", "t.sttpName AS sttpName");
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("hynm", "t.hynm AS hynm");
columns.put("topHynm", "t.topHynm AS topHynm");
columns.put("stlc", "t.stlc AS stlc");
columns.put("jcdt", "t.jcdt AS jcdt");
columns.put("piodt", "t.piodt AS piodt");
columns.put("aiodt", "t.aiodt AS aiodt");
columns.put("bldstt", "t.bldstt AS bldstt");
columns.put("bldsttCcode", "t.bldsttCcode AS bldsttCcode");
columns.put("nrupar", "t.nrupar AS nrupar");
columns.put("dstcrvr", "t.dstcrvr AS dstcrvr");
columns.put("avyrp", "t.avyrp AS avyrp");
columns.put("avw", "t.avw AS avw");
columns.put("avq", "t.avq AS avq");
columns.put("avq01", "t.avq01 AS avq01");
columns.put("avq02", "t.avq02 AS avq02");
columns.put("avq03", "t.avq03 AS avq03");
columns.put("avq04", "t.avq04 AS avq04");
columns.put("avq05", "t.avq05 AS avq05");
columns.put("avq06", "t.avq06 AS avq06");
columns.put("avq07", "t.avq07 AS avq07");
columns.put("avq08", "t.avq08 AS avq08");
columns.put("avq09", "t.avq09 AS avq09");
columns.put("avq10", "t.avq10 AS avq10");
columns.put("avq11", "t.avq11 AS avq11");
columns.put("avq12", "t.avq12 AS avq12");
columns.put("obmxq", "t.obmxq AS obmxq");
columns.put("obmnq", "t.obmnq AS obmnq");
columns.put("hmxq", "t.hmxq AS hmxq");
columns.put("dsnfqfrq", "t.dsnfqfrq AS dsnfqfrq");
columns.put("dsrcin", "t.dsrcin AS dsrcin");
columns.put("ckfqfqr", "t.ckfqfqr AS ckfqfqr");
columns.put("chrcin", "t.chrcin AS chrcin");
columns.put("obmxw3", "t.obmxw3 AS obmxw3");
columns.put("dsw3", "t.dsw3 AS dsw3");
columns.put("ckw3", "t.ckw3 AS ckw3");
columns.put("avsd", "t.avsd AS avsd");
columns.put("avs", "t.avs AS avs");
columns.put("obmxs", "t.obmxs AS obmxs");
columns.put("ckflz", "t.ckflz AS ckflz");
columns.put("dsflz", "t.dsflz AS dsflz");
columns.put("normz", "t.normz AS normz");
columns.put("uzfc", "t.uzfc AS uzfc");
columns.put("fsltdz", "t.fsltdz AS fsltdz");
columns.put("ydownz", "t.ydownz AS ydownz");
columns.put("ddz", "t.ddz AS ddz");
columns.put("nrzar", "t.nrzar AS nrzar");
columns.put("bcklen", "t.bcklen AS bcklen");
columns.put("ttcp", "t.ttcp AS ttcp");
columns.put("nmzcp", "t.nmzcp AS nmzcp");
columns.put("fldcpStr", "t.fldcpStr AS fldcpStr");
columns.put("actcp", "t.actcp AS actcp");
columns.put("ddcp", "t.ddcp AS ddcp");
columns.put("cpsc", "t.cpsc AS cpsc");
columns.put("rgcp", "t.rgcp AS rgcp");
columns.put("dsflzmxq", "t.dsflzmxq AS dsflzmxq");
columns.put("dsflzxyz", "t.dsflzxyz AS dsflzxyz");
columns.put("ckflzmxq", "t.ckflzmxq AS ckflzmxq");
columns.put("ckflzxyz", "t.ckflzxyz AS ckflzxyz");
columns.put("ksqadjq", "t.ksqadjq AS ksqadjq");
columns.put("ksqxyz", "t.ksqxyz AS ksqxyz");
columns.put("gemaxrq", "t.gemaxrq AS gemaxrq");
columns.put("mxgeqxyz", "t.mxgeqxyz AS mxgeqxyz");
columns.put("ttpwr", "t.ttpwr AS ttpwr");
columns.put("gncnt", "t.gncnt AS gncnt");
columns.put("gntp", "t.gntp AS gntp");
columns.put("grntpwr", "t.grntpwr AS grntpwr");
columns.put("yrge", "t.yrge AS yrge");
columns.put("ushr", "t.ushr AS ushr");
columns.put("k", "t.k AS k");
columns.put("dmtp", "t.dmtp AS dmtp");
columns.put("dmcrel", "t.dmcrel AS dmcrel");
columns.put("mxdmhg", "t.mxdmhg AS mxdmhg");
columns.put("dmlen", "t.dmlen AS dmlen");
columns.put("sgyge", "t.sgyge AS sgyge");
columns.put("unyge", "t.unyge AS unyge");
columns.put("gap", "t.gap AS gap");
columns.put("dvtp", "t.dvtp AS dvtp");
columns.put("dtin", "t.dtin AS dtin");
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 buildVmsstbprptFilterCondition(DataSourceRequest.FilterDescriptor filter,
Map<String, Object> paramMap,
int[] indexHolder) {
if (filter == null) {
return "";
}
if (StrUtil.isNotBlank(filter.getField())) {
return buildVmsstbprptLeafCondition(filter, paramMap, indexHolder);
}
if (CollUtil.isEmpty(filter.getFilters())) {
return "";
}
List<String> childConditions = new ArrayList<>();
for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) {
String childSql = buildVmsstbprptFilterCondition(child, paramMap, indexHolder);
if (StrUtil.isNotBlank(childSql)) {
childConditions.add("(" + childSql + ")");
}
}
if (childConditions.isEmpty()) {
return "";
}
String logic = "or".equalsIgnoreCase(filter.getLogic()) ? " OR " : " AND ";
return String.join(logic, childConditions);
}
private String buildVmsstbprptLeafCondition(DataSourceRequest.FilterDescriptor filter,
Map<String, Object> paramMap,
int[] indexHolder) {
String column = mapVmsstbprptColumn(filter.getField());
if (StrUtil.isBlank(column)) {
return "";
}
String operator = filter.getOperator() == null ? "eq" : filter.getOperator().toLowerCase();
if ("sttpCode".equalsIgnoreCase(filter.getField()) && "eq".equals(operator) && filter.getValue() != null) {
return "t.sttpCode = 'ENG'";
}
return buildVmsstbprptCondition(column, filter, paramMap, indexHolder, isVmsstbprptDateField(filter.getField()));
}
private String buildVmsstbprptCondition(String column,
DataSourceRequest.FilterDescriptor filter,
Map<String, Object> paramMap,
int[] indexHolder,
boolean dateField) {
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 ("in".equals(operator)) {
List<Object> values = normalizeFilterValues(value);
if (values.isEmpty()) {
return "";
}
List<String> placeholders = new ArrayList<>();
for (Object item : values) {
String key = "vmsParam" + indexHolder[0]++;
paramMap.put(key, item);
placeholders.add("#{map." + key + "}");
}
return column + " IN (" + String.join(", ", placeholders) + ")";
}
if (value == null) {
return "";
}
String key = "vmsParam" + indexHolder[0]++;
String expr = buildVmsstbprptValueExpr(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 "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 buildVmsstbprptValueExpr(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 boolean isVmsstbprptDateField(String field) {
if (StrUtil.isBlank(field)) {
return false;
}
return switch (field) {
case "jcdt", "piodt", "aiodt" -> true;
default -> false;
};
}
private String buildVmsstbprptDetailOrderBySql(List<DataSourceRequest.SortDescriptor> sortList) {
if (CollUtil.isEmpty(sortList)) {
return " ORDER BY baseStepSort ASC, rvcdStepSort ASC, rstcdStepSort ASC, siteStepSort ASC, stnm ASC";
}
List<String> orderItems = new ArrayList<>();
for (DataSourceRequest.SortDescriptor sortDescriptor : sortList) {
if (sortDescriptor == null || StrUtil.isBlank(sortDescriptor.getField())) {
continue;
}
String column = mapVmsstbprptColumn(sortDescriptor.getField());
if (StrUtil.isBlank(column)) {
continue;
}
String dir = "desc".equalsIgnoreCase(sortDescriptor.getDir()) ? "DESC" : "ASC";
orderItems.add(column + " " + dir);
}
if (orderItems.isEmpty()) {
return " ORDER BY baseStepSort ASC, rvcdStepSort ASC, rstcdStepSort ASC, siteStepSort ASC, stnm ASC";
}
return " ORDER BY " + String.join(", ", orderItems);
}
private String buildVmsstbprptGroupOrderBySql(List<DataSourceRequest.GroupDescriptor> groups) {
if (CollUtil.isEmpty(groups)) {
return "";
}
List<String> orderItems = new ArrayList<>();
for (DataSourceRequest.GroupDescriptor descriptor : groups) {
if (descriptor == null || StrUtil.isBlank(descriptor.getField())) {
continue;
}
String column = mapVmsstbprptColumn(descriptor.getField());
if (StrUtil.isBlank(column)) {
continue;
}
String dir = "desc".equalsIgnoreCase(descriptor.getDir()) ? "DESC" : "ASC";
orderItems.add(column + " " + dir);
}
return orderItems.isEmpty() ? "" : " ORDER BY " + String.join(", ", orderItems);
}
private String buildAggregateSql(String aggregate, String column, String field) {
String upperField = field == null ? "" : field.toUpperCase();
return switch (aggregate.toLowerCase()) {
case "sum" -> "SUM(" + column + ") AS SUM_" + upperField;
case "avg" -> "AVG(" + column + ") AS AVG_" + upperField;
case "min" -> "MIN(" + column + ") AS MIN_" + upperField;
case "max" -> "MAX(" + column + ") AS MAX_" + upperField;
case "count" -> "COUNT(" + column + ") AS COUNT_" + upperField;
default -> null;
};
}
private String mapVmsstbprptColumn(String field) {
if (StrUtil.isBlank(field)) {
return null;
}
return switch (field) {
case "id" -> "t.id";
case "sttpCode" -> "t.sttpCode";
case "sttpName" -> "t.sttpName";
case "stcd" -> "t.stcd";
case "stnm", "ennm" -> "t.stnm";
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 "hynm" -> "t.hynm";
case "topHynm" -> "t.topHynm";
case "stlc" -> "t.stlc";
case "jcdt", "piodt", "aiodt" -> "t." + field;
case "bldstt", "rgcp", "gntp", "dmtp", "dvtp", "ydownz", "gemaxrq" -> "t." + field;
case "bldsttCcode", "dsrcin", "chrcin", "dtin", "gncnt" -> "t." + field;
case "nrupar", "dstcrvr", "avyrp", "avw", "avq",
"avq01", "avq02", "avq03", "avq04", "avq05", "avq06", "avq07", "avq08", "avq09", "avq10", "avq11", "avq12",
"obmxq", "obmnq", "hmxq", "obmxw3", "dsw3", "ckw3", "avsd", "avs", "obmxs", "ckflz", "dsflz", "normz",
"uzfc", "fsltdz", "ddz", "nrzar", "bcklen", "ttcp", "nmzcp", "actcp", "ddcp", "cpsc", "dsflzmxq",
"dsflzxyz", "ckflzmxq", "ckflzxyz", "ksqadjq", "ksqxyz", "mxgeqxyz", "ttpwr", "grntpwr", "yrge", "ushr",
"k", "dmcrel", "mxdmhg", "dmlen", "sgyge", "unyge", "gap" -> "t." + field;
case "fldcpStr" -> "t.fldcpStr";
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 buildEiaapprovalBaseSql() { private String buildEiaapprovalBaseSql() {
return "SELECT " + return "SELECT " +
"e.ID AS id, " + "e.ID AS id, " +
@ -384,6 +988,13 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl<SdEngInfoBHMapper, SdEng
} }
private void appendAuthorizedStations(StringBuilder sql, Map<String, Object> paramMap, Set<String> authorizedStations) { private void appendAuthorizedStations(StringBuilder sql, Map<String, Object> paramMap, Set<String> authorizedStations) {
appendAuthorizedStations(sql, paramMap, authorizedStations, "e.STCD");
}
private void appendAuthorizedStations(StringBuilder sql,
Map<String, Object> paramMap,
Set<String> authorizedStations,
String column) {
if (authorizedStations == null || authorizedStations.isEmpty()) { if (authorizedStations == null || authorizedStations.isEmpty()) {
return; return;
} }
@ -394,7 +1005,7 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl<SdEngInfoBHMapper, SdEng
paramMap.put(key, stcd); paramMap.put(key, stcd);
placeholders.add("#{map." + key + "}"); placeholders.add("#{map." + key + "}");
} }
sql.append(" AND e.STCD IN (").append(String.join(", ", placeholders)).append(")"); sql.append(" AND ").append(column).append(" IN (").append(String.join(", ", placeholders)).append(")");
} }
private String buildEiaapprovalFilterCondition(DataSourceRequest.FilterDescriptor filter, private String buildEiaapprovalFilterCondition(DataSourceRequest.FilterDescriptor filter,