diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdEngInfoBHServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdEngInfoBHServiceImpl.java index a2da3dcc..f7c00095 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdEngInfoBHServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdEngInfoBHServiceImpl.java @@ -4085,11 +4085,17 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl sttpCodes = extractSttpCodesFromRequest(dataSourceRequest); - +// List 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 allItems = - vMsStbprpTMapper.selectBySttpCodes(sttpCodes); + List allItems = + vMsStbprpTMapper.selectBySttpCodes(List.of(sttpCode)); if (CollUtil.isEmpty(allItems)) { result.setData(new ArrayList<>()); @@ -4142,7 +4148,7 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl getFacilityPointKendoListCust(DataSourceRequest dataSourceRequest); DataSourceResult getEngTempPointListKendoListCust(DataSourceRequest dataSourceRequest); + + /** + * 获取监测点水温变化默认有数据的断面 + */ + DataSourceResult getDefaultStcd(DataSourceRequest dataSourceRequest); } diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/wt/service/impl/SdWtMonitorServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/wt/service/impl/SdWtMonitorServiceImpl.java index 2f825c50..3abd3358 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_env/wt/service/impl/SdWtMonitorServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_env/wt/service/impl/SdWtMonitorServiceImpl.java @@ -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 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 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 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 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(); + } + }