feat: 首页环保设施运行状况明细
This commit is contained in:
parent
156e449267
commit
23005d7cfc
@ -12,6 +12,9 @@ public class BatchDeleteAo implements Serializable {
|
|||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
@Schema(description = "数据来源")
|
||||||
|
private String source;
|
||||||
|
|
||||||
@Schema(description = "数据类型")
|
@Schema(description = "数据类型")
|
||||||
private String dataType;
|
private String dataType;
|
||||||
|
|
||||||
|
|||||||
@ -26,4 +26,10 @@ public class OverviewController {
|
|||||||
public ResponseResult getMsstbprptList(@RequestBody DataSourceRequest dataSourceRequest) {
|
public ResponseResult getMsstbprptList(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||||
return ResponseResult.successData(overviewService.getMsstbprptList(dataSourceRequest));
|
return ResponseResult.successData(overviewService.getMsstbprptList(dataSourceRequest));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping("/oped/GetKendoListCust")
|
||||||
|
@Operation(summary = "首页环保设施运行状况明细")
|
||||||
|
public ResponseResult getOpedList(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||||
|
return ResponseResult.successData(overviewService.getOpedList(dataSourceRequest));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,44 @@
|
|||||||
|
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 OverviewOpedVo implements Serializable {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
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 mway;
|
||||||
|
private String mwayName;
|
||||||
|
private String hbrvcd;
|
||||||
|
private String hbrvcdName;
|
||||||
|
private Integer baseStepSort;
|
||||||
|
private Integer baseStepsort;
|
||||||
|
private Integer rvcdStepSort;
|
||||||
|
private Integer rstcdStepSort;
|
||||||
|
private Integer rstcdStepsort;
|
||||||
|
private Integer siteStepSort;
|
||||||
|
}
|
||||||
@ -3,8 +3,11 @@ package com.yfd.platform.qgc_env.overview.service;
|
|||||||
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.qgc_env.overview.entity.vo.OverviewMsstbprptVo;
|
import com.yfd.platform.qgc_env.overview.entity.vo.OverviewMsstbprptVo;
|
||||||
|
import com.yfd.platform.qgc_env.overview.entity.vo.OverviewOpedVo;
|
||||||
|
|
||||||
public interface OverviewService {
|
public interface OverviewService {
|
||||||
|
|
||||||
DataSourceResult<OverviewMsstbprptVo> getMsstbprptList(DataSourceRequest dataSourceRequest);
|
DataSourceResult<OverviewMsstbprptVo> getMsstbprptList(DataSourceRequest dataSourceRequest);
|
||||||
|
|
||||||
|
DataSourceResult<OverviewOpedVo> getOpedList(DataSourceRequest dataSourceRequest);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,19 +6,24 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|||||||
import com.yfd.platform.common.DataSourceLoadOptionsBase;
|
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_env.overview.entity.vo.OverviewMsstbprptVo;
|
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.qgc_env.overview.service.OverviewService;
|
||||||
import com.yfd.platform.utils.QgcQueryWrapperUtil;
|
import com.yfd.platform.utils.QgcQueryWrapperUtil;
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
import java.util.LinkedHashSet;
|
import java.util.LinkedHashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.time.Year;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class OverviewServiceImpl implements OverviewService {
|
public class OverviewServiceImpl implements OverviewService {
|
||||||
@ -58,6 +63,49 @@ public class OverviewServiceImpl implements OverviewService {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public DataSourceResult<OverviewOpedVo> getOpedList(DataSourceRequest dataSourceRequest) {
|
||||||
|
DataSourceResult<OverviewOpedVo> result = new DataSourceResult<>();
|
||||||
|
result.setAggregates(new HashMap<>());
|
||||||
|
if (dataSourceRequest == null) {
|
||||||
|
result.setData(new ArrayList<>());
|
||||||
|
result.setTotal(0L);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
DataSourceLoadOptionsBase loadOptions = dataSourceRequest.toDevRequest();
|
||||||
|
Map<String, Object> paramMap = new HashMap<>();
|
||||||
|
paramMap.put("stateYear", resolveOpedStateYear());
|
||||||
|
|
||||||
|
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<Map<String, Object>> rows = microservicDynamicSQLMapper.pageAllList(page, groupSql, paramMap);
|
||||||
|
if (Boolean.TRUE.equals(dataSourceRequest.getGroupResultFlat())) {
|
||||||
|
result.setData((List<OverviewOpedVo>) (List<?>) new GroupHelper().faltGroup(rows, Arrays.asList(groupInfos)));
|
||||||
|
} else {
|
||||||
|
result.setData((List<OverviewOpedVo>) (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<OverviewOpedVo> list = microservicDynamicSQLMapper.pageAllListWithResultType(
|
||||||
|
page, sql, paramMap, OverviewOpedVo.class
|
||||||
|
);
|
||||||
|
result.setData(list);
|
||||||
|
result.setTotal(page == null ? list.size() : page.getTotal());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
private String buildBaseSql() {
|
private String buildBaseSql() {
|
||||||
return buildFbSql() + " UNION ALL " + buildDwSql() + " UNION ALL " + buildFpSql();
|
return buildFbSql() + " UNION ALL " + buildDwSql() + " UNION ALL " + buildFpSql();
|
||||||
}
|
}
|
||||||
@ -572,6 +620,484 @@ public class OverviewServiceImpl implements OverviewService {
|
|||||||
return " ORDER BY " + String.join(", ", orderItems);
|
return " ORDER BY " + String.join(", ", orderItems);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Integer resolveOpedStateYear() {
|
||||||
|
return Year.now().getValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
private String buildOpedDetailSql(List<String> selectFields, String filterSql) {
|
||||||
|
StringBuilder sql = new StringBuilder();
|
||||||
|
sql.append("SELECT ")
|
||||||
|
.append(buildOpedSelectSql(selectFields))
|
||||||
|
.append(" FROM (")
|
||||||
|
.append(buildOpedBaseSql())
|
||||||
|
.append(") t WHERE 1 = 1 ");
|
||||||
|
if (StrUtil.isNotBlank(filterSql)) {
|
||||||
|
sql.append(" AND ").append(filterSql);
|
||||||
|
}
|
||||||
|
return sql.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
private String buildOpedBaseSql() {
|
||||||
|
return "SELECT " +
|
||||||
|
"src.sttpName AS sttpName, " +
|
||||||
|
"src.baseId AS baseId, " +
|
||||||
|
"src.stcd AS stcd, " +
|
||||||
|
"src.stnm AS stnm, " +
|
||||||
|
"src.sttpCode AS sttpCode, " +
|
||||||
|
"src.baseName AS baseName, " +
|
||||||
|
"src.rstcd AS rstcd, " +
|
||||||
|
"src.ennm AS ennm, " +
|
||||||
|
"src.bldsttCcode AS bldsttCcode, " +
|
||||||
|
"src.bldsttCcodeName AS bldsttCcodeName, " +
|
||||||
|
"src.dtinTm AS dtinTm, " +
|
||||||
|
"src.dtin AS dtin, " +
|
||||||
|
"src.dtinName AS dtinName, " +
|
||||||
|
"state.RUN_STATE AS runState, " +
|
||||||
|
"CASE WHEN state.RUN_STATE = 1 THEN '运行中' " +
|
||||||
|
"WHEN state.RUN_STATE IN (0, 2) THEN '未运行' ELSE NULL END AS runStateName, " +
|
||||||
|
"state.STD_STATE AS stdState, " +
|
||||||
|
"CASE WHEN state.STD_STATE = 1 THEN '达标' " +
|
||||||
|
"WHEN state.STD_STATE = 2 THEN '无数据' " +
|
||||||
|
"WHEN state.STD_STATE IN (0, 3) THEN '未达标' ELSE NULL END AS stdStateName, " +
|
||||||
|
"state.STD_SSTATE AS stdSstate, " +
|
||||||
|
"CASE WHEN state.STD_SSTATE = 1 THEN '正常运行' " +
|
||||||
|
"WHEN state.STD_SSTATE IN (0, 2) THEN '暂无数据' " +
|
||||||
|
"WHEN state.STD_SSTATE = 3 THEN '未正常运行' ELSE NULL END AS stdSstateName, " +
|
||||||
|
"CAST(NULL AS NUMBER(10)) AS mway, " +
|
||||||
|
"CAST(NULL AS VARCHAR2(32)) AS mwayName, " +
|
||||||
|
"src.hbrvcd AS hbrvcd, " +
|
||||||
|
"src.hbrvcdName AS hbrvcdName, " +
|
||||||
|
"src.baseStepSort AS baseStepSort, " +
|
||||||
|
// "src.baseStepSort AS baseStepsort, " +
|
||||||
|
"src.rvcdStepSort AS rvcdStepSort, " +
|
||||||
|
"src.rstcdStepSort AS rstcdStepSort, " +
|
||||||
|
// "src.rstcdStepSort AS rstcdStepsort, " +
|
||||||
|
"src.siteStepSort AS siteStepSort " +
|
||||||
|
// "#{map.stateYear} AS yr " +
|
||||||
|
"FROM (" + buildOpedUnionSql() + ") src " +
|
||||||
|
"LEFT JOIN MS_STSTATE_T state ON state.STCD = src.stcd " +
|
||||||
|
"AND NVL(state.IS_DELETED, 0) = 0 " +
|
||||||
|
"AND state.YR = #{map.stateYear}";
|
||||||
|
}
|
||||||
|
|
||||||
|
private String buildOpedUnionSql() {
|
||||||
|
return buildOpedBranchSql(
|
||||||
|
"fb.STCD", "fb.STNM", "'FB'", "child.STTP_NAME", "NVL(fb.BASE_ID, eng.BASE_ID)",
|
||||||
|
"hb.BASENAME", "fb.RSTCD", "eng.ENNM", "NVL(fb.HBRVCD, eng.HBRVCD)", "hbrv.HBRVNM",
|
||||||
|
"CAST(fb.BLDSTT_CODE AS VARCHAR2(10))", buildBldsttNameExpr("fb.BLDSTT_CODE"), "fb.DTIN_TM", "fb.DTIN",
|
||||||
|
"CASE WHEN NVL(fb.DTIN, 0) = 1 THEN '已接入' ELSE '未接入' END",
|
||||||
|
"NVL(hb.ORDER_INDEX, 999999)", "NVL(hbrv.ORDER_INDEX, 999999)", "NVL(eng.ORDER_INDEX, 999999)", "NVL(fb.ORDER_INDEX, 999999)",
|
||||||
|
"SD_FBRD_B_H fb",
|
||||||
|
"LEFT JOIN SD_STTP_B child ON child.STTP_CODE = fb.STTP AND NVL(child.IS_DELETED, 0) = 0 AND NVL(child.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",
|
||||||
|
"1 = 1"
|
||||||
|
) + " UNION ALL " +
|
||||||
|
buildOpedBranchSql(
|
||||||
|
"vp.STCD", "vp.STNM", "'VP'", "child.STTP_NAME", "NVL(vp.BASE_ID, eng.BASE_ID)",
|
||||||
|
"hb.BASENAME", "vp.RSTCD", "eng.ENNM", "NVL(vp.HBRVCD, eng.HBRVCD)", "hbrv.HBRVNM",
|
||||||
|
"CAST(vp.BLDSTT_CODE AS VARCHAR2(10))", buildBldsttNameExpr("vp.BLDSTT_CODE"), "vp.DTIN_TM", "vp.DTIN",
|
||||||
|
"CASE WHEN NVL(vp.DTIN, 0) = 1 THEN '已接入' ELSE '未接入' END",
|
||||||
|
"NVL(hb.ORDER_INDEX, 999999)", "NVL(hbrv.ORDER_INDEX, 999999)", "NVL(eng.ORDER_INDEX, 999999)", "NVL(vp.ORDER_INDEX, 999999)",
|
||||||
|
"SD_VP_B_H vp",
|
||||||
|
"LEFT JOIN SD_STTP_B child ON child.STTP_CODE = vp.STTP AND NVL(child.IS_DELETED, 0) = 0 AND NVL(child.ENABLE, 1) = 1 " +
|
||||||
|
"LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = vp.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 " +
|
||||||
|
"LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = NVL(vp.BASE_ID, eng.BASE_ID) AND NVL(hb.IS_DELETED, 0) = 0 " +
|
||||||
|
"LEFT JOIN SD_HBRV_DIC hbrv ON hbrv.HBRVCD = NVL(vp.HBRVCD, eng.HBRVCD) AND hbrv.BASEID = NVL(vp.BASE_ID, eng.BASE_ID) " +
|
||||||
|
"AND NVL(hbrv.IS_DELETED, 0) = 0 AND NVL(hbrv.ENABLED, 1) = 1",
|
||||||
|
"NVL(vp.IS_DELETED, 0) = 0"
|
||||||
|
) + " UNION ALL " +
|
||||||
|
buildOpedBranchSql(
|
||||||
|
"va.STCD", "va.STNM", "'VA'", "child.STTP_NAME", "NVL(va.BASE_ID, eng.BASE_ID)",
|
||||||
|
"hb.BASENAME", "va.RSTCD", "eng.ENNM", "NVL(va.HBRVCD, eng.HBRVCD)", "hbrv.HBRVNM",
|
||||||
|
"CAST(va.BLDSTT_CODE AS VARCHAR2(10))", buildBldsttNameExpr("va.BLDSTT_CODE"), "va.DTIN_TM", "va.DTIN",
|
||||||
|
"CASE WHEN NVL(va.DTIN, 0) = 1 THEN '已接入' ELSE '未接入' END",
|
||||||
|
"NVL(hb.ORDER_INDEX, 999999)", "NVL(hbrv.ORDER_INDEX, 999999)", "NVL(eng.ORDER_INDEX, 999999)", "NVL(va.ORDER_INDEX, 999999)",
|
||||||
|
"SD_VA_B_H va",
|
||||||
|
"LEFT JOIN SD_STTP_B child ON child.STTP_CODE = va.STTP AND NVL(child.IS_DELETED, 0) = 0 AND NVL(child.ENABLE, 1) = 1 " +
|
||||||
|
"LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = va.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 " +
|
||||||
|
"LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = NVL(va.BASE_ID, eng.BASE_ID) AND NVL(hb.IS_DELETED, 0) = 0 " +
|
||||||
|
"LEFT JOIN SD_HBRV_DIC hbrv ON hbrv.HBRVCD = NVL(va.HBRVCD, eng.HBRVCD) AND hbrv.BASEID = NVL(va.BASE_ID, eng.BASE_ID) " +
|
||||||
|
"AND NVL(hbrv.IS_DELETED, 0) = 0 AND NVL(hbrv.ENABLED, 1) = 1",
|
||||||
|
"NVL(va.IS_DELETED, 0) = 0"
|
||||||
|
) + " UNION ALL " +
|
||||||
|
buildOpedBranchSql(
|
||||||
|
"fh.STCD", "fh.STNM", "'FH'", "child.STTP_NAME", "NVL(fh.BASE_ID, eng.BASE_ID)",
|
||||||
|
"hb.BASENAME", "fh.RSTCD", "eng.ENNM", "NVL(fh.HBRVCD, eng.HBRVCD)", "hbrv.HBRVNM",
|
||||||
|
"CAST(NULL AS VARCHAR2(10))", "CAST(NULL AS VARCHAR2(32))", "fh.DTIN_TM", "fh.DTIN",
|
||||||
|
"CASE WHEN NVL(fh.DTIN, 0) = 1 THEN '已接入' ELSE '未接入' END",
|
||||||
|
"NVL(hb.ORDER_INDEX, 999999)", "NVL(hbrv.ORDER_INDEX, 999999)", "NVL(eng.ORDER_INDEX, 999999)", "NVL(fh.ORDER_INDEX, 999999)",
|
||||||
|
"SD_FHBT_B_H fh",
|
||||||
|
"LEFT JOIN SD_STTP_B child ON child.STTP_CODE = 'FH' AND NVL(child.IS_DELETED, 0) = 0 AND NVL(child.ENABLE, 1) = 1 " +
|
||||||
|
"LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = fh.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 " +
|
||||||
|
"LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = NVL(fh.BASE_ID, eng.BASE_ID) AND NVL(hb.IS_DELETED, 0) = 0 " +
|
||||||
|
"LEFT JOIN SD_HBRV_DIC hbrv ON hbrv.HBRVCD = NVL(fh.HBRVCD, eng.HBRVCD) AND hbrv.BASEID = NVL(fh.BASE_ID, eng.BASE_ID) " +
|
||||||
|
"AND NVL(hbrv.IS_DELETED, 0) = 0 AND NVL(hbrv.ENABLED, 1) = 1",
|
||||||
|
"NVL(fh.IS_DELETED, 0) = 0"
|
||||||
|
) + " UNION ALL " +
|
||||||
|
buildOpedBranchSql(
|
||||||
|
"dw.STCD", "dw.STNM", "'DW'", "child.STTP_NAME", "NVL(dw.BASE_ID, eng.BASE_ID)",
|
||||||
|
"hb.BASENAME", "dw.RSTCD", "eng.ENNM", "NVL(dw.HBRVCD, eng.HBRVCD)", "hbrv.HBRVNM",
|
||||||
|
"CAST(dw.BLDSTT_CODE AS VARCHAR2(10))", buildBldsttNameExpr("dw.BLDSTT_CODE"), "dw.DTIN_TM", "dw.DTIN",
|
||||||
|
"CASE WHEN NVL(dw.DTIN, 0) = 1 THEN '已接入' ELSE '未接入' END",
|
||||||
|
"NVL(hb.ORDER_INDEX, 999999)", "NVL(hbrv.ORDER_INDEX, 999999)", "NVL(eng.ORDER_INDEX, 999999)", "NVL(dw.ORDER_INDEX, 999999)",
|
||||||
|
"SD_DW_B_H dw",
|
||||||
|
"LEFT JOIN SD_STTP_B child ON child.STTP_CODE = dw.STTP AND NVL(child.IS_DELETED, 0) = 0 AND NVL(child.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",
|
||||||
|
"NVL(dw.IS_DELETED, 0) = 0"
|
||||||
|
) + " UNION ALL " +
|
||||||
|
buildOpedBranchSql(
|
||||||
|
"fp.STCD", "fp.STNM", "'FP'", "child.STTP_NAME", "eng.BASE_ID",
|
||||||
|
"hb.BASENAME", "fp.RSTCD", "eng.ENNM", "eng.HBRVCD", "hbrv.HBRVNM",
|
||||||
|
"CAST(fp.BLDSTT_CODE AS VARCHAR2(10))", buildBldsttNameExpr("fp.BLDSTT_CODE"), "fp.DTIN_TM", "fp.DTIN",
|
||||||
|
"CASE WHEN NVL(fp.DTIN, 0) = 1 THEN '已接入' ELSE '未接入' END",
|
||||||
|
"NVL(hb.ORDER_INDEX, 999999)", "NVL(hbrv.ORDER_INDEX, 999999)", "NVL(eng.ORDER_INDEX, 999999)", "NVL(fp.ORDER_INDEX, 999999)",
|
||||||
|
"SD_FPSS_B_H fp",
|
||||||
|
"LEFT JOIN SD_STTP_B child ON child.STTP_CODE = fp.STTP AND NVL(child.IS_DELETED, 0) = 0 AND NVL(child.ENABLE, 1) = 1 " +
|
||||||
|
"LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = fp.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 " +
|
||||||
|
"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",
|
||||||
|
"1 = 1 AND fp.STTP LIKE 'FP\\_%' ESCAPE '\\' "
|
||||||
|
) + " UNION ALL " +
|
||||||
|
buildOpedBranchSql(
|
||||||
|
"eq.STCD", "eq.STNM", "'EQ'", "child.STTP_NAME", "NVL(eq.BASE_ID, eng.BASE_ID)",
|
||||||
|
"hb.BASENAME", "eq.RSTCD", "eng.ENNM", "NVL(eq.HBRVCD, eng.HBRVCD)", "hbrv.HBRVNM",
|
||||||
|
"CAST(eq.BLDSTT_CODE AS VARCHAR2(10))", buildBldsttNameExpr("eq.BLDSTT_CODE"), "eq.DTIN_TM", "eq.DTIN",
|
||||||
|
"CASE WHEN NVL(eq.DTIN, 0) = 1 THEN '已接入' ELSE '未接入' END",
|
||||||
|
"NVL(hb.ORDER_INDEX, 999999)", "NVL(hbrv.ORDER_INDEX, 999999)", "NVL(eng.ORDER_INDEX, 999999)", "NVL(eq.ORDER_INDEX, 999999)",
|
||||||
|
"SD_EQ_B_H eq",
|
||||||
|
"LEFT JOIN SD_STTP_B child ON child.STTP_CODE = eq.STTP AND NVL(child.IS_DELETED, 0) = 0 AND NVL(child.ENABLE, 1) = 1 " +
|
||||||
|
"LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = eq.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 " +
|
||||||
|
"LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = NVL(eq.BASE_ID, eng.BASE_ID) AND NVL(hb.IS_DELETED, 0) = 0 " +
|
||||||
|
"LEFT JOIN SD_HBRV_DIC hbrv ON hbrv.HBRVCD = NVL(eq.HBRVCD, eng.HBRVCD) AND hbrv.BASEID = NVL(eq.BASE_ID, eng.BASE_ID) " +
|
||||||
|
"AND NVL(hbrv.IS_DELETED, 0) = 0 AND NVL(hbrv.ENABLED, 1) = 1",
|
||||||
|
"NVL(eq.IS_DELETED, 0) = 0"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String buildOpedBranchSql(String stcdExpr,
|
||||||
|
String stnmExpr,
|
||||||
|
String sttpCodeExpr,
|
||||||
|
String sttpNameExpr,
|
||||||
|
String baseIdExpr,
|
||||||
|
String baseNameExpr,
|
||||||
|
String rstcdExpr,
|
||||||
|
String ennmExpr,
|
||||||
|
String hbrvcdExpr,
|
||||||
|
String hbrvcdNameExpr,
|
||||||
|
String bldsttExpr,
|
||||||
|
String bldsttNameExpr,
|
||||||
|
String dtinTmExpr,
|
||||||
|
String dtinExpr,
|
||||||
|
String dtinNameExpr,
|
||||||
|
String baseStepSortExpr,
|
||||||
|
String rvcdStepSortExpr,
|
||||||
|
String rstcdStepSortExpr,
|
||||||
|
String siteStepSortExpr,
|
||||||
|
String fromSql,
|
||||||
|
String joinSql,
|
||||||
|
String whereSql) {
|
||||||
|
return "SELECT " +
|
||||||
|
sttpNameExpr + " AS sttpName, " +
|
||||||
|
baseIdExpr + " AS baseId, " +
|
||||||
|
stcdExpr + " AS stcd, " +
|
||||||
|
stnmExpr + " AS stnm, " +
|
||||||
|
sttpCodeExpr + " AS sttpCode, " +
|
||||||
|
baseNameExpr + " AS baseName, " +
|
||||||
|
rstcdExpr + " AS rstcd, " +
|
||||||
|
ennmExpr + " AS ennm, " +
|
||||||
|
bldsttExpr + " AS bldsttCcode, " +
|
||||||
|
bldsttNameExpr + " AS bldsttCcodeName, " +
|
||||||
|
dtinTmExpr + " AS dtinTm, " +
|
||||||
|
dtinExpr + " AS dtin, " +
|
||||||
|
dtinNameExpr + " AS dtinName, " +
|
||||||
|
hbrvcdExpr + " AS hbrvcd, " +
|
||||||
|
hbrvcdNameExpr + " AS hbrvcdName, " +
|
||||||
|
baseStepSortExpr + " AS baseStepSort, " +
|
||||||
|
rvcdStepSortExpr + " AS rvcdStepSort, " +
|
||||||
|
rstcdStepSortExpr + " AS rstcdStepSort, " +
|
||||||
|
siteStepSortExpr + " AS siteStepSort " +
|
||||||
|
"FROM " + fromSql + " " + joinSql + " WHERE " + whereSql;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String buildBldsttNameExpr(String column) {
|
||||||
|
return "CASE " + column + " WHEN 0 THEN '未建/规划' WHEN 1 THEN '在建' WHEN 2 THEN '已建' ELSE NULL END";
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<String> resolveOpedSelectFields(List<String> select) {
|
||||||
|
List<String> fields = CollUtil.isEmpty(select)
|
||||||
|
? new ArrayList<>(buildOpedSelectMap().keySet())
|
||||||
|
: new ArrayList<>(select);
|
||||||
|
LinkedHashSet<String> 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 buildOpedSelectSql(List<String> selectFields) {
|
||||||
|
Map<String, String> columnMap = buildOpedSelectMap();
|
||||||
|
List<String> selectParts = new ArrayList<>();
|
||||||
|
for (String field : resolveOpedSelectFields(selectFields)) {
|
||||||
|
String column = columnMap.get(field);
|
||||||
|
if (StrUtil.isNotBlank(column)) {
|
||||||
|
selectParts.add(column);
|
||||||
|
} else {
|
||||||
|
selectParts.add("NULL AS \"" + field + "\"");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return String.join(", ", selectParts);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Map<String, String> buildOpedSelectMap() {
|
||||||
|
Map<String, String> columnMap = new LinkedHashMap<>();
|
||||||
|
columnMap.put("sttpName", "t.sttpName AS \"sttpName\"");
|
||||||
|
columnMap.put("baseId", "t.baseId AS \"baseId\"");
|
||||||
|
columnMap.put("stcd", "t.stcd AS \"stcd\"");
|
||||||
|
columnMap.put("stnm", "t.stnm AS \"stnm\"");
|
||||||
|
columnMap.put("sttpCode", "t.sttpCode AS \"sttpCode\"");
|
||||||
|
columnMap.put("baseName", "t.baseName AS \"baseName\"");
|
||||||
|
columnMap.put("rstcd", "t.rstcd AS \"rstcd\"");
|
||||||
|
columnMap.put("ennm", "t.ennm AS \"ennm\"");
|
||||||
|
columnMap.put("bldsttCcode", "t.bldsttCcode AS \"bldsttCcode\"");
|
||||||
|
columnMap.put("bldsttCcodeName", "t.bldsttCcodeName AS \"bldsttCcodeName\"");
|
||||||
|
columnMap.put("dtinTm", "t.dtinTm AS \"dtinTm\"");
|
||||||
|
columnMap.put("dtin", "t.dtin AS \"dtin\"");
|
||||||
|
columnMap.put("dtinName", "t.dtinName AS \"dtinName\"");
|
||||||
|
columnMap.put("runState", "t.runState AS \"runState\"");
|
||||||
|
columnMap.put("runStateName", "t.runStateName AS \"runStateName\"");
|
||||||
|
columnMap.put("stdState", "t.stdState AS \"stdState\"");
|
||||||
|
columnMap.put("stdStateName", "t.stdStateName AS \"stdStateName\"");
|
||||||
|
columnMap.put("stdSstate", "t.stdSstate AS \"stdSstate\"");
|
||||||
|
columnMap.put("stdSstateName", "t.stdSstateName AS \"stdSstateName\"");
|
||||||
|
columnMap.put("mway", "t.mway AS \"mway\"");
|
||||||
|
columnMap.put("mwayName", "t.mwayName AS \"mwayName\"");
|
||||||
|
columnMap.put("hbrvcd", "t.hbrvcd AS \"hbrvcd\"");
|
||||||
|
columnMap.put("hbrvcdName", "t.hbrvcdName AS \"hbrvcdName\"");
|
||||||
|
columnMap.put("baseStepSort", "t.baseStepSort AS \"baseStepSort\"");
|
||||||
|
// columnMap.put("baseStepsort", "t.baseStepsort AS \"baseStepsort\"");
|
||||||
|
columnMap.put("rvcdStepSort", "t.rvcdStepSort AS \"rvcdStepSort\"");
|
||||||
|
columnMap.put("rstcdStepSort", "t.rstcdStepSort AS \"rstcdStepSort\"");
|
||||||
|
// columnMap.put("rstcdStepsort", "t.rstcdStepsort AS \"rstcdStepsort\"");
|
||||||
|
columnMap.put("siteStepSort", "t.siteStepSort AS \"siteStepSort\"");
|
||||||
|
// columnMap.put("yr", "t.yr AS \"yr\"");
|
||||||
|
return columnMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String buildOpedFilterCondition(DataSourceRequest.FilterDescriptor filter,
|
||||||
|
Map<String, Object> paramMap,
|
||||||
|
int[] indexHolder) {
|
||||||
|
if (filter == null) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
if (StrUtil.isNotBlank(filter.getField())) {
|
||||||
|
return buildOpedLeafCondition(filter, paramMap, indexHolder);
|
||||||
|
}
|
||||||
|
if (CollUtil.isEmpty(filter.getFilters())) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
List<String> conditions = new ArrayList<>();
|
||||||
|
for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) {
|
||||||
|
String childSql = buildOpedFilterCondition(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 buildOpedLeafCondition(DataSourceRequest.FilterDescriptor filter,
|
||||||
|
Map<String, Object> paramMap,
|
||||||
|
int[] indexHolder) {
|
||||||
|
String field = filter.getField();
|
||||||
|
if (StrUtil.isBlank(field) || "yr".equals(field)) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
String operator = StrUtil.blankToDefault(filter.getOperator(), "eq").toLowerCase();
|
||||||
|
String column = mapOpedColumn(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<Object> values = normalizeValues(filter.getValue());
|
||||||
|
if (values.isEmpty()) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
List<String> placeholders = new ArrayList<>();
|
||||||
|
for (Object item : values) {
|
||||||
|
String key = "opedP" + indexHolder[0]++;
|
||||||
|
paramMap.put(key, item);
|
||||||
|
placeholders.add("#{map." + key + "}");
|
||||||
|
}
|
||||||
|
return column + ("ni".equals(operator) ? " NOT IN (" : " IN (") + String.join(", ", placeholders) + ")";
|
||||||
|
}
|
||||||
|
|
||||||
|
Object value = filter.getValue();
|
||||||
|
if (value == null) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
String key = "opedP" + indexHolder[0]++;
|
||||||
|
boolean dateField = isOpedDateField(field);
|
||||||
|
String placeholder = dateField
|
||||||
|
? "TO_DATE(#{map." + key + "}, 'YYYY-MM-DD HH24:MI:SS')"
|
||||||
|
: "#{map." + key + "}";
|
||||||
|
paramMap.put(key, value);
|
||||||
|
return switch (operator) {
|
||||||
|
case "eq" -> column + " = " + placeholder;
|
||||||
|
case "neq" -> column + " <> " + placeholder;
|
||||||
|
case "contains" -> {
|
||||||
|
paramMap.put(key, "%" + value + "%");
|
||||||
|
yield dateField
|
||||||
|
? "TO_CHAR(" + column + ", 'YYYY-MM-DD HH24:MI:SS') LIKE #{map." + key + "}"
|
||||||
|
: column + " LIKE #{map." + key + "}";
|
||||||
|
}
|
||||||
|
case "doesnotcontain" -> {
|
||||||
|
paramMap.put(key, "%" + value + "%");
|
||||||
|
yield dateField
|
||||||
|
? "TO_CHAR(" + column + ", 'YYYY-MM-DD HH24:MI:SS') NOT LIKE #{map." + key + "}"
|
||||||
|
: column + " NOT LIKE #{map." + key + "}";
|
||||||
|
}
|
||||||
|
case "startswith" -> {
|
||||||
|
paramMap.put(key, value + "%");
|
||||||
|
yield dateField
|
||||||
|
? "TO_CHAR(" + column + ", 'YYYY-MM-DD HH24:MI:SS') LIKE #{map." + key + "}"
|
||||||
|
: column + " LIKE #{map." + key + "}";
|
||||||
|
}
|
||||||
|
case "endswith" -> {
|
||||||
|
paramMap.put(key, "%" + value);
|
||||||
|
yield dateField
|
||||||
|
? "TO_CHAR(" + column + ", 'YYYY-MM-DD HH24:MI:SS') LIKE #{map." + key + "}"
|
||||||
|
: column + " LIKE #{map." + key + "}";
|
||||||
|
}
|
||||||
|
case "gt" -> column + " > " + placeholder;
|
||||||
|
case "gte" -> column + " >= " + placeholder;
|
||||||
|
case "lt" -> column + " < " + placeholder;
|
||||||
|
case "lte" -> column + " <= " + placeholder;
|
||||||
|
default -> "";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isOpedDateField(String field) {
|
||||||
|
return "dtinTm".equals(field);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String mapOpedColumn(String field) {
|
||||||
|
if (StrUtil.isBlank(field)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return switch (field) {
|
||||||
|
case "sttpName" -> "t.sttpName";
|
||||||
|
case "baseId" -> "t.baseId";
|
||||||
|
case "stcd" -> "t.stcd";
|
||||||
|
case "stnm" -> "t.stnm";
|
||||||
|
case "sttpCode" -> "t.sttpCode";
|
||||||
|
case "baseName" -> "t.baseName";
|
||||||
|
case "rstcd" -> "t.rstcd";
|
||||||
|
case "ennm" -> "t.ennm";
|
||||||
|
case "bldsttCcode" -> "t.bldsttCcode";
|
||||||
|
case "bldsttCcodeName" -> "t.bldsttCcodeName";
|
||||||
|
case "dtinTm" -> "t.dtinTm";
|
||||||
|
case "dtin" -> "t.dtin";
|
||||||
|
case "dtinName" -> "t.dtinName";
|
||||||
|
case "runState" -> "t.runState";
|
||||||
|
case "runStateName" -> "t.runStateName";
|
||||||
|
case "stdState" -> "t.stdState";
|
||||||
|
case "stdStateName" -> "t.stdStateName";
|
||||||
|
case "stdSstate" -> "t.stdSstate";
|
||||||
|
case "stdSstateName" -> "t.stdSstateName";
|
||||||
|
case "mway" -> "t.mway";
|
||||||
|
case "mwayName" -> "t.mwayName";
|
||||||
|
case "hbrvcd" -> "t.hbrvcd";
|
||||||
|
case "hbrvcdName" -> "t.hbrvcdName";
|
||||||
|
case "baseStepSort", "baseStepsort" -> "t.baseStepSort";
|
||||||
|
case "rvcdStepSort" -> "t.rvcdStepSort";
|
||||||
|
case "rstcdStepSort", "rstcdStepsort" -> "t.rstcdStepSort";
|
||||||
|
case "siteStepSort" -> "t.siteStepSort";
|
||||||
|
case "yr" -> "t.yr";
|
||||||
|
default -> null;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
private String buildOpedOrderBySql(List<DataSourceRequest.SortDescriptor> sortList) {
|
||||||
|
if (CollUtil.isEmpty(sortList)) {
|
||||||
|
return " ORDER BY t.baseStepSort ASC NULLS LAST, t.rvcdStepSort ASC NULLS LAST, " +
|
||||||
|
"t.rstcdStepSort ASC NULLS LAST, t.siteStepSort ASC NULLS LAST, t.stnm ASC";
|
||||||
|
}
|
||||||
|
List<String> orderItems = new ArrayList<>();
|
||||||
|
for (DataSourceRequest.SortDescriptor sort : sortList) {
|
||||||
|
if (sort == null || StrUtil.isBlank(sort.getField())) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
String column = mapOpedColumn(sort.getField());
|
||||||
|
if (StrUtil.isBlank(column)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
String dir = "desc".equalsIgnoreCase(sort.getDir()) || "des".equalsIgnoreCase(sort.getDir()) ? "DESC" : "ASC";
|
||||||
|
orderItems.add(column + " " + dir + " NULLS LAST");
|
||||||
|
}
|
||||||
|
if (orderItems.isEmpty()) {
|
||||||
|
return " ORDER BY t.baseStepSort ASC NULLS LAST, t.rvcdStepSort ASC NULLS LAST, " +
|
||||||
|
"t.rstcdStepSort ASC NULLS LAST, t.siteStepSort ASC NULLS LAST, t.stnm ASC";
|
||||||
|
}
|
||||||
|
return " ORDER BY " + String.join(", ", orderItems);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String buildOpedGroupSql(String detailSql, GroupingInfo[] groupInfos) {
|
||||||
|
if (groupInfos == null || groupInfos.length == 0) {
|
||||||
|
return detailSql;
|
||||||
|
}
|
||||||
|
List<String> groupFields = new ArrayList<>();
|
||||||
|
List<String> selectItems = new ArrayList<>();
|
||||||
|
List<String> orderItems = new ArrayList<>();
|
||||||
|
for (GroupingInfo item : groupInfos) {
|
||||||
|
if (item == null || StrUtil.isBlank(item.getSelector())) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
String selector = item.getSelector();
|
||||||
|
String column = mapOpedColumn(selector);
|
||||||
|
if (StrUtil.isBlank(column)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
groupFields.add(column);
|
||||||
|
selectItems.add(column + " AS " + selector);
|
||||||
|
selectItems.add("COUNT(*) AS count_" + selector);
|
||||||
|
orderItems.add(column + (item.getDesc() ? " DESC" : " ASC"));
|
||||||
|
}
|
||||||
|
if (groupFields.isEmpty()) {
|
||||||
|
return "SELECT * FROM (" + detailSql + ") t WHERE 1 = 0";
|
||||||
|
}
|
||||||
|
return "SELECT " + String.join(", ", selectItems) +
|
||||||
|
" FROM (" + detailSql + ") t GROUP BY " + String.join(", ", groupFields) +
|
||||||
|
" ORDER BY " + String.join(", ", orderItems);
|
||||||
|
}
|
||||||
|
|
||||||
private List<Object> normalizeValues(Object value) {
|
private List<Object> normalizeValues(Object value) {
|
||||||
List<Object> values = new ArrayList<>();
|
List<Object> values = new ArrayList<>();
|
||||||
collectValues(value, values);
|
collectValues(value, values);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user