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