feat: 根据条件查询水文流量站基础数据
This commit is contained in:
parent
0d1abdf94b
commit
0ad86754e7
@ -1,5 +1,6 @@
|
|||||||
package com.yfd.platform.env.zq.controller;
|
package com.yfd.platform.env.zq.controller;
|
||||||
|
|
||||||
|
import com.yfd.platform.common.DataSourceRequest;
|
||||||
import com.yfd.platform.config.ResponseResult;
|
import com.yfd.platform.config.ResponseResult;
|
||||||
import com.yfd.platform.env.zq.service.ZqMonitorService;
|
import com.yfd.platform.env.zq.service.ZqMonitorService;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
@ -7,6 +8,8 @@ import io.swagger.v3.oas.annotations.tags.Tag;
|
|||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RequestParam;
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
@ -20,6 +23,12 @@ public class ZqMonitorController {
|
|||||||
@Resource
|
@Resource
|
||||||
private ZqMonitorService zqMonitorService;
|
private ZqMonitorService zqMonitorService;
|
||||||
|
|
||||||
|
@PostMapping("/msstbprpt/GetKendoList")
|
||||||
|
@Operation(summary = "根据条件查询水文流量站基础数据")
|
||||||
|
public ResponseResult getMsstbprptList(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||||
|
return ResponseResult.successData(zqMonitorService.getMsstbprptList(dataSourceRequest));
|
||||||
|
}
|
||||||
|
|
||||||
@GetMapping("/msstbprpt/getStcdInfo")
|
@GetMapping("/msstbprpt/getStcdInfo")
|
||||||
@Operation(summary = "根据站码查询单条水文站基础数据")
|
@Operation(summary = "根据站码查询单条水文站基础数据")
|
||||||
public ResponseResult getStcdInfo(@RequestParam String stcd) {
|
public ResponseResult getStcdInfo(@RequestParam String stcd) {
|
||||||
|
|||||||
@ -21,6 +21,9 @@ public class ZqBaseInfoVo {
|
|||||||
@Schema(description = "站类")
|
@Schema(description = "站类")
|
||||||
private String sttp;
|
private String sttp;
|
||||||
|
|
||||||
|
@Schema(description = "站类编码")
|
||||||
|
private String sttpCode;
|
||||||
|
|
||||||
@Schema(description = "经度")
|
@Schema(description = "经度")
|
||||||
private Double lgtd;
|
private Double lgtd;
|
||||||
|
|
||||||
|
|||||||
@ -1,8 +1,12 @@
|
|||||||
package com.yfd.platform.env.zq.service;
|
package com.yfd.platform.env.zq.service;
|
||||||
|
|
||||||
|
import com.yfd.platform.common.DataSourceRequest;
|
||||||
|
import com.yfd.platform.common.DataSourceResult;
|
||||||
import com.yfd.platform.env.zq.entity.vo.ZqBaseInfoVo;
|
import com.yfd.platform.env.zq.entity.vo.ZqBaseInfoVo;
|
||||||
|
|
||||||
public interface ZqMonitorService {
|
public interface ZqMonitorService {
|
||||||
|
|
||||||
|
DataSourceResult getMsstbprptList(DataSourceRequest dataSourceRequest);
|
||||||
|
|
||||||
ZqBaseInfoVo getStcdInfo(String stcd);
|
ZqBaseInfoVo getStcdInfo(String stcd);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,13 +1,21 @@
|
|||||||
package com.yfd.platform.env.zq.service.impl;
|
package com.yfd.platform.env.zq.service.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import com.yfd.platform.common.DataSourceLoadOptionsBase;
|
||||||
|
import com.yfd.platform.common.DataSourceRequest;
|
||||||
|
import com.yfd.platform.common.DataSourceResult;
|
||||||
import com.yfd.platform.common.MicroservicDynamicSQLMapper;
|
import com.yfd.platform.common.MicroservicDynamicSQLMapper;
|
||||||
import com.yfd.platform.common.exception.BizException;
|
import com.yfd.platform.common.exception.BizException;
|
||||||
import com.yfd.platform.env.zq.entity.vo.ZqBaseInfoVo;
|
import com.yfd.platform.env.zq.entity.vo.ZqBaseInfoVo;
|
||||||
import com.yfd.platform.env.zq.service.ZqMonitorService;
|
import com.yfd.platform.env.zq.service.ZqMonitorService;
|
||||||
|
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.LinkedHashMap;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -18,6 +26,81 @@ public class ZqMonitorServiceImpl implements ZqMonitorService {
|
|||||||
@Resource
|
@Resource
|
||||||
private MicroservicDynamicSQLMapper microservicDynamicSQLMapper;
|
private MicroservicDynamicSQLMapper microservicDynamicSQLMapper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DataSourceResult getMsstbprptList(DataSourceRequest dataSourceRequest) {
|
||||||
|
DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest();
|
||||||
|
if (CollUtil.isEmpty(dataSourceRequest == null ? null : dataSourceRequest.getGroup())) {
|
||||||
|
StringBuilder sql = new StringBuilder();
|
||||||
|
sql.append("SELECT ")
|
||||||
|
.append(buildMsstbprptDetailSelectSql(dataSourceRequest == null ? null : dataSourceRequest.getSelect()))
|
||||||
|
.append(" FROM SD_RIVER_B_H t ")
|
||||||
|
.append("LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = t.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 ")
|
||||||
|
.append("LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = eng.BASE_ID AND NVL(hb.IS_DELETED, 0) = 0 ")
|
||||||
|
.append("LEFT JOIN SD_HBRV_DIC hbrv ON hbrv.HBRVCD = eng.HBRVCD ")
|
||||||
|
.append(" AND hbrv.BASEID = eng.BASE_ID ")
|
||||||
|
.append(" AND NVL(hbrv.IS_DELETED, 0) = 0 ")
|
||||||
|
.append(" AND NVL(hbrv.ENABLED, 1) = 1 ")
|
||||||
|
.append("LEFT JOIN SD_RVCD_DIC rv ON rv.RVCD = eng.RVCD ")
|
||||||
|
.append("LEFT JOIN SD_ADDVCD_DIC addv ON addv.ADDVCD = eng.ADDVCD ")
|
||||||
|
.append("WHERE NVL(t.IS_DELETED, 0) = 0 ");
|
||||||
|
|
||||||
|
Map<String, Object> paramMap = new HashMap<>();
|
||||||
|
String filterSql = buildMsstbprptFilterCondition(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), paramMap, new int[]{0});
|
||||||
|
if (StrUtil.isNotBlank(filterSql)) {
|
||||||
|
sql.append(" AND ").append(filterSql).append(" ");
|
||||||
|
}
|
||||||
|
sql.append(buildMsstbprptDetailOrderBySql(dataSourceRequest == null ? null : dataSourceRequest.getSort()));
|
||||||
|
|
||||||
|
Page<?> page = loadOptions == null ? null : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake());
|
||||||
|
List<ZqBaseInfoVo> list = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, ZqBaseInfoVo.class);
|
||||||
|
DataSourceResult<ZqBaseInfoVo> result = new DataSourceResult<>();
|
||||||
|
result.setData(list);
|
||||||
|
result.setTotal(page != null ? page.getTotal() : list.size());
|
||||||
|
result.setAggregates(new HashMap<>());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
String groupField = "dtinType";
|
||||||
|
String groupColumn = "t.DTIN_TYPE";
|
||||||
|
String groupDir = "ASC";
|
||||||
|
if (CollUtil.isNotEmpty(dataSourceRequest.getGroup())) {
|
||||||
|
DataSourceRequest.GroupDescriptor groupDescriptor = dataSourceRequest.getGroup().get(0);
|
||||||
|
if (groupDescriptor != null && StrUtil.isNotBlank(groupDescriptor.getField())) {
|
||||||
|
groupField = groupDescriptor.getField();
|
||||||
|
String mappedColumn = mapMsstbprptColumn(groupField);
|
||||||
|
if (StrUtil.isNotBlank(mappedColumn)) {
|
||||||
|
groupColumn = mappedColumn;
|
||||||
|
}
|
||||||
|
if ("desc".equalsIgnoreCase(groupDescriptor.getDir()) || "des".equalsIgnoreCase(groupDescriptor.getDir())) {
|
||||||
|
groupDir = "DESC";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
StringBuilder sql = new StringBuilder();
|
||||||
|
sql.append("SELECT ")
|
||||||
|
.append(groupColumn).append(" AS ").append(groupField.toUpperCase()).append(", ")
|
||||||
|
.append("COUNT(*) AS COUNT_").append(groupField.toUpperCase()).append(" ")
|
||||||
|
.append("FROM SD_RIVER_B_H t ")
|
||||||
|
.append("LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = t.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 ")
|
||||||
|
.append("WHERE NVL(t.IS_DELETED, 0) = 0 ");
|
||||||
|
|
||||||
|
Map<String, Object> paramMap = new HashMap<>();
|
||||||
|
String filterSql = buildMsstbprptFilterCondition(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), paramMap, new int[]{0});
|
||||||
|
if (StrUtil.isNotBlank(filterSql)) {
|
||||||
|
sql.append(" AND ").append(filterSql).append(" ");
|
||||||
|
}
|
||||||
|
sql.append("GROUP BY ").append(groupColumn).append(" ")
|
||||||
|
.append("ORDER BY ").append(groupColumn).append(" ").append(groupDir);
|
||||||
|
|
||||||
|
List<Map<String, Object>> rows = microservicDynamicSQLMapper.pageAllList(null, sql.toString(), paramMap);
|
||||||
|
DataSourceResult result = new DataSourceResult();
|
||||||
|
result.setData(toMsstbprptLegacyGroups(rows, groupField));
|
||||||
|
result.setTotal((long) rows.size());
|
||||||
|
result.setAggregates(new HashMap<>());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ZqBaseInfoVo getStcdInfo(String stcd) {
|
public ZqBaseInfoVo getStcdInfo(String stcd) {
|
||||||
if (StrUtil.isBlank(stcd)) {
|
if (StrUtil.isBlank(stcd)) {
|
||||||
@ -92,4 +175,290 @@ public class ZqMonitorServiceImpl implements ZqMonitorService {
|
|||||||
}
|
}
|
||||||
return list.get(0);
|
return list.get(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String buildMsstbprptFilterCondition(DataSourceRequest.FilterDescriptor filter,
|
||||||
|
Map<String, Object> paramMap,
|
||||||
|
int[] indexHolder) {
|
||||||
|
if (filter == null) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
if (StrUtil.isNotBlank(filter.getField())) {
|
||||||
|
return buildMsstbprptLeafCondition(filter, paramMap, indexHolder);
|
||||||
|
}
|
||||||
|
if (CollUtil.isEmpty(filter.getFilters())) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
List<String> conditions = new ArrayList<>();
|
||||||
|
for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) {
|
||||||
|
String childSql = buildMsstbprptFilterCondition(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 buildMsstbprptLeafCondition(DataSourceRequest.FilterDescriptor filter,
|
||||||
|
Map<String, Object> paramMap,
|
||||||
|
int[] indexHolder) {
|
||||||
|
String column = mapMsstbprptColumn(filter.getField());
|
||||||
|
if (StrUtil.isBlank(column)) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
String operator = StrUtil.blankToDefault(filter.getOperator(), "eq").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 = normalizeMsstbprptValues(value);
|
||||||
|
if (values.isEmpty()) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
List<String> placeholders = new ArrayList<>();
|
||||||
|
for (Object item : values) {
|
||||||
|
String paramKey = "zqMsstP" + indexHolder[0]++;
|
||||||
|
paramMap.put(paramKey, item);
|
||||||
|
placeholders.add("#{map." + paramKey + "}");
|
||||||
|
}
|
||||||
|
return column + " IN (" + String.join(", ", placeholders) + ")";
|
||||||
|
}
|
||||||
|
|
||||||
|
String paramKey = "zqMsstP" + indexHolder[0]++;
|
||||||
|
switch (operator) {
|
||||||
|
case "eq":
|
||||||
|
paramMap.put(paramKey, value);
|
||||||
|
return column + " = #{map." + paramKey + "}";
|
||||||
|
case "neq":
|
||||||
|
paramMap.put(paramKey, value);
|
||||||
|
return column + " <> #{map." + paramKey + "}";
|
||||||
|
case "contains":
|
||||||
|
paramMap.put(paramKey, "%" + value + "%");
|
||||||
|
return column + " LIKE #{map." + paramKey + "}";
|
||||||
|
case "startswith":
|
||||||
|
paramMap.put(paramKey, value + "%");
|
||||||
|
return column + " LIKE #{map." + paramKey + "}";
|
||||||
|
case "endswith":
|
||||||
|
paramMap.put(paramKey, "%" + value);
|
||||||
|
return column + " LIKE #{map." + paramKey + "}";
|
||||||
|
case "gt":
|
||||||
|
paramMap.put(paramKey, value);
|
||||||
|
return column + " > #{map." + paramKey + "}";
|
||||||
|
case "gte":
|
||||||
|
paramMap.put(paramKey, value);
|
||||||
|
return column + " >= #{map." + paramKey + "}";
|
||||||
|
case "lt":
|
||||||
|
paramMap.put(paramKey, value);
|
||||||
|
return column + " < #{map." + paramKey + "}";
|
||||||
|
case "lte":
|
||||||
|
paramMap.put(paramKey, value);
|
||||||
|
return column + " <= #{map." + paramKey + "}";
|
||||||
|
default:
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<Object> normalizeMsstbprptValues(Object value) {
|
||||||
|
if (value == null) {
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
if (value instanceof List<?> list) {
|
||||||
|
return new ArrayList<>(list);
|
||||||
|
}
|
||||||
|
String text = String.valueOf(value).trim();
|
||||||
|
if (StrUtil.isBlank(text)) {
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
if (text.startsWith("[") && text.endsWith("]")) {
|
||||||
|
text = text.substring(1, text.length() - 1);
|
||||||
|
}
|
||||||
|
List<Object> values = new ArrayList<>();
|
||||||
|
for (String item : text.split(",")) {
|
||||||
|
String trimmed = StrUtil.trim(item);
|
||||||
|
if (StrUtil.isNotBlank(trimmed)) {
|
||||||
|
values.add(StrUtil.removeAll(trimmed, "\""));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return values;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String mapMsstbprptColumn(String field) {
|
||||||
|
if (StrUtil.isBlank(field)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return switch (field) {
|
||||||
|
case "isDeleted" -> "NVL(t.IS_DELETED, 0)";
|
||||||
|
case "sttpCode" -> "t.STTP";
|
||||||
|
case "mway" -> "t.MWAY";
|
||||||
|
case "dtinType" -> "t.DTIN_TYPE";
|
||||||
|
case "stcd" -> "t.STCD";
|
||||||
|
case "stnm" -> "t.STNM";
|
||||||
|
case "fhstcd" -> "t.FHSTCD";
|
||||||
|
case "baseId" -> "eng.BASE_ID";
|
||||||
|
case "dtin" -> "t.DTIN";
|
||||||
|
case "rstcd" -> "t.RSTCD";
|
||||||
|
default -> null;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
private String buildMsstbprptDetailSelectSql(List<String> selectFields) {
|
||||||
|
Map<String, String> selectMap = new LinkedHashMap<>();
|
||||||
|
selectMap.put("stcd", "t.STCD AS stcd");
|
||||||
|
selectMap.put("stnm", "t.STNM AS stnm");
|
||||||
|
selectMap.put("tm", "t.TM AS tm");
|
||||||
|
selectMap.put("sttp", "t.STTP AS sttp");
|
||||||
|
selectMap.put("sttpCode", "t.STTP AS sttpCode");
|
||||||
|
selectMap.put("lgtd", "t.LGTD AS lgtd");
|
||||||
|
selectMap.put("lttd", "t.LTTD AS lttd");
|
||||||
|
selectMap.put("elev", "t.ELEV AS elev");
|
||||||
|
selectMap.put("stlc", "t.STLC AS stlc");
|
||||||
|
selectMap.put("jcdt", "t.JCDT AS jcdt");
|
||||||
|
selectMap.put("wddt", "t.WDDT AS wddt");
|
||||||
|
selectMap.put("bldsttCode", "t.BLDSTT_CODE AS bldsttCode");
|
||||||
|
selectMap.put("bldsttCcodeName", "CASE WHEN t.BLDSTT_CODE IN ('1', '10', '11') THEN '已建' WHEN t.BLDSTT_CODE IN ('2', '7', '8') THEN '在建' ELSE '未建/规划' END AS bldsttCcodeName");
|
||||||
|
selectMap.put("introduce", "t.INTRODUCE AS introduce");
|
||||||
|
selectMap.put("logo", "t.LOGO AS logo");
|
||||||
|
selectMap.put("inffile", "t.INFFILE AS inffile");
|
||||||
|
selectMap.put("usfl", "t.USFL AS usfl");
|
||||||
|
selectMap.put("dtin", "t.DTIN AS dtin");
|
||||||
|
selectMap.put("dtinSrc", "t.DTIN_SRC AS dtinSrc");
|
||||||
|
selectMap.put("dtinType", "t.DTIN_TYPE AS dtinType");
|
||||||
|
selectMap.put("dtinTm", "t.DTIN_TM AS dtinTm");
|
||||||
|
selectMap.put("mway", "t.MWAY AS mway");
|
||||||
|
selectMap.put("mwayName", "CASE NVL(t.MWAY, 0) WHEN 1 THEN '人工' WHEN 2 THEN '自动' ELSE '未知' END AS mwayName");
|
||||||
|
selectMap.put("stindx", "t.STINDX AS stindx");
|
||||||
|
selectMap.put("orderIndex", "t.ORDER_INDEX AS orderIndex");
|
||||||
|
selectMap.put("dmstcd", "t.DMSTCD AS dmstcd");
|
||||||
|
selectMap.put("rstcd", "t.RSTCD AS rstcd");
|
||||||
|
selectMap.put("ennm", "eng.ENNM AS ennm");
|
||||||
|
selectMap.put("baseId", "eng.BASE_ID AS baseId");
|
||||||
|
selectMap.put("baseName", "hb.BASENAME AS baseName");
|
||||||
|
selectMap.put("hbrvcd", "eng.HBRVCD AS hbrvcd");
|
||||||
|
selectMap.put("hbrvcdName", "hbrv.HBRVNM AS hbrvcdName");
|
||||||
|
selectMap.put("rvcd", "eng.RVCD AS rvcd");
|
||||||
|
selectMap.put("rvcdName", "rv.RVNM AS rvcdName");
|
||||||
|
selectMap.put("addvcd", "eng.ADDVCD AS addvcd");
|
||||||
|
selectMap.put("addvcdName", "addv.ADDVNM AS addvcdName");
|
||||||
|
selectMap.put("fhstcd", "t.FHSTCD AS fhstcd");
|
||||||
|
selectMap.put("ispro", "t.ISPRO AS ispro");
|
||||||
|
selectMap.put("project", "t.PROJECT AS project");
|
||||||
|
selectMap.put("dtfrqcy", "t.DTFRQCY AS dtfrqcy");
|
||||||
|
selectMap.put("remark", "t.REMARK AS remark");
|
||||||
|
selectMap.put("vlsr", "t.VLSR AS vlsr");
|
||||||
|
selectMap.put("vlsrTm", "t.VLSR_TM AS vlsrTm");
|
||||||
|
selectMap.put("recordUser", "t.RECORD_USER AS recordUser");
|
||||||
|
selectMap.put("recordTime", "t.RECORD_TIME AS recordTime");
|
||||||
|
selectMap.put("modifyUser", "t.MODIFY_USER AS modifyUser");
|
||||||
|
selectMap.put("modifyTime", "t.MODIFY_TIME AS modifyTime");
|
||||||
|
selectMap.put("isDeleted", "t.IS_DELETED AS isDeleted");
|
||||||
|
selectMap.put("deleteUser", "t.DELETE_USER AS deleteUser");
|
||||||
|
selectMap.put("deleteTime", "t.DELETE_TIME AS deleteTime");
|
||||||
|
|
||||||
|
if (CollUtil.isEmpty(selectFields)) {
|
||||||
|
return String.join(", ", selectMap.values());
|
||||||
|
}
|
||||||
|
|
||||||
|
List<String> actualColumns = new ArrayList<>();
|
||||||
|
for (String selectField : selectFields) {
|
||||||
|
String column = selectMap.get(selectField);
|
||||||
|
if (StrUtil.isNotBlank(column)) {
|
||||||
|
actualColumns.add(column);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (actualColumns.isEmpty()) {
|
||||||
|
actualColumns.addAll(selectMap.values());
|
||||||
|
}
|
||||||
|
return String.join(", ", actualColumns);
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<Map<String, Object>> toMsstbprptLegacyGroups(List<Map<String, Object>> rows, String groupField) {
|
||||||
|
List<Map<String, Object>> result = new ArrayList<>();
|
||||||
|
if (rows == null) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
String upperField = groupField == null ? "DTINTYPE" : groupField.toUpperCase();
|
||||||
|
String countField = "COUNT_" + upperField;
|
||||||
|
String aggregateKey = "count_" + groupField;
|
||||||
|
for (Map<String, Object> row : rows) {
|
||||||
|
Object key = row.get(upperField);
|
||||||
|
if (key == null) {
|
||||||
|
key = row.get(groupField);
|
||||||
|
}
|
||||||
|
Object countValue = row.get(countField);
|
||||||
|
if (countValue == null) {
|
||||||
|
countValue = row.get("count_" + upperField);
|
||||||
|
}
|
||||||
|
long count = 0L;
|
||||||
|
if (countValue instanceof Number number) {
|
||||||
|
count = number.longValue();
|
||||||
|
} else if (countValue != null) {
|
||||||
|
count = Long.parseLong(String.valueOf(countValue));
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, Object> item = new LinkedHashMap<>();
|
||||||
|
item.put("key", key);
|
||||||
|
item.put("keyName", null);
|
||||||
|
item.put("keyExt", new HashMap<>());
|
||||||
|
|
||||||
|
Map<String, Object> detail = new LinkedHashMap<>();
|
||||||
|
detail.put(upperField, key);
|
||||||
|
detail.put(countField, count);
|
||||||
|
item.put("items", List.of(detail));
|
||||||
|
item.put("count", count);
|
||||||
|
item.put("summary", new Object[0]);
|
||||||
|
|
||||||
|
Map<String, Object> aggregates = new LinkedHashMap<>();
|
||||||
|
aggregates.put(aggregateKey, count);
|
||||||
|
item.put("aggregates", aggregates);
|
||||||
|
result.add(item);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String buildMsstbprptDetailOrderBySql(List<DataSourceRequest.SortDescriptor> sortList) {
|
||||||
|
if (CollUtil.isEmpty(sortList)) {
|
||||||
|
return " ORDER BY eng.BASE_ID ASC NULLS LAST, eng.HBRVCD ASC NULLS LAST, eng.ORDER_INDEX ASC NULLS LAST, t.ORDER_INDEX ASC NULLS LAST, t.STCD ASC ";
|
||||||
|
}
|
||||||
|
List<String> orderColumns = new ArrayList<>();
|
||||||
|
for (DataSourceRequest.SortDescriptor sortDescriptor : sortList) {
|
||||||
|
if (sortDescriptor == null || StrUtil.isBlank(sortDescriptor.getField())) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
String column = switch (sortDescriptor.getField()) {
|
||||||
|
case "stcd" -> "t.STCD";
|
||||||
|
case "stnm" -> "t.STNM";
|
||||||
|
case "tm" -> "t.TM";
|
||||||
|
case "sttp", "sttpCode" -> "t.STTP";
|
||||||
|
case "jcdt" -> "t.JCDT";
|
||||||
|
case "rstcd" -> "t.RSTCD";
|
||||||
|
case "ennm" -> "eng.ENNM";
|
||||||
|
case "baseId" -> "eng.BASE_ID";
|
||||||
|
case "baseName" -> "hb.BASENAME";
|
||||||
|
case "hbrvcd" -> "eng.HBRVCD";
|
||||||
|
case "rvcd" -> "eng.RVCD";
|
||||||
|
case "fhstcd" -> "t.FHSTCD";
|
||||||
|
case "mway" -> "t.MWAY";
|
||||||
|
case "dtin" -> "t.DTIN";
|
||||||
|
case "dtinType" -> "t.DTIN_TYPE";
|
||||||
|
case "orderIndex" -> "t.ORDER_INDEX";
|
||||||
|
default -> null;
|
||||||
|
};
|
||||||
|
if (StrUtil.isBlank(column)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
String dir = "desc".equalsIgnoreCase(sortDescriptor.getDir()) || "des".equalsIgnoreCase(sortDescriptor.getDir()) ? "DESC" : "ASC";
|
||||||
|
orderColumns.add(column + " " + dir + " NULLS LAST");
|
||||||
|
}
|
||||||
|
if (orderColumns.isEmpty()) {
|
||||||
|
return " ORDER BY eng.BASE_ID ASC NULLS LAST, eng.HBRVCD ASC NULLS LAST, eng.ORDER_INDEX ASC NULLS LAST, t.ORDER_INDEX ASC NULLS LAST, t.STCD ASC ";
|
||||||
|
}
|
||||||
|
return " ORDER BY " + String.join(", ", orderColumns);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user