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