diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fp/controller/FishPassageController.java b/backend/src/main/java/com/yfd/platform/qgc_env/fp/controller/FishPassageController.java
index aeaeca8d..763a2697 100644
--- a/backend/src/main/java/com/yfd/platform/qgc_env/fp/controller/FishPassageController.java
+++ b/backend/src/main/java/com/yfd/platform/qgc_env/fp/controller/FishPassageController.java
@@ -142,4 +142,10 @@ public class FishPassageController {
public ResponseResult getQgcOverfishTotal(@RequestBody DataSourceRequest dataSourceRequest) {
return ResponseResult.successData(fpRunService.processQgcOverfishTotalKendoList(dataSourceRequest));
}
+
+ @PostMapping("/fpssrlQdays/GetKendoListCust")
+ @Operation(summary = "过鱼设施自动数据日统计表(SD_FPSSRLDAY_S)")
+ public ResponseResult getQgcFpssrlQdaySKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
+ return ResponseResult.successData(fpRunService.processQgcFpssrlQdaySKendoList(dataSourceRequest));
+ }
}
diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fp/entity/vo/FpFpssrlQdaySVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/fp/entity/vo/FpFpssrlQdaySVo.java
new file mode 100644
index 00000000..176d7281
--- /dev/null
+++ b/backend/src/main/java/com/yfd/platform/qgc_env/fp/entity/vo/FpFpssrlQdaySVo.java
@@ -0,0 +1,83 @@
+package com.yfd.platform.qgc_env.fp.entity.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ *
+ * 过鱼设施自动数据(带水温,流速)日统计表 VO
+ *
+ * 对应新表 SD_FPSSRLDAY_S(旧系统 SD_FPSSRLQDAY_S)
+ */
+@Data
+@Schema(description = "过鱼设施自动数据日统计表")
+public class FpFpssrlQdaySVo {
+
+ @Schema(description = "主键ID")
+ private String id;
+
+ @Schema(description = "过鱼设施编码")
+ private String stcd;
+
+ @Schema(description = "日期。精确到天")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private Date dt;
+
+ @Schema(description = "鱼类")
+ private String ftp;
+
+ @Schema(description = "自动过鱼设施过鱼数量")
+ private BigDecimal fcnt;
+
+ @Schema(description = "水温,单位:℃")
+ private BigDecimal temperature;
+
+ @Schema(description = "水位,单位:m")
+ private BigDecimal waterlevel;
+
+ @Schema(description = "流速,单位:m/s")
+ private BigDecimal speed;
+
+ @Schema(description = "流量,单位:m3/s")
+ private BigDecimal q;
+
+ @Schema(description = "溶氧,单位:mg/L")
+ private BigDecimal dox;
+
+ @Schema(description = "浊度,单位:NTU")
+ private BigDecimal tu;
+
+ @Schema(description = "鱼尺寸")
+ private String fsz;
+
+ @Schema(description = "鱼长度")
+ private BigDecimal length;
+
+ @Schema(description = "鱼宽度")
+ private BigDecimal width;
+
+ @Schema(description = "鱼速度")
+ private String fishspeed;
+
+ @Schema(description = "游向:0=上行 1=下行")
+ private BigDecimal direction;
+
+ @Schema(description = "鱼位置")
+ private BigDecimal fishposition;
+
+ @Schema(description = "鱼截图主图片url")
+ private String firstimgurl;
+
+ @Schema(description = "鱼截图副图片url")
+ private String secondimgurl;
+
+ @Schema(description = "视频url")
+ private String videourl;
+
+ @Schema(description = "过鱼通道")
+ private String channelno;
+}
diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fp/service/FpRunService.java b/backend/src/main/java/com/yfd/platform/qgc_env/fp/service/FpRunService.java
index c6eea469..833178df 100644
--- a/backend/src/main/java/com/yfd/platform/qgc_env/fp/service/FpRunService.java
+++ b/backend/src/main/java/com/yfd/platform/qgc_env/fp/service/FpRunService.java
@@ -11,6 +11,7 @@ import com.yfd.platform.qgc_env.fp.entity.vo.FpTableVo;
import com.yfd.platform.qgc_env.fp.entity.vo.FpTreeStcdGroupVo;
import com.yfd.platform.qgc_env.fp.entity.vo.YearFpStatisticsVo;
import com.yfd.platform.qgc_env.fp.entity.vo.FpOverfishTotalVo;
+import com.yfd.platform.qgc_env.fp.entity.vo.FpFpssrlQdaySVo;
import com.yfd.platform.qgc_env.fp.entity.vo.FpRunPlanVo;
import java.util.List;
@@ -38,4 +39,6 @@ public interface FpRunService {
DataSourceResult getTreeStcdList(DataSourceRequest dataSourceRequest);
DataSourceResult processQgcOverfishTotalKendoList(DataSourceRequest dataSourceRequest);
+
+ DataSourceResult processQgcFpssrlQdaySKendoList(DataSourceRequest dataSourceRequest);
}
diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fp/service/impl/FpRunServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/fp/service/impl/FpRunServiceImpl.java
index 9c753d0a..2991a0a9 100644
--- a/backend/src/main/java/com/yfd/platform/qgc_env/fp/service/impl/FpRunServiceImpl.java
+++ b/backend/src/main/java/com/yfd/platform/qgc_env/fp/service/impl/FpRunServiceImpl.java
@@ -16,6 +16,7 @@ import com.yfd.platform.common.exception.BizException;
import com.yfd.platform.qgc_env.fp.entity.vo.FbFishRunVo;
import com.yfd.platform.qgc_env.fp.entity.vo.FpFishSelectVo;
import com.yfd.platform.qgc_env.fp.entity.vo.FpFpssrlQueryVo;
+import com.yfd.platform.qgc_env.fp.entity.vo.FpFpssrlQdaySVo;
import com.yfd.platform.qgc_env.fp.entity.vo.FpFtpStatisticsVo;
import com.yfd.platform.qgc_env.fp.entity.vo.FpOverfishTotalVo;
import com.yfd.platform.qgc_env.fp.entity.vo.FpRunAnalysisHeadColumnVo;
@@ -3092,4 +3093,223 @@ public class FpRunServiceImpl implements FpRunService {
return orders.isEmpty() ? " ORDER BY t.TM DESC" : " ORDER BY " + String.join(", ", orders);
}
+ // ==================== 过鱼设施自动数据日统计表 ====================
+
+ @Override
+ public DataSourceResult processQgcFpssrlQdaySKendoList(DataSourceRequest dataSourceRequest) {
+ DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest();
+ if (CollUtil.isEmpty(dataSourceRequest == null ? null : dataSourceRequest.getGroup())) {
+ return queryFpssrlQdaySDetailList(dataSourceRequest, loadOptions);
+ }
+ return queryFpssrlQdaySGroupList(dataSourceRequest, loadOptions);
+ }
+
+ private DataSourceResult queryFpssrlQdaySDetailList(DataSourceRequest dataSourceRequest,
+ DataSourceLoadOptionsBase loadOptions) {
+ StringBuilder sql = new StringBuilder();
+ sql.append("SELECT ")
+ .append(buildFpssrlQdaySSelectSql(dataSourceRequest == null ? null : dataSourceRequest.getSelect()))
+ .append(" FROM (")
+ .append(buildFpssrlQdaySCoreSql())
+ .append(") t WHERE 1 = 1 ");
+
+ Map paramMap = new HashMap<>();
+ String filterSql = QgcQueryWrapperUtil.buildFilterCondition(
+ dataSourceRequest == null ? null : dataSourceRequest.getFilter(),
+ paramMap,
+ new int[]{0},
+ this::mapFpssrlQdaySColumn
+ );
+ if (StrUtil.isNotBlank(filterSql)) {
+ sql.append(" AND ").append(filterSql).append(" ");
+ }
+ sql.append(buildFpssrlQdaySOrderBySql(dataSourceRequest == null ? null : dataSourceRequest.getSort()));
+
+ Page> page = loadOptions == null ? null : QgcQueryWrapperUtil.buildPage(loadOptions, loadOptions.getSkip(), loadOptions.getTake());
+ List list = microservicDynamicSQLMapper.pageAllListWithResultType(
+ page, sql.toString(), paramMap, FpFpssrlQdaySVo.class
+ );
+ DataSourceResult result = new DataSourceResult<>();
+ result.setData(list);
+ result.setTotal(page != null ? page.getTotal() : list.size());
+ result.setAggregates(new HashMap<>());
+ return result;
+ }
+
+ private DataSourceResult queryFpssrlQdaySGroupList(DataSourceRequest dataSourceRequest,
+ DataSourceLoadOptionsBase loadOptions) {
+ List groups = dataSourceRequest.getGroup();
+ GroupingInfo[] groupInfos = loadOptions == null ? new GroupingInfo[0] : loadOptions.getGroup();
+
+ List selectItems = new ArrayList<>();
+ for (DataSourceRequest.GroupDescriptor descriptor : groups) {
+ if (descriptor == null || StrUtil.isBlank(descriptor.getField())) {
+ continue;
+ }
+ String column = mapFpssrlQdaySColumn(descriptor.getField());
+ if (StrUtil.isBlank(column)) {
+ continue;
+ }
+ selectItems.add(column + " AS " + descriptor.getField().toUpperCase());
+ selectItems.add("COUNT(*) AS COUNT_" + descriptor.getField().toUpperCase());
+ if (CollUtil.isNotEmpty(descriptor.getAggregates())) {
+ for (DataSourceRequest.AggregateDescriptor aggregate : descriptor.getAggregates()) {
+ String aggregateColumn = mapFpssrlQdaySColumn(aggregate.getField());
+ if (StrUtil.isBlank(aggregateColumn) || StrUtil.isBlank(aggregate.getAggregate())) {
+ continue;
+ }
+ selectItems.add(buildAggregateSql(aggregate.getAggregate(), aggregateColumn, aggregate.getField()));
+ }
+ }
+ }
+ if (selectItems.isEmpty()) {
+ selectItems.add("t.STCD AS STCD");
+ selectItems.add("COUNT(*) AS COUNT_STCD");
+ }
+
+ StringBuilder sql = new StringBuilder("SELECT ");
+ sql.append(String.join(", ", selectItems))
+ .append(" FROM (")
+ .append(buildFpssrlQdaySCoreSql())
+ .append(") t WHERE 1 = 1 ");
+
+ Map paramMap = new HashMap<>();
+ String filterSql = QgcQueryWrapperUtil.buildFilterCondition(
+ dataSourceRequest == null ? null : dataSourceRequest.getFilter(),
+ paramMap,
+ new int[]{0},
+ this::mapFpssrlQdaySColumn
+ );
+ if (StrUtil.isNotBlank(filterSql)) {
+ sql.append(" AND ").append(filterSql).append(" ");
+ }
+
+ List groupByColumns = new ArrayList<>();
+ for (DataSourceRequest.GroupDescriptor descriptor : groups) {
+ if (descriptor == null || StrUtil.isBlank(descriptor.getField())) {
+ continue;
+ }
+ String column = mapFpssrlQdaySColumn(descriptor.getField());
+ if (StrUtil.isNotBlank(column)) {
+ groupByColumns.add(column);
+ }
+ }
+ if (!groupByColumns.isEmpty()) {
+ sql.append(" GROUP BY ").append(String.join(", ", groupByColumns)).append(" ");
+ }
+ sql.append(buildFpssrlQdaySOrderBySql(dataSourceRequest == null ? null : dataSourceRequest.getSort()));
+
+ List