feat: 获取监测点水温变化默认有数据的断面

This commit is contained in:
tangwei 2026-08-10 14:15:31 +08:00
parent 8a561d9376
commit 9d1da55f93
5 changed files with 192 additions and 22 deletions

View File

@ -4085,11 +4085,17 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl<SdEngInfoBHMapper, SdEng
}
// 从请求 filter 中提取 STTP 过滤条件用于限定站类范围
List<String> sttpCodes = extractSttpCodesFromRequest(dataSourceRequest);
// List<String> sttpCodes = extractSttpCodesFromRequest(dataSourceRequest);
DataSourceLoadOptionsBase loadOptions = dataSourceRequest.toDevRequest();
String sttpCode = loadOptions == null ? null : QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "sttpCode");
if(StrUtil.isBlank(sttpCode)){
result.setData(new ArrayList<>());
result.setTotal(0L);
return result;
}
// 查询 V_MS_STBPRP_T 视图
List<com.yfd.platform.qgc_base.domain.vo.StcdItemVo> allItems =
vMsStbprpTMapper.selectBySttpCodes(sttpCodes);
List<StcdItemVo> allItems =
vMsStbprpTMapper.selectBySttpCodes(List.of(sttpCode));
if (CollUtil.isEmpty(allItems)) {
result.setData(new ArrayList<>());
@ -4142,7 +4148,7 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl<SdEngInfoBHMapper, SdEng
}
// 取第一个测站的排序和基地信息
StcdItemVo first = items.get(0);
StcdItemVo first = items.getFirst();
node.setSort(first.getOrderIndex());
node.setBaseId(first.getBaseId());
node.setBaseName(first.getBaseName());

View File

@ -333,4 +333,10 @@ public class SdWTMonitorController {
public ResponseResult getEngTempPointListKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
return ResponseResult.successData(sdWtMonitorService.getEngTempPointListKendoListCust(dataSourceRequest));
}
@PostMapping("/wtrv/default/stcd")
@Operation(summary = "获取监测点水温变化默认有数据的断面")
public ResponseResult getWtrvDefaultStcd(@RequestBody DataSourceRequest dataSourceRequest) {
return ResponseResult.successData(sdWtMonitorService.getDefaultStcd(dataSourceRequest));
}
}

View File

@ -0,0 +1,21 @@
package com.yfd.platform.qgc_env.wt.entity.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
* 河道水温默认有数据的断面 返回 VO
*/
@Data
@Schema(description = "河道水温默认有数据的断面")
public class WtrvDefaultStcdVo {
@Schema(description = "测站编码")
private String stcd;
@Schema(description = "测站名称")
private String stnm;
@Schema(description = "排序")
private Integer orderIndex;
}

View File

@ -57,4 +57,9 @@ public interface SdWtMonitorService {
DataSourceResult<DwSlowFacilityMapVO> getFacilityPointKendoListCust(DataSourceRequest dataSourceRequest);
DataSourceResult<WaterTempMapVO> getEngTempPointListKendoListCust(DataSourceRequest dataSourceRequest);
/**
* 获取监测点水温变化默认有数据的断面
*/
DataSourceResult getDefaultStcd(DataSourceRequest dataSourceRequest);
}

View File

