feat: 查询视频监控运行数据
This commit is contained in:
parent
368bffb61c
commit
ef1a76223d
@ -34,4 +34,10 @@ public class VdMonitorController {
|
|||||||
public ResponseResult getStcdInfo(@RequestParam String stcd) {
|
public ResponseResult getStcdInfo(@RequestParam String stcd) {
|
||||||
return ResponseResult.successData(vdMonitorService.getStcdInfo(stcd));
|
return ResponseResult.successData(vdMonitorService.getStcdInfo(stcd));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping("/runData/GetKendoListCust")
|
||||||
|
@Operation(summary = "查询视频监控运行数据")
|
||||||
|
public ResponseResult getRunDataKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
|
||||||
|
return ResponseResult.successData(vdMonitorService.getRunDataKendoListCust(dataSourceRequest));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,97 @@
|
|||||||
|
package com.yfd.platform.qgc_env.vd.entity.vo;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Schema(description = "视频监控运行数据")
|
||||||
|
public class VdRunDataVo implements Serializable {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
@Schema(description = "视频站名称")
|
||||||
|
private String stnm;
|
||||||
|
|
||||||
|
@Schema(description = "视频监控点编码")
|
||||||
|
private String stcd;
|
||||||
|
|
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||||
|
@Schema(description = "时间")
|
||||||
|
private Date tm;
|
||||||
|
|
||||||
|
@Schema(description = "显示名称")
|
||||||
|
private String flnm;
|
||||||
|
|
||||||
|
@Schema(description = "图片路径")
|
||||||
|
private String imgPath;
|
||||||
|
|
||||||
|
@Schema(description = "视频路径")
|
||||||
|
private String flpth;
|
||||||
|
|
||||||
|
@Schema(description = "设备视频信息")
|
||||||
|
private String deviceinfo;
|
||||||
|
|
||||||
|
@Schema(description = "设备状态描述")
|
||||||
|
private String describe;
|
||||||
|
|
||||||
|
@Schema(description = "附件ID")
|
||||||
|
private String fid;
|
||||||
|
|
||||||
|
@Schema(description = "缩略图")
|
||||||
|
private String thumbnail;
|
||||||
|
|
||||||
|
@Schema(description = "电站编码")
|
||||||
|
private String rstcd;
|
||||||
|
|
||||||
|
@Schema(description = "电站名称")
|
||||||
|
private String ennm;
|
||||||
|
|
||||||
|
@Schema(description = "栖息地编码")
|
||||||
|
private String fhstcd;
|
||||||
|
|
||||||
|
@Schema(description = "栖息地名称")
|
||||||
|
private String fhstnm;
|
||||||
|
|
||||||
|
@Schema(description = "测站编码")
|
||||||
|
private String stCode;
|
||||||
|
|
||||||
|
@Schema(description = "测站名称")
|
||||||
|
private String stName;
|
||||||
|
|
||||||
|
@Schema(description = "基地编码")
|
||||||
|
private String baseId;
|
||||||
|
|
||||||
|
@Schema(description = "基地名称")
|
||||||
|
private String baseName;
|
||||||
|
|
||||||
|
@Schema(description = "类型编码")
|
||||||
|
private String sttpCode;
|
||||||
|
|
||||||
|
@Schema(description = "类型名称")
|
||||||
|
private String sttpName;
|
||||||
|
|
||||||
|
@Schema(description = "标题名称")
|
||||||
|
private String titleName;
|
||||||
|
|
||||||
|
@Schema(description = "基地排序")
|
||||||
|
private Integer baseStepSort;
|
||||||
|
|
||||||
|
@Schema(description = "流域排序")
|
||||||
|
private Integer rvcdStepSort;
|
||||||
|
|
||||||
|
@Schema(description = "电站排序")
|
||||||
|
private Integer rstcdStepSort;
|
||||||
|
|
||||||
|
@Schema(description = "站点排序")
|
||||||
|
private Integer siteStepSort;
|
||||||
|
|
||||||
|
@Schema(description = "基地流域编码")
|
||||||
|
private String hbrvcd;
|
||||||
|
|
||||||
|
@Schema(description = "基地流域名称")
|
||||||
|
private String hbrvcdName;
|
||||||
|
}
|
||||||
@ -2,6 +2,7 @@ package com.yfd.platform.qgc_env.vd.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.vd.entity.vo.VdRunDataVo;
|
||||||
import com.yfd.platform.qgc_env.vd.entity.vo.VdVmsstbprptVo;
|
import com.yfd.platform.qgc_env.vd.entity.vo.VdVmsstbprptVo;
|
||||||
|
|
||||||
public interface VdMonitorService {
|
public interface VdMonitorService {
|
||||||
@ -9,4 +10,6 @@ public interface VdMonitorService {
|
|||||||
DataSourceResult<VdVmsstbprptVo> getVmsstbprptList(DataSourceRequest dataSourceRequest);
|
DataSourceResult<VdVmsstbprptVo> getVmsstbprptList(DataSourceRequest dataSourceRequest);
|
||||||
|
|
||||||
VdVmsstbprptVo getStcdInfo(String stcd);
|
VdVmsstbprptVo getStcdInfo(String stcd);
|
||||||
|
|
||||||
|
DataSourceResult<VdRunDataVo> getRunDataKendoListCust(DataSourceRequest dataSourceRequest);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -9,6 +9,7 @@ import com.yfd.platform.common.DataSourceResult;
|
|||||||
import com.yfd.platform.common.GroupHelper;
|
import com.yfd.platform.common.GroupHelper;
|
||||||
import com.yfd.platform.common.GroupingInfo;
|
import com.yfd.platform.common.GroupingInfo;
|
||||||
import com.yfd.platform.common.MicroservicDynamicSQLMapper;
|
import com.yfd.platform.common.MicroservicDynamicSQLMapper;
|
||||||
|
import com.yfd.platform.qgc_env.vd.entity.vo.VdRunDataVo;
|
||||||
import com.yfd.platform.qgc_env.vd.entity.vo.VdVmsstbprptVo;
|
import com.yfd.platform.qgc_env.vd.entity.vo.VdVmsstbprptVo;
|
||||||
import com.yfd.platform.qgc_env.vd.service.VdMonitorService;
|
import com.yfd.platform.qgc_env.vd.service.VdMonitorService;
|
||||||
import com.yfd.platform.utils.QgcQueryWrapperUtil;
|
import com.yfd.platform.utils.QgcQueryWrapperUtil;
|
||||||
@ -18,6 +19,7 @@ import org.springframework.stereotype.Service;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@ -101,6 +103,15 @@ public class VdMonitorServiceImpl implements VdMonitorService {
|
|||||||
return list.get(0);
|
return list.get(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DataSourceResult<VdRunDataVo> getRunDataKendoListCust(DataSourceRequest dataSourceRequest) {
|
||||||
|
DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest();
|
||||||
|
if (CollUtil.isEmpty(dataSourceRequest == null ? null : dataSourceRequest.getGroup())) {
|
||||||
|
return queryRunDataDetailList(dataSourceRequest, loadOptions);
|
||||||
|
}
|
||||||
|
return queryRunDataGroupList(dataSourceRequest, loadOptions);
|
||||||
|
}
|
||||||
|
|
||||||
private DataSourceResult<VdVmsstbprptVo> buildGroupedResult(DataSourceRequest dataSourceRequest,
|
private DataSourceResult<VdVmsstbprptVo> buildGroupedResult(DataSourceRequest dataSourceRequest,
|
||||||
GroupingInfo[] groups,
|
GroupingInfo[] groups,
|
||||||
String filterSql,
|
String filterSql,
|
||||||
@ -194,6 +205,101 @@ public class VdMonitorServiceImpl implements VdMonitorService {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private DataSourceResult<VdRunDataVo> queryRunDataDetailList(DataSourceRequest dataSourceRequest,
|
||||||
|
DataSourceLoadOptionsBase loadOptions) {
|
||||||
|
StringBuilder sql = new StringBuilder();
|
||||||
|
sql.append("SELECT ")
|
||||||
|
.append(buildRunDataSelectSql(dataSourceRequest == null ? null : dataSourceRequest.getSelect()))
|
||||||
|
.append(" FROM (")
|
||||||
|
.append(buildRunDataCoreSql())
|
||||||
|
.append(") t WHERE 1 = 1 ");
|
||||||
|
|
||||||
|
Map<String, Object> paramMap = new HashMap<>();
|
||||||
|
String filterSql = buildRunDataFilterCondition(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), paramMap, new int[]{0});
|
||||||
|
if (StrUtil.isNotBlank(filterSql)) {
|
||||||
|
sql.append(" AND ").append(filterSql).append(" ");
|
||||||
|
}
|
||||||
|
sql.append(buildRunDataOrderBySql(dataSourceRequest == null ? null : dataSourceRequest.getSort()));
|
||||||
|
|
||||||
|
Page<?> page = loadOptions == null ? null : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake());
|
||||||
|
List<VdRunDataVo> list = microservicDynamicSQLMapper.pageAllListWithResultType(page, sql.toString(), paramMap, VdRunDataVo.class);
|
||||||
|
DataSourceResult<VdRunDataVo> result = new DataSourceResult<>();
|
||||||
|
result.setData(list);
|
||||||
|
result.setTotal(page != null ? page.getTotal() : list.size());
|
||||||
|
result.setAggregates(new HashMap<>());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private DataSourceResult<VdRunDataVo> queryRunDataGroupList(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 || StrUtil.isBlank(descriptor.getField())) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
String column = mapRunDataColumn(descriptor.getField());
|
||||||
|
if (StrUtil.isBlank(column)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
selectItems.add(column + " AS " + descriptor.getField());
|
||||||
|
selectItems.add("COUNT(*) AS count_" + descriptor.getField());
|
||||||
|
if (CollUtil.isNotEmpty(descriptor.getAggregates())) {
|
||||||
|
for (DataSourceRequest.AggregateDescriptor aggregate : descriptor.getAggregates()) {
|
||||||
|
String aggregateColumn = mapRunDataColumn(aggregate.getField());
|
||||||
|
if (StrUtil.isBlank(aggregateColumn) || StrUtil.isBlank(aggregate.getAggregate())) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
selectItems.add(buildRunDataAggregateSql(aggregate.getAggregate(), aggregateColumn, aggregate.getField()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (selectItems.isEmpty()) {
|
||||||
|
selectItems.add("t.sttpCode AS sttpCode");
|
||||||
|
selectItems.add("COUNT(*) AS count_sttpCode");
|
||||||
|
}
|
||||||
|
|
||||||
|
StringBuilder sql = new StringBuilder();
|
||||||
|
sql.append("SELECT ")
|
||||||
|
.append(String.join(", ", selectItems))
|
||||||
|
.append(" FROM (")
|
||||||
|
.append(buildRunDataCoreSql())
|
||||||
|
.append(") t WHERE 1 = 1 ");
|
||||||
|
|
||||||
|
Map<String, Object> paramMap = new HashMap<>();
|
||||||
|
String filterSql = buildRunDataFilterCondition(dataSourceRequest == null ? null : dataSourceRequest.getFilter(), paramMap, new int[]{0});
|
||||||
|
if (StrUtil.isNotBlank(filterSql)) {
|
||||||
|
sql.append(" AND ").append(filterSql).append(" ");
|
||||||
|
}
|
||||||
|
|
||||||
|
List<String> groupByColumns = new ArrayList<>();
|
||||||
|
for (DataSourceRequest.GroupDescriptor descriptor : groups) {
|
||||||
|
if (descriptor == null || StrUtil.isBlank(descriptor.getField())) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
String column = mapRunDataColumn(descriptor.getField());
|
||||||
|
if (StrUtil.isNotBlank(column)) {
|
||||||
|
groupByColumns.add(column);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!groupByColumns.isEmpty()) {
|
||||||
|
sql.append(" GROUP BY ").append(String.join(", ", groupByColumns));
|
||||||
|
sql.append(buildRunDataGroupOrderBySql(groups));
|
||||||
|
}
|
||||||
|
|
||||||
|
List<Map<String, Object>> rows = microservicDynamicSQLMapper.pageAllList(null, sql.toString(), paramMap);
|
||||||
|
DataSourceResult<VdRunDataVo> result = new DataSourceResult<>();
|
||||||
|
if (Boolean.TRUE.equals(dataSourceRequest.getGroupResultFlat())) {
|
||||||
|
result.setData((List<VdRunDataVo>) (List<?>) new GroupHelper().faltGroup(rows, Arrays.asList(groupInfos)));
|
||||||
|
} else {
|
||||||
|
result.setData((List<VdRunDataVo>) (List<?>) new GroupHelper().group(rows, Arrays.asList(groupInfos)));
|
||||||
|
}
|
||||||
|
result.setTotal((long) rows.size());
|
||||||
|
result.setAggregates(new HashMap<>());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
private String buildVmsstbprptViewSql() {
|
private String buildVmsstbprptViewSql() {
|
||||||
return "SELECT " +
|
return "SELECT " +
|
||||||
"src.STCD AS stcd, " +
|
"src.STCD AS stcd, " +
|
||||||
@ -231,9 +337,18 @@ public class VdMonitorServiceImpl implements VdMonitorService {
|
|||||||
"NVL(src.ORDER_INDEX, 999999) AS siteStepSort, " +
|
"NVL(src.ORDER_INDEX, 999999) AS siteStepSort, " +
|
||||||
"src.SOURCE_TABLE AS sourceTable " +
|
"src.SOURCE_TABLE AS sourceTable " +
|
||||||
"FROM (" +
|
"FROM (" +
|
||||||
"SELECT vd.STCD, vd.STNM, vd.MNTP, vd.STTP, vd.LGTD, vd.LTTD, vd.ELEV, vd.STLC, " +
|
buildVdDeviceBaseSql() +
|
||||||
|
") src " +
|
||||||
|
"LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = src.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 " +
|
||||||
|
"LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = NVL(eng.BASE_ID, src.BASE_ID) AND NVL(hb.IS_DELETED, 0) = 0 " +
|
||||||
|
"LEFT JOIN SD_STTP_B sttp ON sttp.STTP_CODE = src.STTP " +
|
||||||
|
" AND NVL(sttp.IS_DELETED, 0) = 0 AND NVL(sttp.ENABLED, 1) = 1 ";
|
||||||
|
}
|
||||||
|
|
||||||
|
private String buildVdDeviceBaseSql() {
|
||||||
|
return "SELECT vd.STCD, vd.STNM, vd.MNTP, vd.STTP, vd.LGTD, vd.LTTD, vd.ELEV, vd.STLC, " +
|
||||||
" vd.JCDT, vd.WDDT, vd.BLDSTT_CODE, vd.USFL, vd.DTIN, vd.STINDX, vd.RSTCD, vd.BASE_ID, " +
|
" vd.JCDT, vd.WDDT, vd.BLDSTT_CODE, vd.USFL, vd.DTIN, vd.STINDX, vd.RSTCD, vd.BASE_ID, " +
|
||||||
" vd.HBRVCD, vd.RVCD, vd.ADDVCD, CAST(NULL AS VARCHAR2(3000)) AS INTRODUCE, " +
|
" vd.HBRVCD, vd.RVCD, vd.ADDVCD, vd.CSTCD, vd.FHSTCD, CAST(NULL AS VARCHAR2(3000)) AS INTRODUCE, " +
|
||||||
" CAST(NULL AS VARCHAR2(255)) AS LOGO, CAST(NULL AS VARCHAR2(1000)) AS INFFILE, " +
|
" CAST(NULL AS VARCHAR2(255)) AS LOGO, CAST(NULL AS VARCHAR2(1000)) AS INFFILE, " +
|
||||||
" vd.DTFRQCY, vd.REMARK, vd.VLSR, vd.VLSR_TM, CAST(NULL AS NUMBER(8,0)) AS ORDER_INDEX, " +
|
" vd.DTFRQCY, vd.REMARK, vd.VLSR, vd.VLSR_TM, CAST(NULL AS NUMBER(8,0)) AS ORDER_INDEX, " +
|
||||||
" 'SD_VDINFO_B' AS SOURCE_TABLE " +
|
" 'SD_VDINFO_B' AS SOURCE_TABLE " +
|
||||||
@ -241,15 +356,163 @@ public class VdMonitorServiceImpl implements VdMonitorService {
|
|||||||
"UNION ALL " +
|
"UNION ALL " +
|
||||||
"SELECT sonar.STCD, sonar.STNM, sonar.MNTP, sonar.STTP, sonar.LGTD, sonar.LTTD, sonar.ELEV, sonar.STLC, " +
|
"SELECT sonar.STCD, sonar.STNM, sonar.MNTP, sonar.STTP, sonar.LGTD, sonar.LTTD, sonar.ELEV, sonar.STLC, " +
|
||||||
" sonar.JCDT, sonar.WDDT, sonar.BLDSTT_CODE, sonar.USFL, sonar.DTIN, sonar.STINDX, sonar.RSTCD, sonar.BASE_ID, " +
|
" sonar.JCDT, sonar.WDDT, sonar.BLDSTT_CODE, sonar.USFL, sonar.DTIN, sonar.STINDX, sonar.RSTCD, sonar.BASE_ID, " +
|
||||||
" sonar.HBRVCD, sonar.RVCD, sonar.ADDVCD, sonar.INTRODUCE, sonar.LOGO, sonar.INFFILE, " +
|
" sonar.HBRVCD, sonar.RVCD, sonar.ADDVCD, CAST(NULL AS VARCHAR2(36)) AS CSTCD, CAST(NULL AS VARCHAR2(36)) AS FHSTCD, " +
|
||||||
" sonar.DTFRQCY, sonar.REMARK, sonar.VLSR, sonar.VLSR_TM, sonar.ORDER_INDEX, " +
|
" sonar.INTRODUCE, sonar.LOGO, sonar.INFFILE, sonar.DTFRQCY, sonar.REMARK, sonar.VLSR, sonar.VLSR_TM, sonar.ORDER_INDEX, " +
|
||||||
" 'SD_SONAR_B_H' AS SOURCE_TABLE " +
|
" 'SD_SONAR_B_H' AS SOURCE_TABLE " +
|
||||||
"FROM SD_SONAR_B_H sonar WHERE NVL(sonar.IS_DELETED, 0) = 0 AND sonar.STTP IN ('VD_WVD', 'VD_SN') " +
|
"FROM SD_SONAR_B_H sonar WHERE NVL(sonar.IS_DELETED, 0) = 0 AND sonar.STTP IN ('VD_WVD', 'VD_SN') ";
|
||||||
") src " +
|
}
|
||||||
"LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = src.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 " +
|
private String buildRunDataCoreSql() {
|
||||||
"LEFT JOIN SD_STTP_B sttp ON sttp.STTP_CODE = src.STTP " +
|
return "SELECT " +
|
||||||
" AND NVL(sttp.IS_DELETED, 0) = 0 AND NVL(sttp.ENABLE, 1) = 1 ";
|
"run.ID AS id, " +
|
||||||
|
"run.STCD AS stcd, " +
|
||||||
|
"run.TM AS tm, " +
|
||||||
|
"NVL(run.FLNM, base.STNM || ' ' || TO_CHAR(run.TM, 'yyyy-mm-dd hh24')) AS flnm, " +
|
||||||
|
"run.IMG_PATH AS imgPath, " +
|
||||||
|
"run.FLPTH AS flpth, " +
|
||||||
|
"run.DEVICEINFO AS deviceinfo, " +
|
||||||
|
"run.DESCRIBE AS describe, " +
|
||||||
|
"run.FID AS fid, " +
|
||||||
|
"run.THUMBNAIL AS thumbnail, " +
|
||||||
|
"base.RSTCD AS rstcd, " +
|
||||||
|
"base.STNM AS stnm, " +
|
||||||
|
"eng.ENNM AS ennm, " +
|
||||||
|
"base.FHSTCD AS fhstcd, " +
|
||||||
|
"fh.STNM AS fhstnm, " +
|
||||||
|
"base.CSTCD AS stCode, " +
|
||||||
|
"cst.STNM AS stName, " +
|
||||||
|
"NVL(eng.BASE_ID, base.BASE_ID) AS baseId, " +
|
||||||
|
"hb.BASENAME AS baseName, " +
|
||||||
|
"base.STTP AS sttpCode, " +
|
||||||
|
"sttp.STTP_NAME AS sttpName, " +
|
||||||
|
"base.STNM AS titleName, " +
|
||||||
|
"NVL(hb.ORDER_INDEX, 999999) AS baseStepSort, " +
|
||||||
|
"NVL(hbrv.ORDER_INDEX, 999999) AS rvcdStepSort, " +
|
||||||
|
"NVL(eng.ORDER_INDEX, 999999) AS rstcdStepSort, " +
|
||||||
|
"NVL(base.ORDER_INDEX, 999999) AS siteStepSort, " +
|
||||||
|
"NVL(eng.HBRVCD, base.HBRVCD) AS hbrvcd, " +
|
||||||
|
"hbrv.HBRVNM AS hbrvcdName " +
|
||||||
|
"FROM SD_VDINFO_R run " +
|
||||||
|
"INNER JOIN (" + buildVdDeviceBaseSql() + ") base ON run.STCD = base.STCD " +
|
||||||
|
"LEFT JOIN SD_ENGINFO_B_H eng ON eng.STCD = base.RSTCD AND NVL(eng.IS_DELETED, 0) = 0 " +
|
||||||
|
"LEFT JOIN SD_HYDROBASE hb ON hb.BASEID = NVL(eng.BASE_ID, base.BASE_ID) " +
|
||||||
|
" AND NVL(hb.IS_DELETED, 0) = 0 AND NVL(hb.ENABLED, 1) = 1 " +
|
||||||
|
"LEFT JOIN SD_HBRV_DIC hbrv ON hbrv.HBRVCD = NVL(eng.HBRVCD, base.HBRVCD) " +
|
||||||
|
" AND hbrv.BASEID = NVL(eng.BASE_ID, base.BASE_ID) " +
|
||||||
|
" AND NVL(hbrv.IS_DELETED, 0) = 0 AND NVL(hbrv.ENABLED, 1) = 1 " +
|
||||||
|
"LEFT JOIN SD_FHBT_B_H fh ON fh.STCD = base.FHSTCD AND NVL(fh.IS_DELETED, 0) = 0 " +
|
||||||
|
"LEFT JOIN (" + buildStationBaseSql() + ") cst ON cst.STCD = base.CSTCD " +
|
||||||
|
"LEFT JOIN SD_STTP_B sttp ON sttp.STTP_CODE = base.STTP " +
|
||||||
|
" AND NVL(sttp.IS_DELETED, 0) = 0 AND NVL(sttp.ENABLE, 1) = 1 " +
|
||||||
|
"WHERE NVL(run.IS_DELETED, 0) = 0 ";
|
||||||
|
}
|
||||||
|
|
||||||
|
private String buildStationBaseSql() {
|
||||||
|
return "SELECT river.STCD AS STCD, river.STNM AS STNM FROM SD_RIVER_B_H river WHERE NVL(river.IS_DELETED, 0) = 0 " +
|
||||||
|
"UNION ALL " +
|
||||||
|
"SELECT wt.STCD AS STCD, wt.STNM AS STNM FROM SD_WT_B_H wt WHERE NVL(wt.IS_DELETED, 0) = 0 " +
|
||||||
|
"UNION ALL " +
|
||||||
|
"SELECT wq.STCD AS STCD, wq.STNM AS STNM FROM SD_WQ_B_H wq WHERE NVL(wq.IS_DELETED, 0) = 0 " +
|
||||||
|
"UNION ALL " +
|
||||||
|
"SELECT fh.STCD AS STCD, fh.STNM AS STNM FROM SD_FHBT_B_H fh WHERE NVL(fh.IS_DELETED, 0) = 0 " +
|
||||||
|
"UNION ALL " +
|
||||||
|
"SELECT eng.STCD AS STCD, eng.ENNM AS STNM FROM SD_ENGINFO_B_H eng WHERE NVL(eng.IS_DELETED, 0) = 0 ";
|
||||||
|
}
|
||||||
|
|
||||||
|
private String buildRunDataSelectSql(List<String> selectFields) {
|
||||||
|
Map<String, String> selectMap = new LinkedHashMap<>();
|
||||||
|
selectMap.put("stnm", "t.stnm AS stnm");
|
||||||
|
selectMap.put("stcd", "t.stcd AS stcd");
|
||||||
|
selectMap.put("tm", "t.tm AS tm");
|
||||||
|
selectMap.put("flnm", "t.flnm AS flnm");
|
||||||
|
selectMap.put("imgPath", "t.imgPath AS imgPath");
|
||||||
|
selectMap.put("flpth", "t.flpth AS flpth");
|
||||||
|
selectMap.put("deviceinfo", "t.deviceinfo AS deviceinfo");
|
||||||
|
selectMap.put("describe", "t.describe AS describe");
|
||||||
|
selectMap.put("fid", "t.fid AS fid");
|
||||||
|
selectMap.put("thumbnail", "t.thumbnail AS thumbnail");
|
||||||
|
selectMap.put("rstcd", "t.rstcd AS rstcd");
|
||||||
|
selectMap.put("ennm", "t.ennm AS ennm");
|
||||||
|
selectMap.put("fhstcd", "t.fhstcd AS fhstcd");
|
||||||
|
selectMap.put("fhstnm", "t.fhstnm AS fhstnm");
|
||||||
|
selectMap.put("stCode", "t.stCode AS stCode");
|
||||||
|
selectMap.put("stName", "t.stName AS stName");
|
||||||
|
selectMap.put("baseId", "t.baseId AS baseId");
|
||||||
|
selectMap.put("baseName", "t.baseName AS baseName");
|
||||||
|
selectMap.put("sttpCode", "t.sttpCode AS sttpCode");
|
||||||
|
selectMap.put("sttpName", "t.sttpName AS sttpName");
|
||||||
|
selectMap.put("titleName", "t.titleName AS titleName");
|
||||||
|
selectMap.put("baseStepSort", "t.baseStepSort AS baseStepSort");
|
||||||
|
selectMap.put("rvcdStepSort", "t.rvcdStepSort AS rvcdStepSort");
|
||||||
|
selectMap.put("rstcdStepSort", "t.rstcdStepSort AS rstcdStepSort");
|
||||||
|
selectMap.put("siteStepSort", "t.siteStepSort AS siteStepSort");
|
||||||
|
selectMap.put("hbrvcd", "t.hbrvcd AS hbrvcd");
|
||||||
|
selectMap.put("hbrvcdName", "t.hbrvcdName AS hbrvcdName");
|
||||||
|
|
||||||
|
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 String buildRunDataOrderBySql(List<DataSourceRequest.SortDescriptor> sortList) {
|
||||||
|
if (CollUtil.isEmpty(sortList)) {
|
||||||
|
return " ORDER BY t.baseStepSort ASC, t.rvcdStepSort ASC, t.rstcdStepSort ASC, t.siteStepSort ASC, t.stcd ASC, t.tm DESC";
|
||||||
|
}
|
||||||
|
List<String> orderItems = new ArrayList<>();
|
||||||
|
for (DataSourceRequest.SortDescriptor sort : sortList) {
|
||||||
|
if (sort == null || StrUtil.isBlank(sort.getField())) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
String column = mapRunDataColumn(sort.getField());
|
||||||
|
if (StrUtil.isBlank(column)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
String direction = "desc".equalsIgnoreCase(sort.getDir()) || "des".equalsIgnoreCase(sort.getDir()) ? "DESC" : "ASC";
|
||||||
|
orderItems.add(column + " " + direction + " NULLS LAST");
|
||||||
|
}
|
||||||
|
if (orderItems.isEmpty()) {
|
||||||
|
return " ORDER BY t.baseStepSort ASC, t.rvcdStepSort ASC, t.rstcdStepSort ASC, t.siteStepSort ASC, t.stcd ASC, t.tm DESC";
|
||||||
|
}
|
||||||
|
return " ORDER BY " + String.join(", ", orderItems);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String buildRunDataGroupOrderBySql(List<DataSourceRequest.GroupDescriptor> groups) {
|
||||||
|
if (CollUtil.isEmpty(groups)) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
List<String> orders = new ArrayList<>();
|
||||||
|
for (DataSourceRequest.GroupDescriptor descriptor : groups) {
|
||||||
|
if (descriptor == null || StrUtil.isBlank(descriptor.getField())) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
String column = mapRunDataColumn(descriptor.getField());
|
||||||
|
if (StrUtil.isBlank(column)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
String direction = "desc".equalsIgnoreCase(descriptor.getDir()) || "des".equalsIgnoreCase(descriptor.getDir()) ? "DESC" : "ASC";
|
||||||
|
orders.add(column + " " + direction);
|
||||||
|
}
|
||||||
|
return orders.isEmpty() ? "" : " ORDER BY " + String.join(", ", orders);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String buildRunDataAggregateSql(String aggregate, String column, String field) {
|
||||||
|
String normalized = aggregate == null ? "" : aggregate.toLowerCase();
|
||||||
|
return switch (normalized) {
|
||||||
|
case "sum", "min", "max", "avg", "count" ->
|
||||||
|
normalized.toUpperCase() + "(" + column + ") AS " + normalized + "_" + field;
|
||||||
|
default -> null;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
private String buildFilterCondition(DataSourceRequest.FilterDescriptor filter,
|
private String buildFilterCondition(DataSourceRequest.FilterDescriptor filter,
|
||||||
@ -278,6 +541,32 @@ public class VdMonitorServiceImpl implements VdMonitorService {
|
|||||||
return String.join(logic, conditions);
|
return String.join(logic, conditions);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String buildRunDataFilterCondition(DataSourceRequest.FilterDescriptor filter,
|
||||||
|
Map<String, Object> paramMap,
|
||||||
|
int[] indexHolder) {
|
||||||
|
if (filter == null) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
if (StrUtil.isNotBlank(filter.getField())) {
|
||||||
|
return buildRunDataLeafCondition(filter, paramMap, indexHolder);
|
||||||
|
}
|
||||||
|
if (CollUtil.isEmpty(filter.getFilters())) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
List<String> conditions = new ArrayList<>();
|
||||||
|
for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) {
|
||||||
|
String childSql = buildRunDataFilterCondition(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 buildLeafCondition(DataSourceRequest.FilterDescriptor filter,
|
private String buildLeafCondition(DataSourceRequest.FilterDescriptor filter,
|
||||||
Map<String, Object> paramMap,
|
Map<String, Object> paramMap,
|
||||||
int[] indexHolder) {
|
int[] indexHolder) {
|
||||||
@ -285,6 +574,33 @@ public class VdMonitorServiceImpl implements VdMonitorService {
|
|||||||
if (StrUtil.isBlank(column)) {
|
if (StrUtil.isBlank(column)) {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
return buildSimpleCondition(column, "vdParam", filter, paramMap, indexHolder);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String buildRunDataLeafCondition(DataSourceRequest.FilterDescriptor filter,
|
||||||
|
Map<String, Object> paramMap,
|
||||||
|
int[] indexHolder) {
|
||||||
|
String column = mapRunDataColumn(filter.getField());
|
||||||
|
if (StrUtil.isBlank(column)) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
return buildSimpleCondition(column, "vdRunParam", filter, paramMap, indexHolder, isRunDataDateField(filter));
|
||||||
|
}
|
||||||
|
|
||||||
|
private String buildSimpleCondition(String column,
|
||||||
|
String paramPrefix,
|
||||||
|
DataSourceRequest.FilterDescriptor filter,
|
||||||
|
Map<String, Object> paramMap,
|
||||||
|
int[] indexHolder) {
|
||||||
|
return buildSimpleCondition(column, paramPrefix, filter, paramMap, indexHolder, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String buildSimpleCondition(String column,
|
||||||
|
String paramPrefix,
|
||||||
|
DataSourceRequest.FilterDescriptor filter,
|
||||||
|
Map<String, Object> paramMap,
|
||||||
|
int[] indexHolder,
|
||||||
|
boolean dateField) {
|
||||||
String operator = StrUtil.blankToDefault(filter.getOperator(), "eq").toLowerCase();
|
String operator = StrUtil.blankToDefault(filter.getOperator(), "eq").toLowerCase();
|
||||||
Object value = filter.getValue();
|
Object value = filter.getValue();
|
||||||
if ("isnull".equals(operator)) {
|
if ("isnull".equals(operator)) {
|
||||||
@ -300,7 +616,7 @@ public class VdMonitorServiceImpl implements VdMonitorService {
|
|||||||
}
|
}
|
||||||
List<String> placeholders = new ArrayList<>();
|
List<String> placeholders = new ArrayList<>();
|
||||||
for (Object item : values) {
|
for (Object item : values) {
|
||||||
String paramKey = "vdParam" + indexHolder[0]++;
|
String paramKey = paramPrefix + indexHolder[0]++;
|
||||||
paramMap.put(paramKey, item);
|
paramMap.put(paramKey, item);
|
||||||
placeholders.add("#{map." + paramKey + "}");
|
placeholders.add("#{map." + paramKey + "}");
|
||||||
}
|
}
|
||||||
@ -309,15 +625,16 @@ public class VdMonitorServiceImpl implements VdMonitorService {
|
|||||||
if (value == null) {
|
if (value == null) {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
String paramKey = "vdParam" + indexHolder[0]++;
|
String paramKey = paramPrefix + indexHolder[0]++;
|
||||||
|
String valueExpr = buildValueExpr(paramKey, dateField, value);
|
||||||
return switch (operator) {
|
return switch (operator) {
|
||||||
case "eq" -> {
|
case "eq" -> {
|
||||||
paramMap.put(paramKey, value);
|
paramMap.put(paramKey, value);
|
||||||
yield column + " = #{map." + paramKey + "}";
|
yield column + " = " + valueExpr;
|
||||||
}
|
}
|
||||||
case "neq" -> {
|
case "neq" -> {
|
||||||
paramMap.put(paramKey, value);
|
paramMap.put(paramKey, value);
|
||||||
yield column + " <> #{map." + paramKey + "}";
|
yield column + " <> " + valueExpr;
|
||||||
}
|
}
|
||||||
case "contains" -> {
|
case "contains" -> {
|
||||||
paramMap.put(paramKey, "%" + value + "%");
|
paramMap.put(paramKey, "%" + value + "%");
|
||||||
@ -331,10 +648,47 @@ public class VdMonitorServiceImpl implements VdMonitorService {
|
|||||||
paramMap.put(paramKey, "%" + value);
|
paramMap.put(paramKey, "%" + value);
|
||||||
yield column + " LIKE #{map." + paramKey + "}";
|
yield column + " LIKE #{map." + paramKey + "}";
|
||||||
}
|
}
|
||||||
|
case "gt" -> {
|
||||||
|
paramMap.put(paramKey, value);
|
||||||
|
yield column + " > " + valueExpr;
|
||||||
|
}
|
||||||
|
case "gte" -> {
|
||||||
|
paramMap.put(paramKey, value);
|
||||||
|
yield column + " >= " + valueExpr;
|
||||||
|
}
|
||||||
|
case "lt" -> {
|
||||||
|
paramMap.put(paramKey, value);
|
||||||
|
yield column + " < " + valueExpr;
|
||||||
|
}
|
||||||
|
case "lte" -> {
|
||||||
|
paramMap.put(paramKey, value);
|
||||||
|
yield column + " <= " + valueExpr;
|
||||||
|
}
|
||||||
default -> "";
|
default -> "";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean isRunDataDateField(DataSourceRequest.FilterDescriptor filter) {
|
||||||
|
if (filter == null || StrUtil.isBlank(filter.getField())) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if ("tm".equalsIgnoreCase(filter.getField())) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return "date".equalsIgnoreCase(filter.getDataType());
|
||||||
|
}
|
||||||
|
|
||||||
|
private String buildValueExpr(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 List<Object> normalizeValues(Object value) {
|
private List<Object> normalizeValues(Object value) {
|
||||||
List<Object> values = new ArrayList<>();
|
List<Object> values = new ArrayList<>();
|
||||||
if (value instanceof List<?> list) {
|
if (value instanceof List<?> list) {
|
||||||
@ -384,6 +738,43 @@ public class VdMonitorServiceImpl implements VdMonitorService {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String mapRunDataColumn(String field) {
|
||||||
|
if (StrUtil.isBlank(field)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return switch (field) {
|
||||||
|
case "id" -> "t.id";
|
||||||
|
case "stnm" -> "t.stnm";
|
||||||
|
case "stcd" -> "t.stcd";
|
||||||
|
case "tm" -> "t.tm";
|
||||||
|
case "flnm" -> "t.flnm";
|
||||||
|
case "imgPath" -> "t.imgPath";
|
||||||
|
case "flpth" -> "t.flpth";
|
||||||
|
case "deviceinfo" -> "t.deviceinfo";
|
||||||
|
case "describe" -> "t.describe";
|
||||||
|
case "fid" -> "t.fid";
|
||||||
|
case "thumbnail" -> "t.thumbnail";
|
||||||
|
case "rstcd" -> "t.rstcd";
|
||||||
|
case "ennm" -> "t.ennm";
|
||||||
|
case "fhstcd" -> "t.fhstcd";
|
||||||
|
case "fhstnm" -> "t.fhstnm";
|
||||||
|
case "stCode" -> "t.stCode";
|
||||||
|
case "stName" -> "t.stName";
|
||||||
|
case "baseId" -> "t.baseId";
|
||||||
|
case "baseName" -> "t.baseName";
|
||||||
|
case "sttpCode" -> "t.sttpCode";
|
||||||
|
case "sttpName" -> "t.sttpName";
|
||||||
|
case "titleName" -> "t.titleName";
|
||||||
|
case "baseStepSort" -> "t.baseStepSort";
|
||||||
|
case "rvcdStepSort" -> "t.rvcdStepSort";
|
||||||
|
case "rstcdStepSort" -> "t.rstcdStepSort";
|
||||||
|
case "siteStepSort" -> "t.siteStepSort";
|
||||||
|
case "hbrvcd" -> "t.hbrvcd";
|
||||||
|
case "hbrvcdName" -> "t.hbrvcdName";
|
||||||
|
default -> null;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
private String buildOrderBySql(List<DataSourceRequest.GroupDescriptor> groups) {
|
private String buildOrderBySql(List<DataSourceRequest.GroupDescriptor> groups) {
|
||||||
if (CollUtil.isEmpty(groups)) {
|
if (CollUtil.isEmpty(groups)) {
|
||||||
return " ORDER BY t.sttpCode ASC";
|
return " ORDER BY t.sttpCode ASC";
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user