@ -7,23 +7,7 @@ import com.yfd.platform.common.*;
import com.yfd.platform.common.exception.BizException;
import com.yfd.platform.qgc_base.domain.vo.DataScopeApplyResult;
import com.yfd.platform.qgc_base.service.IDataScopeFilterService;
import com.yfd.platform.qgc_env.wt.entity.vo.DfltkwFacilityCountVo;
import com.yfd.platform.qgc_env.wt.entity.vo.FishSpawnVo;
import com.yfd.platform.qgc_env.wt.entity.vo.RstcdTreeInfoVo;
import com.yfd.platform.qgc_env.wt.entity.vo.SdMonthDetailVO;
import com.yfd.platform.qgc_env.wt.entity.vo.SdYearDetailVO;
import com.yfd.platform.qgc_env.wt.entity.vo.SdWtBaseInfoVO;
import com.yfd.platform.qgc_env.wt.entity.vo.SdWtMonitorCountVO;
import com.yfd.platform.qgc_env.wt.entity.vo.SttpInfoVo;
import com.yfd.platform.qgc_env.wt.entity.vo.WbsbVo;
import com.yfd.platform.qgc_env.wt.entity.vo.WtBaseInfoVo;
import com.yfd.platform.qgc_env.wt.entity.vo.WtFishVo;
import com.yfd.platform.qgc_env.wt.entity.vo.WtTreeStcdVo;
import com.yfd.platform.qgc_env.wt.entity.vo.WtrvAmendResultVo;
import com.yfd.platform.qgc_env.wt.entity.vo.WtrvAmendSaveVo;
import com.yfd.platform.qgc_env.wt.entity.vo.WtrvVo;
import com.yfd.platform.qgc_env.wt.entity.vo.DwSlowFacilityMapVO;
import com.yfd.platform.qgc_env.wt.entity.vo.WaterTempMapVO;
import com.yfd.platform.qgc_env.wt.entity.vo.*;
import com.yfd.platform.qgc_env.wt.mapper.SdWtMonitorMapper;
import com.yfd.platform.qgc_env.wt.utils.SiteAvoidanceUtils;
import com.yfd.platform.qgc_env.wt.service.SdWtMonitorService;
@ -3114,4 +3098,152 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService {
};
}
@Override
public DataSourceResult getDefaultStcd(DataSourceRequest dataSourceRequest) {
DataSourceResult result = new DataSourceResult();
result.setAggregates(new HashMap<>());
if (dataSourceRequest == null) {
result.setData(new ArrayList<>());
result.setTotal(0L);
return result;
}
// 解析请求中的过滤参数
Map<String, Object> sqlWhereMap = new HashMap<>();
DataSourceRequest.FilterDescriptor filter = dataSourceRequest.getFilter();
if (filter != null) {
parseDefaultStcdFilter(filter, sqlWhereMap);
}
Object startTime = sqlWhereMap.get("tm");
Object endTime = sqlWhereMap.get("tm_1");
Object mway = sqlWhereMap.get("mway");
Object rstcd = sqlWhereMap.get("rstcd");
Object baseId = sqlWhereMap.get("base_id");
StringBuilder sql = new StringBuilder();
sql.append("SELECT * FROM (")
.append("SELECT stb.STCD, stb.STNM, stb.ORDER_INDEX AS orderIndex ")
.append("FROM SD_WTRV_R wt ")
.append("INNER JOIN SD_WT_B_H stb ON wt.STCD = stb.STCD ")
.append("AND stb.STTP = 'WTRV' ")
.append("AND stb.IS_DELETED = 0 ")
.append("WHERE wt.IS_DELETED = 0 ");
// 时间范围
if (startTime != null && StrUtil.isNotBlank(startTime.toString())) {
sql.append("AND wt.TM >= ").append(startTime).append(" ");
}
if (endTime != null && StrUtil.isNotBlank(endTime.toString())) {
sql.append("AND wt.TM <= ").append(endTime).append(" ");
}
// 电站编码
if (rstcd != null && StrUtil.isNotBlank(rstcd.toString())) {
String rstcdStr = rstcd.toString();
if ("('')".equals(rstcdStr)) {
sql.append("AND stb.RSTCD IN ('') ");
} else if (rstcdStr.contains(",")) {
sql.append("AND stb.RSTCD IN ").append(rstcdStr).append(" ");
} else {
sql.append("AND stb.RSTCD = ").append(rstcdStr).append(" ");
}
}
// 基地编码
if (baseId != null && StrUtil.isNotBlank(baseId.toString())) {
sql.append("AND stb.BASE_ID = ").append(baseId).append(" ");
}
// 监测方式
if (mway != null && StrUtil.isNotBlank(mway.toString())) {
sql.append("AND stb.MWAY = ").append(mway).append(" ");
}
sql.append("ORDER BY wt.TM DESC");
// 前端排序
List<DataSourceRequest.SortDescriptor> sort = dataSourceRequest.getSort();
if (sort != null && !sort.isEmpty()) {
sql.append(") ORDER BY ");
for (int i = 0; i < sort.size(); i++) {
sql.append(sort.get(i).getField()).append(" ").append(sort.get(i).getDir());
if (i < sort.size() - 1) {
sql.append(",");
}
}
} else {
sql.append(")");
}
sql.append(" WHERE ROWNUM = 1");
List<WtrvDefaultStcdVo> dataList = microservicDynamicSQLMapper
.pageAllListWithResultType(null, sql.toString(), null, WtrvDefaultStcdVo.class);
result.setData(dataList);
result.setTotal(dataList != null ? dataList.size() : 0L);
return result;
}
/**
* 解析 DataSourceRequest filter SQL 值格式类似旧系统 SqlUtil.getWhereCondition
*/
private void parseDefaultStcdFilter(DataSourceRequest.FilterDescriptor filter,
Map<String, Object> sqlWhereMap) {
if (filter == null) {
return;
}
if (filter.getFilters() != null && !filter.getFilters().isEmpty()) {
for (DataSourceRequest.FilterDescriptor child : filter.getFilters()) {
parseDefaultStcdFilter(child, sqlWhereMap);
}
return;
}
if (StrUtil.isBlank(filter.getField())) {
return;
}
String field = StrUtil.toUnderlineCase(filter.getField());
Object value = filter.getValue();
if (value == null) {
return;
}
String operator = StrUtil.blankToDefault(filter.getOperator(), "eq").toLowerCase();
String processedValue = formatDefaultStcdValue(operator, value, filter.getDataType());
// 同名字段自动追加 _1 后缀
if (sqlWhereMap.containsKey(field)) {
int idx = 1;
while (sqlWhereMap.containsKey(field + "_" + idx)) {
idx++;
}
field = field + "_" + idx;
}
sqlWhereMap.put(field, processedValue);
}
private String formatDefaultStcdValue(String operator, Object value, String dataType) {
if (value == null) {
return null;
}
if ("in".equals(operator)) {
// 将列表转为 ('a','b','c') 格式
List<?> list = normalizeToList(value);
return "(" + list.stream()
.map(v -> "'" + String.valueOf(v).trim() + "'")
.collect(Collectors.joining(",")) + ")";
}
if ("date".equalsIgnoreCase(dataType)) {
String text = String.valueOf(value).trim().replace("T", " ");
if (text.length() <= 10) {
return "TO_DATE('" + text.replace("'", "''") + "', 'YYYY-MM-DD')";
}
return "TO_DATE('" + text.replace("'", "''") + "', 'YYYY-MM-DD HH24:MI:SS')";
}
if ("string".equalsIgnoreCase(dataType) || value instanceof String) {
return "'" + String.valueOf(value).trim().replace("'", "''") + "'";
}
return String.valueOf(value).trim();
}
}