头中提取
+ *
+ * @param request HTTP 请求
+ * @return token 字符串,解析失败返回 null
+ */
+ public String resolveToken(HttpServletRequest request) {
+ String authHeader = request.getHeader("Authorization");
+ if (StrUtil.isBlank(authHeader)) {
+ return null;
+ }
+
+ // 支持 "Bearer xxx" 和 "bearer xxx" 格式
+ String trimmed = authHeader.trim();
+ if (trimmed.length() > 7
+ && "bearer".equalsIgnoreCase(trimmed.substring(0, 6))
+ && trimmed.charAt(6) == ' ') {
+ return trimmed.substring(7).trim();
+ }
+
+ return null;
+ }
+
+ /**
+ * 刷新 token 有效期(延长使用时间)
+ *
+ * @param token Bearer Token
+ */
+ public void refreshToken(String token) {
+ if (StrUtil.isBlank(token)) return;
+ String cacheValue = webConfig.loginuserCache().get(CACHE_PREFIX + token);
+ if (StrUtil.isBlank(cacheValue)) return;
+
+ JSONObject payload = JSON.parseObject(cacheValue);
+ long newExpireAt = System.currentTimeMillis() + DEFAULT_EXPIRE_MILLIS;
+ payload.put("expireAt", newExpireAt);
+ webConfig.loginuserCache().put(CACHE_PREFIX + token, payload.toJSONString(), DEFAULT_EXPIRE_MILLIS);
+ }
+
+ /**
+ * 撤销 token
+ *
+ * @param token Bearer Token
+ */
+ public void revokeToken(String token) {
+ if (StrUtil.isNotBlank(token)) {
+ webConfig.loginuserCache().remove(CACHE_PREFIX + token);
+ log.info("Bearer Token 已撤销");
+ }
+ }
+
+ private String getClientIp(HttpServletRequest request) {
+ String ip = request.getHeader("X-Forwarded-For");
+ if (StrUtil.isNotBlank(ip)) {
+ return ip.split(",")[0].trim();
+ }
+ return request.getRemoteAddr();
+ }
+
+ private String maskToken(String token) {
+ if (token == null || token.length() <= 8) return "***";
+ return token.substring(0, 4) + "***" + token.substring(token.length() - 4);
+ }
+
+ /**
+ * Bearer Token 创建结果
+ */
+ public static class BearerTokenResult {
+ /** 访问令牌 */
+ private String accessToken;
+ /** 令牌类型 */
+ private String tokenType;
+ /** 有效期(秒) */
+ private long expiresIn;
+ /** 过期时间戳 */
+ private long expireAt;
+
+ public String getAccessToken() { return accessToken; }
+ public void setAccessToken(String accessToken) { this.accessToken = accessToken; }
+ public String getTokenType() { return tokenType; }
+ public void setTokenType(String tokenType) { this.tokenType = tokenType; }
+ public long getExpiresIn() { return expiresIn; }
+ public void setExpiresIn(long expiresIn) { this.expiresIn = expiresIn; }
+ public long getExpireAt() { return expireAt; }
+ public void setExpireAt(long expireAt) { this.expireAt = expireAt; }
+ }
+}
diff --git a/backend/src/main/java/com/yfd/platform/config/OAuth2TokenController.java b/backend/src/main/java/com/yfd/platform/config/OAuth2TokenController.java
new file mode 100644
index 00000000..a4b04149
--- /dev/null
+++ b/backend/src/main/java/com/yfd/platform/config/OAuth2TokenController.java
@@ -0,0 +1,127 @@
+package com.yfd.platform.config;
+
+import cn.hutool.core.util.StrUtil;
+import com.yfd.platform.config.BearerTokenService.BearerTokenResult;
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletRequest;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.nio.charset.StandardCharsets;
+import java.util.Base64;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * OAuth2 Token 端点
+ *
+ * 供外部系统通过 client_credentials 模式获取 Bearer Token。
+ *
+ *
请求格式(参考 鉴权与文件上传接口说明.md 3.2 节):
+ *
+ * POST /oauth2/token
+ * Content-Type: application/x-www-form-urlencoded
+ * Authorization: Basic
+ *
+ * grant_type=client_credentials
+ *
+ *
+ * 返回格式:
+ *
+ * {
+ * "success": true,
+ * "errorCode": 0,
+ * "message": "获取token成功",
+ * "data": {
+ * "access_token": "xxx",
+ * "token_type": "bearer",
+ * "expires_in": 7200
+ * }
+ * }
+ *
+ */
+@RestController
+@RequestMapping("/api/oauth2")
+public class OAuth2TokenController {
+
+ private static final Logger log = LoggerFactory.getLogger(OAuth2TokenController.class);
+
+ @Resource
+ private BearerTokenService bearerTokenService;
+
+ /**
+ * 获取 Access Token(client_credentials 模式)
+ */
+ @PostMapping("/oauth/token")
+ public Map getToken(HttpServletRequest request) {
+ Map result = new HashMap<>();
+
+ // 解析 Authorization: Basic
+ String authHeader = request.getHeader("Authorization");
+ if (StrUtil.isBlank(authHeader) || !authHeader.trim().toLowerCase().startsWith("basic ")) {
+ log.warn("获取 Token 失败: 缺少有效的 Basic Authorization 头");
+ result.put("success", false);
+ result.put("errorCode", -1);
+ result.put("message", "缺少有效的 Authorization: Basic 认证信息");
+ return result;
+ }
+
+ String clientId = resolveClientId(authHeader);
+ if (StrUtil.isBlank(clientId)|| !"client:secret".equals(clientId)) {
+ log.warn("获取 Token 失败: 无法解析 client");
+ result.put("success", false);
+ result.put("errorCode", -1);
+ result.put("message", "无法解析客户端标识");
+ return result;
+ }
+
+ // 验证 grant_type
+ String grantType = request.getParameter("grant_type");
+ if (StrUtil.isBlank(grantType) || !"client_credentials".equals(grantType)) {
+ log.warn("获取 Token 失败: 不支持的 grant_type={}", grantType);
+ result.put("success", false);
+ result.put("errorCode", -1);
+ // 仅支持 client_credentials 授权模式
+ result.put("message", "授权模式错误");
+ return result;
+ }
+
+ BearerTokenResult tokenResult = bearerTokenService.createToken(request, clientId);
+
+ Map data = new HashMap<>();
+ data.put("access_token", tokenResult.getAccessToken());
+ data.put("token_type", tokenResult.getTokenType());
+ data.put("expires_in", tokenResult.getExpiresIn());
+
+ result.put("success", true);
+ result.put("errorCode", 0);
+ result.put("message", "获取token成功");
+ result.put("data", data);
+
+ log.info("OAuth2 Token 签发成功, clientId={}", clientId);
+ return result;
+ }
+
+ /**
+ * 从 Authorization: Basic 头中解析 client
+ */
+ private String resolveClientId(String authHeader) {
+ try {
+ String base64 = authHeader.substring(6).trim();
+ byte[] decoded = Base64.getDecoder().decode(base64);
+ // // 格式: client:secret
+// int colonIdx = credentials.indexOf(':');
+// if (colonIdx > 0) {
+// return credentials.substring(0, colonIdx);
+// }
+ return new String(decoded, StandardCharsets.UTF_8);
+ } catch (Exception e) {
+ log.warn("解析 Basic 认证信息失败: {}", e.getMessage());
+ return null;
+ }
+ }
+
+}
diff --git a/backend/src/main/java/com/yfd/platform/config/SecurityConfig.java b/backend/src/main/java/com/yfd/platform/config/SecurityConfig.java
index 8fe0309f..e22f5087 100644
--- a/backend/src/main/java/com/yfd/platform/config/SecurityConfig.java
+++ b/backend/src/main/java/com/yfd/platform/config/SecurityConfig.java
@@ -42,6 +42,9 @@ public class SecurityConfig {
@Autowired
private RegisterAccessTokenFilter registerAccessTokenFilter;
+ @Autowired
+ private BearerTokenFilter bearerTokenFilter;
+
@Autowired
private AuthenticationException authenticationException;
@@ -60,7 +63,8 @@ public class SecurityConfig {
.requestMatchers("/data/fishDraft/previewFile").permitAll()
.requestMatchers("/tempFile/**").permitAll()
.requestMatchers("/system/user/auditUser").permitAll()
- .requestMatchers("/register/accessToken").permitAll()
+ .requestMatchers("/api/oauth2/oauth/token").permitAll()
+ .requestMatchers("/dict/cache/**").permitAll()
.requestMatchers("/sys/psbmodulelbb/**").permitAll()
.requestMatchers("/base/operationLog/**").permitAll()
// .requestMatchers("/eng/**").permitAll()
@@ -87,6 +91,7 @@ public class SecurityConfig {
// .requestMatchers("/base/msalongb/**").permitAll()
// .requestMatchers("/base/msalongdetb/**").permitAll()
// .requestMatchers("/smartImage/**").permitAll()
+// .requestMatchers("/base/fpssrlR/**").permitAll()
.requestMatchers("/sms/**").permitAll()
.requestMatchers(HttpMethod.GET, "/").permitAll()
.requestMatchers(HttpMethod.GET,
@@ -114,6 +119,7 @@ public class SecurityConfig {
.cors(cors -> {});
http.addFilterBefore(registerAccessTokenFilter, UsernamePasswordAuthenticationFilter.class);
+ http.addFilterBefore(bearerTokenFilter, UsernamePasswordAuthenticationFilter.class);
http.addFilterBefore(jwtAuthenticationTokenFilter, UsernamePasswordAuthenticationFilter.class);
http.exceptionHandling(ex -> ex
diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/controller/SdEngInfoBHController.java b/backend/src/main/java/com/yfd/platform/qgc_base/controller/SdEngInfoBHController.java
index 798ab6d7..089ef503 100644
--- a/backend/src/main/java/com/yfd/platform/qgc_base/controller/SdEngInfoBHController.java
+++ b/backend/src/main/java/com/yfd/platform/qgc_base/controller/SdEngInfoBHController.java
@@ -2,6 +2,7 @@ package com.yfd.platform.qgc_base.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fasterxml.jackson.databind.ObjectMapper;
+import com.yfd.platform.annotation.DynamicDictEvict;
import com.yfd.platform.annotation.Log;
import com.yfd.platform.common.DataSourceRequest;
import com.yfd.platform.config.ResponseResult;
@@ -104,6 +105,7 @@ public class SdEngInfoBHController {
@Log(module = "电站管理", value = "新增电站")
@PostMapping("/add")
@Operation(summary = "新增电站")
+ @DynamicDictEvict(tableName = "SD_ENGINFO_B_H", codeColumn = "STCD", nameColumn = "ENNM")
public ResponseResult add(@RequestBody SdEngInfoBHOperateRequest request) {
SdEngInfoBH engInfo = request == null || request.getEngInfo() == null ? null : objectMapper.convertValue(request.getEngInfo(), SdEngInfoBH.class);
boolean result = engInfoBHService.addEngInfo(engInfo, request.getSource());
@@ -113,6 +115,7 @@ public class SdEngInfoBHController {
@Log(module = "电站管理", value = "修改电站")
@PostMapping("/update")
@Operation(summary = "修改电站")
+ @DynamicDictEvict(tableName = "SD_ENGINFO_B_H", codeColumn = "STCD", nameColumn = "ENNM")
public ResponseResult update(@RequestBody SdEngInfoBHOperateRequest request) throws Exception {
boolean result = engInfoBHService.updateEngInfo(request.getEngInfo(), request.getSource());
return result ? ResponseResult.success("修改成功") : ResponseResult.error("修改失败");
@@ -121,6 +124,7 @@ public class SdEngInfoBHController {
@Log(module = "电站管理", value = "删除电站")
@PostMapping("/delete")
@Operation(summary = "删除电站")
+ @DynamicDictEvict(tableName = "SD_ENGINFO_B_H", codeColumn = "STCD", nameColumn = "ENNM")
public ResponseResult delete(@RequestBody SdEngInfoBHOperateRequest request) {
boolean result = engInfoBHService.deleteEngInfo(request == null ? null : request.getIds(),
request == null ? null : request.getSource());
diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/controller/SdFpssrlRController.java b/backend/src/main/java/com/yfd/platform/qgc_base/controller/SdFpssrlRController.java
index ae195913..c48dca22 100644
--- a/backend/src/main/java/com/yfd/platform/qgc_base/controller/SdFpssrlRController.java
+++ b/backend/src/main/java/com/yfd/platform/qgc_base/controller/SdFpssrlRController.java
@@ -1,13 +1,14 @@
package com.yfd.platform.qgc_base.controller;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yfd.platform.annotation.Log;
import com.yfd.platform.common.DataSourceRequest;
import com.yfd.platform.config.ResponseResult;
-import com.yfd.platform.qgc_base.domain.SdEngInfoBHOperateRequest;
-import com.yfd.platform.qgc_base.domain.SdFpssrlR;
-import com.yfd.platform.qgc_base.domain.SdFpssrlRAiRequest;
+import com.yfd.platform.qgc_base.domain.*;
+import com.yfd.platform.qgc_base.service.ISdFishDictoryBService;
import com.yfd.platform.qgc_base.service.ISdFpssrlRService;
import com.yfd.platform.qgc_data.service.AttachmentUploadService;
import io.swagger.v3.oas.annotations.Operation;
@@ -19,6 +20,7 @@ import org.springframework.web.multipart.MultipartFile;
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
import java.util.stream.Collectors;
/**
@@ -41,6 +43,9 @@ public class SdFpssrlRController {
@Resource
private AttachmentUploadService attachmentUploadService;
+ @Resource
+ private ISdFishDictoryBService sdFishDictoryBService;
+
// ==================== CRUD 方法 ====================
@PostMapping("/queryPageList")
@@ -131,7 +136,14 @@ public class SdFpssrlRController {
if (requests == null || requests.isEmpty()) {
return ResponseResult.error("请求数据不能为空");
}
-
+ List list = sdFishDictoryBService.list(new LambdaQueryWrapper().eq(SdFishDictoryB::getIsDeleted, "0").select(SdFishDictoryB::getId, SdFishDictoryB::getName));
+ Map idNameMap = list.stream()
+ .filter(item -> item.getId() != null && item.getName() != null)
+ .collect(Collectors.toMap(
+ SdFishDictoryB::getName,
+ SdFishDictoryB::getId,
+ (oldValue, newValue) -> oldValue // 如果有重复 key 保留旧值(实际不会重复)
+ ));
// 逐条校验
for (int i = 0; i < requests.size(); i++) {
SdFpssrlRAiRequest req = requests.get(i);
@@ -141,16 +153,22 @@ public class SdFpssrlRController {
if (req.getStcd() == null || req.getStcd().isEmpty()) {
return ResponseResult.error("第" + (i + 1) + "条过鱼设施编码(stcd)不能为空");
}
+ if (req.getFwdx() == null || req.getFwdx().isEmpty()) {
+ return ResponseResult.error("第" + (i + 1) + "条服务对象(fwdx)不能为空");
+ }
if (req.getTm() == null) {
return ResponseResult.error("第" + (i + 1) + "条识别时间(tm)不能为空");
}
if (req.getFtp() == null || req.getFtp().isEmpty()) {
return ResponseResult.error("第" + (i + 1) + "条鱼种类(ftp)不能为空");
}
+ if (StrUtil.isNotBlank(req.getFtp())) {
+ req.setFtp(idNameMap.getOrDefault(req.getFtp(), req.getFtp()));
+ }
}
try {
- List result = sdFpssrlRService.processAiReportBatch(requests);
+ List result = sdFpssrlRService.processAiReportBatch(requests);
// List ids = result.stream().map(SdFpssrlR::getId).collect(Collectors.toList());
log.info("AI批量上报成功,共{}条", result.size());
return ResponseResult.success();
diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdAiboxBH.java b/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdAiboxBH.java
index 601289bf..3933e989 100644
--- a/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdAiboxBH.java
+++ b/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdAiboxBH.java
@@ -104,6 +104,9 @@ public class SdAiboxBH implements Serializable {
@FieldChinese("是否启用")
private Integer usfl;
+ @TableField(exist = false)
+ private String usflName;
+
/**
* 数据是否接入
*/
diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdEngInfoBH.java b/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdEngInfoBH.java
index aaf8da45..cec92071 100644
--- a/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdEngInfoBH.java
+++ b/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdEngInfoBH.java
@@ -60,6 +60,10 @@ public class SdEngInfoBH implements Serializable {
@FieldChinese("是否启用")
private Integer usfl;
+ /** 是否启用名称 */
+ @TableField(exist = false)
+ private String usflName;
+
/** 水能利用数据是否接入 */
@FieldChinese("水能利用数据是否接入")
private Integer dtin;
@@ -219,15 +223,31 @@ public class SdEngInfoBH implements Serializable {
@FieldChinese("建设状态")
private String bldstt;
+ /** 站类 */
+ @FieldChinese("站类")
+ private String sttp;
+
+ /** 站类名称 */
+ @TableField(exist = false)
+ private String sttpName;
+
/** 建设状态分类 */
@TableField("BLDSTT_CODE")
@FieldChinese("建设状态分类")
private Integer bldsttCode;
+ /** 建设状态分类名称 */
+ @TableField(exist = false)
+ private String bldsttCodeName;
+
/** 工程类别 */
@FieldChinese("工程类别")
private Integer engtp;
+ /** 工程类别名称 */
+ @TableField(exist = false)
+ private String engtpName;
+
/** 工程规模 */
@FieldChinese("工程规模")
private Integer prsc;
@@ -236,14 +256,26 @@ public class SdEngInfoBH implements Serializable {
@FieldChinese("工程规模(水库库容)")
private Integer scrsc;
+ /** 工程规模(水库库容)名称 */
+ @TableField(exist = false)
+ private String scrscName;
+
/** 工程等别 */
@FieldChinese("工程等别")
private String prgr;
+ /** 工程等别名称 */
+ @TableField(exist = false)
+ private String prgrName;
+
/** 电站-主要功能 */
@FieldChinese("电站-主要功能")
private String fn;
+ /** 电站-主要功能名称 */
+ @TableField(exist = false)
+ private String fnName;
+
/** 地震基本烈度 */
@FieldChinese("地震基本烈度")
private String bsssin;
@@ -256,31 +288,58 @@ public class SdEngInfoBH implements Serializable {
@FieldChinese("是否调节水库")
private Integer adjustEng;
+ /** 是否调节水库名称 */
+ @TableField(exist = false)
+ private String adjustEngName;
+
/** 有无拦河坝 */
@TableField("ISHVBRRG")
@FieldChinese("有无拦河坝")
private String ishvrgrg;
+ /** 有无拦河坝名称 */
+ @TableField(exist = false)
+ private String ishvrgrgName;
+
/** 水库调节性能 */
@FieldChinese("水库调节性能")
private String rgcp;
+ @TableField(exist = false)
+ private String rgcpName;
+
/** 坝体材质 */
@FieldChinese("坝体材质")
private Integer dmat;
+ /** 坝体材质名称 */
+ @TableField(exist = false)
+ private String dmatName;
+
/** 坝体类型 */
@FieldChinese("坝体类型")
private String dmtp;
+ /** 坝体类型名称 */
+ @TableField(exist = false)
+ private String dmtpName;
+
/** 开发方式 */
@FieldChinese("开发方式")
private String dvtp;
+ /** 开发方式名称 */
+ @TableField(exist = false)
+ private String dvtpName;
+
/** 建设类型 */
@FieldChinese("建设类型")
private String cntp;
+ /** 建设类型名称 */
+ @TableField(exist = false)
+ private String cntpName;
+
/** 管理单位 */
@FieldChinese("管理单位")
private String mnun;
@@ -293,6 +352,10 @@ public class SdEngInfoBH implements Serializable {
@FieldChinese("归属部门")
private String blsys;
+ /** 归属部门名称 */
+ @TableField(exist = false)
+ private String blsysName;
+
/** 绕经度方向旋转矩阵值 */
@FieldChinese("绕经度方向旋转矩阵值")
private Double roll;
@@ -313,6 +376,10 @@ public class SdEngInfoBH implements Serializable {
@FieldChinese("是否受下游顶托")
private String impdstrz;
+ /** 是否受下游顶托名称 */
+ @TableField(exist = false)
+ private String impdstrzName;
+
/** 工程概况 */
@FieldChinese("工程概况")
private String prov;
@@ -831,6 +898,10 @@ public class SdEngInfoBH implements Serializable {
@FieldChinese("航道级别")
private String chngrd;
+ /** 渠道级别名称 */
+ @TableField(exist = false)
+ private String chngrdName;
+
/** 渠化航道里程 */
@FieldChinese("渠化航道里程")
private Double chnlnth;
@@ -968,6 +1039,10 @@ public class SdEngInfoBH implements Serializable {
@FieldChinese("是否主要流域电站")
private Integer chiefbasineng;
+ /** 是否主要流域电站名称 */
+ @TableField(exist = false)
+ private String chiefbasinengName;
+
/** 蓄水开始时间 */
@FieldChinese("蓄水开始时间")
private String swsdt;
@@ -1037,18 +1112,34 @@ public class SdEngInfoBH implements Serializable {
@FieldChinese("环境监测数据接入情况")
private Integer dtinEnv;
+ /** 环境监测数据接入情况描述 */
+ @TableField(exist = false)
+ private String dtinEnvName;
+
/** 最新运行状态:1=运行中 2=未运行 */
@FieldChinese("最新运行状态")
private Integer runState;
+ /** 最新运行状态描述 */
+ @TableField(exist = false)
+ private String runStateName;
+
/** 告警状态 */
@FieldChinese("告警状态")
private String warnState;
+ /** 告警状态描述 */
+ @TableField(exist = false)
+ private String warnStateName;
+
/** 开展环保自动检测工作状态:0=暂无数据 1=正常 */
@FieldChinese("开展环保自动检测工作状态")
private Integer coenvwState;
+ /** 开展环保自动检测工作状态描述 */
+ @TableField(exist = false)
+ private String coenvwStateName;
+
/** 在线地址 */
@FieldChinese("在线地址")
private String url;
diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdFpssrlAiR.java b/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdFpssrlAiR.java
new file mode 100644
index 00000000..2a85652d
--- /dev/null
+++ b/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdFpssrlAiR.java
@@ -0,0 +1,121 @@
+package com.yfd.platform.qgc_base.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ *
+ * 过鱼设施AI盒子自动数据表
+ *
+ */
+@Data
+@TableName("SD_FPSSRL_AI_R")
+public class SdFpssrlAiR implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /** 主键ID */
+ @TableId(type = IdType.ASSIGN_UUID)
+ private String id;
+
+ /** 过鱼设施编码 */
+ private String stcd;
+
+ /** 时间 */
+ private Date tm;
+
+ /** 鱼种类 */
+ private String ftp;
+
+ /** 过鱼数量 */
+ private Integer fcnt;
+
+ /** 鱼尺寸:大/中/小 */
+ private String fsz;
+
+ /** 鱼长度 */
+ private BigDecimal length;
+
+ /** 鱼宽度 */
+ private BigDecimal width;
+
+ /** 鱼速度 */
+ private String fishspeed;
+
+ /** 游向:0=上行 1=下行 */
+ private Integer direction;
+
+ /** 鱼位置 */
+ private Long fishposition;
+
+ /** 鱼截图主图片url */
+ private String firstImgUrl;
+
+ /** 鱼截图副图片url */
+ private String secondImgUrl;
+
+ /** 视频url */
+ private String videoUrl;
+
+ /** 水温:单位:℃ */
+ private BigDecimal temperature;
+
+ /** 水位:单位:m */
+ private BigDecimal waterlevel;
+
+ /** 流速:单位:m/s */
+ private BigDecimal speed;
+
+ /** 流量:单位:m3/s */
+ private BigDecimal q;
+
+ /** 溶氧:单位:mg/L */
+ private BigDecimal dox;
+
+ /** 浊度:单位:NTU */
+ private Integer tu;
+
+ /** 过鱼通道 */
+ private String channelno;
+
+ /** AI盒子编码 */
+ private String aiBoxCode;
+
+ /** 创建人 */
+ private String recordUser;
+
+ /** 创建时间 */
+ private Date recordTime;
+
+ /** 更新人 */
+ private String modifyUser;
+
+ /** 更新时间 */
+ private Date modifyTime;
+
+ /** 是否已删除:0=未删除 1=已删除 */
+ private Integer isDeleted;
+
+ /** 删除人 */
+ private String deleteUser;
+
+ /** 删除时间 */
+ private Date deleteTime;
+
+ /** 附件ID */
+ private String fid;
+
+ /** 备注 */
+ private String remark;
+
+ /** 过鱼设施名称(非表字段,用于列表展示) */
+ @TableField(exist = false)
+ private String stnm;
+}
diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdFpssrlRAiRequest.java b/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdFpssrlRAiRequest.java
index 7b844d05..e533018e 100644
--- a/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdFpssrlRAiRequest.java
+++ b/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdFpssrlRAiRequest.java
@@ -38,6 +38,11 @@ public class SdFpssrlRAiRequest {
*/
private String fsz;
+ /**
+ * 服务对象
+ */
+ private String fwdx;
+
/**
* 鱼长度,单位:cm
*/
diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdVdinfoB.java b/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdVdinfoB.java
index 8d5f79bf..cd28644a 100644
--- a/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdVdinfoB.java
+++ b/backend/src/main/java/com/yfd/platform/qgc_base/domain/SdVdinfoB.java
@@ -245,7 +245,8 @@ public class SdVdinfoB implements Serializable {
/** 视频站设备机位变更日期 */
@FieldChinese("视频站设备机位变更日期")
- private Integer jwupdate;
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ private Date jwupdate;
/** 视频站AI识别是否启用 */
@FieldChinese("视频站AI识别是否启用")
diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/mapper/SdFpssrlAiRMapper.java b/backend/src/main/java/com/yfd/platform/qgc_base/mapper/SdFpssrlAiRMapper.java
new file mode 100644
index 00000000..84ffe5d9
--- /dev/null
+++ b/backend/src/main/java/com/yfd/platform/qgc_base/mapper/SdFpssrlAiRMapper.java
@@ -0,0 +1,22 @@
+package com.yfd.platform.qgc_base.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.yfd.platform.qgc_base.domain.SdFpssrlAiR;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ *
+ * 过鱼设施AI盒子自动数据表 Mapper 接口
+ *
+ */
+@Mapper
+public interface SdFpssrlAiRMapper extends BaseMapper {
+
+ /**
+ * 批量合并过鱼AI自动数据(基于 STCD + TM + FTP 唯一)
+ * 存在则更新,不存在则新增
+ */
+ int mergeFishRecords(List list);
+}
diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/service/ISdFpssrlRService.java b/backend/src/main/java/com/yfd/platform/qgc_base/service/ISdFpssrlRService.java
index 546fb5dc..7044a673 100644
--- a/backend/src/main/java/com/yfd/platform/qgc_base/service/ISdFpssrlRService.java
+++ b/backend/src/main/java/com/yfd/platform/qgc_base/service/ISdFpssrlRService.java
@@ -3,6 +3,7 @@ package com.yfd.platform.qgc_base.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yfd.platform.common.DataSourceRequest;
+import com.yfd.platform.qgc_base.domain.SdFpssrlAiR;
import com.yfd.platform.qgc_base.domain.SdFpssrlR;
import com.yfd.platform.qgc_base.domain.SdFpssrlRAiRequest;
@@ -48,5 +49,5 @@ public interface ISdFpssrlRService extends IService {
/**
* 批量处理AI设备上报的识别数据
*/
- List processAiReportBatch(List requests);
+ List processAiReportBatch(List requests);
}
diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdAiboxBHServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdAiboxBHServiceImpl.java
index 4ab0272d..ed8fdd92 100644
--- a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdAiboxBHServiceImpl.java
+++ b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdAiboxBHServiceImpl.java
@@ -52,10 +52,12 @@ public class SdAiboxBHServiceImpl extends ServiceImpl impleme
CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("dtin").modifyProperty("dtinName").dictType("STATIC").dictSource("DTIN").build());
CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("bldsttCode").modifyProperty("bldsttCodeName").dictType("STATIC").dictSource("BLDSTT_CODE").build());
// CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("dtinType").modifyProperty("dtinTypeName").dictType("STATIC").dictSource("DTIN_TYPE").build());
- CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("sttp").modifyProperty("sttpName").dictType("DYNAMIC").dictSource("SD_STTP_B").codeColumn("STTP_CODE").nameColumn("STTP_NAME").filter("NVL(IS_DELETED, 0) = 0 ").build());
- CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("baseId").modifyProperty("baseName").dictType("DYNAMIC").dictSource("SD_HYDROBASE").codeColumn("BASEID").nameColumn("BASENAME").filter("NVL(IS_DELETED, 0) = 0 ").build());
- CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("rstcd").modifyProperty("ennm").dictType("DYNAMIC").dictSource("SD_ENGINFO_B_H").codeColumn("STCD").nameColumn("ENNM").filter("NVL(IS_DELETED, 0) = 0 ").build());
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("sttp").modifyProperty("sttpName").dictType("DYNAMIC").dictSource("SD_STTP_B").codeColumn("STTP_CODE").nameColumn("STTP_NAME").filter("IS_DELETED = 0 ").build());
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("baseId").modifyProperty("baseName").dictType("DYNAMIC").dictSource("SD_HYDROBASE").codeColumn("BASEID").nameColumn("BASENAME").filter("IS_DELETED = 0 ").build());
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("rstcd").modifyProperty("ennm").dictType("DYNAMIC").dictSource("SD_ENGINFO_B_H").codeColumn("STCD").nameColumn("ENNM").filter("IS_DELETED = 0 ").build());
}
@Override
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 1db399ec..01c9ef84 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
@@ -16,6 +16,7 @@ import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yfd.platform.annotation.FieldChinese;
import com.yfd.platform.common.DataSourceLoadOptionsBase;
import com.yfd.platform.common.DataSourceRequest;
import com.yfd.platform.common.DataSourceResult;
@@ -45,9 +46,7 @@ import com.yfd.platform.qgc_base.service.IMsOperationLogService;
import com.yfd.platform.qgc_base.service.ISdEngInfoBHService;
import com.yfd.platform.qgc_eng.eq.entity.vo.LastTmEngEqDataVo;
import com.yfd.platform.system.service.IAdminAuthService;
-import com.yfd.platform.utils.QgcQueryWrapperUtil;
-import com.yfd.platform.utils.RedisCacheUtil;
-import com.yfd.platform.utils.SecurityUtils;
+import com.yfd.platform.utils.*;
import jakarta.annotation.Resource;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
@@ -66,13 +65,61 @@ import java.util.stream.Collectors;
*/
@Service
public class SdEngInfoBHServiceImpl extends ServiceImpl implements ISdEngInfoBHService {
-
+ private static final String TABLE_NAME = "SD_FISHDICTORY_B";
private static final Map ENG_CODE_NAME_FIELD_MAP = new LinkedHashMap<>();
@Resource
private RedisCacheUtil redisCacheUtil;
@Resource
private IDataScopeFilterService dataScopeFilterService;
+ @Resource
+ private DictCodeToNameConverter dictCodeToNameConverter;
+
+ /**
+ * 代码转名称元数据配置列表(静态初始化)
+ *
+ * 每个模块的 ServiceImpl 中可按需定义自己的 codeToNameMetadataBoList,
+ * 在查询方法返回前调用 dictCodeToNameConverter.convertCodeToName(voList, codeToNameMetadataBoList)
+ * 即可自动将 code 字段转为对应的 name 字段。
+ *
+ *
+ *
+ * 使用示例:
+ * // 在查询方法末尾调用:
+ * dictCodeToNameConverter.convertCodeToName(voList, CODE_TO_NAME_META_LIST);
+ *
+ */
+ private static final List CODE_TO_NAME_META_LIST = new ArrayList<>();
+
+ static {
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("dtin").modifyProperty("dtinName").dictType("STATIC").dictSource("DTIN").build());
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("mway").modifyProperty("mwayName").dictType("STATIC").dictSource("MWAY").build());
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("bldsttCode").modifyProperty("bldsttCodeName").dictType("STATIC").dictSource("BLDSTT_CODE").build());
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("dtinEnv").modifyProperty("dtinEnvName").dictType("STATIC").dictSource("DTIN_ENV").build());
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("sttp").modifyProperty("sttpName").dictType("DYNAMIC").dictSource("SD_STTP_B").codeColumn("STTP_CODE").nameColumn("STTP_NAME").filter("IS_DELETED = 0 ").build());
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("usfl").modifyProperty("usflName").dictType("STATIC").dictSource("USFL").build());
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("runState").modifyProperty("runStateName").dictType("STATIC").dictSource("RUN_STATE").build());
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("warnState").modifyProperty("warnStateName").dictType("STATIC").dictSource("WARN_STATE").build());
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("coenvwState").modifyProperty("coenvwStateName").dictType("STATIC").dictSource("COENVW_STATE").build());
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("scrsc").modifyProperty("scrscStateName").dictType("STATIC").dictSource("SCRSC").build());
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("adjustEng").modifyProperty("adjustEngName").dictType("STATIC").dictSource("TY_SF").build());
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("chiefbasineng").modifyProperty("chiefbasinengName").dictType("STATIC").dictSource("TY_SF").build());
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("impdstrz").modifyProperty("impdstrzName").dictType("STATIC").dictSource("TY_SF").build());
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("ishvbrrg").modifyProperty("ishvbrrgName").dictType("STATIC").dictSource("YW_TY").build());
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("dvtp").modifyProperty("dvtpName").dictType("STATIC").dictSource("DVTP").build());
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("blsys").modifyProperty("blsysName").dictType("STATIC").dictSource("BLSYS").build());
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("chngrd").modifyProperty("chngrdName").dictType("STATIC").dictSource("CHNGRD").build());
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("cntp").modifyProperty("cntpName").dictType("STATIC").dictSource("CNTP").build());
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("dmat").modifyProperty("dmatName").dictType("STATIC").dictSource("DMAT").build());
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("dmtp").modifyProperty("dmtpName").dictType("STATIC").dictSource("DMTP").build());
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("engtp").modifyProperty("engtpName").dictType("STATIC").dictSource("ENGTP").build());
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("fn").modifyProperty("fnName").dictType("STATIC").dictSource("ENG_FN").build());
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("prgr").modifyProperty("prgrName").dictType("STATIC").dictSource("PRGR").build());
+
+
+ }
+
+
static {
ENG_CODE_NAME_FIELD_MAP.put("baseId", "baseName");
ENG_CODE_NAME_FIELD_MAP.put("hbrvcd", "hbrvcdName");
@@ -252,10 +299,11 @@ public class SdEngInfoBHServiceImpl extends ServiceImpl impleme
CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("dtin").modifyProperty("dtinName").dictType("STATIC").dictSource("DTIN").build());
CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("bldsttCode").modifyProperty("bldsttCodeName").dictType("STATIC").dictSource("BLDSTT_CODE").build());
// CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("dtinType").modifyProperty("dtinTypeName").dictType("STATIC").dictSource("DTIN_TYPE").build());
- CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("sttp").modifyProperty("sttpName").dictType("DYNAMIC").dictSource("SD_STTP_B").codeColumn("STTP_CODE").nameColumn("STTP_NAME").filter("NVL(IS_DELETED, 0) = 0 ").build());
- CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("baseId").modifyProperty("baseName").dictType("DYNAMIC").dictSource("SD_HYDROBASE").codeColumn("BASEID").nameColumn("BASENAME").filter("NVL(IS_DELETED, 0) = 0 ").build());
- CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("rstcd").modifyProperty("ennm").dictType("DYNAMIC").dictSource("SD_ENGINFO_B_H").codeColumn("STCD").nameColumn("ENNM").filter("NVL(IS_DELETED, 0) = 0 ").build());
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("sttp").modifyProperty("sttpName").dictType("DYNAMIC").dictSource("SD_STTP_B").codeColumn("STTP_CODE").nameColumn("STTP_NAME").filter("IS_DELETED = 0 ").build());
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("baseId").modifyProperty("baseName").dictType("DYNAMIC").dictSource("SD_HYDROBASE").codeColumn("BASEID").nameColumn("BASENAME").filter("IS_DELETED = 0 ").build());
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("rstcd").modifyProperty("ennm").dictType("DYNAMIC").dictSource("SD_ENGINFO_B_H").codeColumn("STCD").nameColumn("ENNM").filter("IS_DELETED = 0 ").build());
}
@Override
diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdFbrdBHServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdFbrdBHServiceImpl.java
index ba5ee0e4..976942db 100644
--- a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdFbrdBHServiceImpl.java
+++ b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdFbrdBHServiceImpl.java
@@ -48,9 +48,9 @@ public class SdFbrdBHServiceImpl extends ServiceImpl i
CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("dtin").modifyProperty("dtinName").dictType("STATIC").dictSource("DTIN").build());
CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("bldsttCode").modifyProperty("bldsttCodeName").dictType("STATIC").dictSource("BLDSTT_CODE").build());
// CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("dtinType").modifyProperty("dtinTypeName").dictType("STATIC").dictSource("DTIN_TYPE").build());
- CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("sttp").modifyProperty("sttpName").dictType("DYNAMIC").dictSource("SD_STTP_B").codeColumn("STTP_CODE").nameColumn("STTP_NAME").filter("NVL(IS_DELETED, 0) = 0 ").build());
- CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("baseId").modifyProperty("baseName").dictType("DYNAMIC").dictSource("SD_HYDROBASE").codeColumn("BASEID").nameColumn("BASENAME").filter("NVL(IS_DELETED, 0) = 0 ").build());
- CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("rstcd").modifyProperty("ennm").dictType("DYNAMIC").dictSource("SD_ENGINFO_B_H").codeColumn("STCD").nameColumn("ENNM").filter("NVL(IS_DELETED, 0) = 0 ").build());
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("sttp").modifyProperty("sttpName").dictType("DYNAMIC").dictSource("SD_STTP_B").codeColumn("STTP_CODE").nameColumn("STTP_NAME").filter("IS_DELETED = 0 ").build());
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("baseId").modifyProperty("baseName").dictType("DYNAMIC").dictSource("SD_HYDROBASE").codeColumn("BASEID").nameColumn("BASENAME").filter("IS_DELETED = 0 ").build());
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("rstcd").modifyProperty("ennm").dictType("DYNAMIC").dictSource("SD_ENGINFO_B_H").codeColumn("STCD").nameColumn("ENNM").filter("IS_DELETED = 0 ").build());
}
@Override
diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdFhbtBHServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdFhbtBHServiceImpl.java
index 5ef06658..b4949034 100644
--- a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdFhbtBHServiceImpl.java
+++ b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdFhbtBHServiceImpl.java
@@ -51,9 +51,9 @@ public class SdFhbtBHServiceImpl extends ServiceImpl i
CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("dtin").modifyProperty("dtinName").dictType("STATIC").dictSource("DTIN").build());
// CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("bldsttCode").modifyProperty("bldsttCodeName").dictType("STATIC").dictSource("BLDSTT_CODE").build());
// CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("dtinType").modifyProperty("dtinTypeName").dictType("STATIC").dictSource("DTIN_TYPE").build());
-// CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("sttp").modifyProperty("sttpName").dictType("DYNAMIC").dictSource("SD_STTP_B").codeColumn("STTP_CODE").nameColumn("STTP_NAME").filter("NVL(IS_DELETED, 0) = 0 ").build());
- CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("baseId").modifyProperty("baseName").dictType("DYNAMIC").dictSource("SD_HYDROBASE").codeColumn("BASEID").nameColumn("BASENAME").filter("NVL(IS_DELETED, 0) = 0 ").build());
- CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("rstcd").modifyProperty("ennm").dictType("DYNAMIC").dictSource("SD_ENGINFO_B_H").codeColumn("STCD").nameColumn("ENNM").filter("NVL(IS_DELETED, 0) = 0 ").build());
+// CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("sttp").modifyProperty("sttpName").dictType("DYNAMIC").dictSource("SD_STTP_B").codeColumn("STTP_CODE").nameColumn("STTP_NAME").filter("IS_DELETED = 0 ").build());
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("baseId").modifyProperty("baseName").dictType("DYNAMIC").dictSource("SD_HYDROBASE").codeColumn("BASEID").nameColumn("BASENAME").filter("IS_DELETED = 0 ").build());
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("rstcd").modifyProperty("ennm").dictType("DYNAMIC").dictSource("SD_ENGINFO_B_H").codeColumn("STCD").nameColumn("ENNM").filter("IS_DELETED = 0 ").build());
CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("rvcd").modifyProperty("rvnm").dictType("DYNAMIC").dictSource("V_SD_RVCD_DIC_TREE").codeColumn("RVCD").nameColumn("RVNM").build());
}
diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdFpssBHServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdFpssBHServiceImpl.java
index cf3bf019..3a09c579 100644
--- a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdFpssBHServiceImpl.java
+++ b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdFpssBHServiceImpl.java
@@ -63,9 +63,9 @@ public class SdFpssBHServiceImpl extends ServiceImpl i
CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("dtin").modifyProperty("dtinName").dictType("STATIC").dictSource("DTIN").build());
CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("bldsttCode").modifyProperty("bldsttCodeName").dictType("STATIC").dictSource("BLDSTT_CODE").build());
// CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("dtinType").modifyProperty("dtinTypeName").dictType("STATIC").dictSource("DTIN_TYPE").build());
- CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("sttp").modifyProperty("sttpName").dictType("DYNAMIC").dictSource("SD_STTP_B").codeColumn("STTP_CODE").nameColumn("STTP_NAME").filter("NVL(IS_DELETED, 0) = 0 ").build());
- CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("baseId").modifyProperty("baseName").dictType("DYNAMIC").dictSource("SD_HYDROBASE").codeColumn("BASEID").nameColumn("BASENAME").filter("NVL(IS_DELETED, 0) = 0 ").build());
- CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("rstcd").modifyProperty("ennm").dictType("DYNAMIC").dictSource("SD_ENGINFO_B_H").codeColumn("STCD").nameColumn("ENNM").filter("NVL(IS_DELETED, 0) = 0 ").build());
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("sttp").modifyProperty("sttpName").dictType("DYNAMIC").dictSource("SD_STTP_B").codeColumn("STTP_CODE").nameColumn("STTP_NAME").filter("IS_DELETED = 0 ").build());
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("baseId").modifyProperty("baseName").dictType("DYNAMIC").dictSource("SD_HYDROBASE").codeColumn("BASEID").nameColumn("BASENAME").filter("IS_DELETED = 0 ").build());
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("rstcd").modifyProperty("ennm").dictType("DYNAMIC").dictSource("SD_ENGINFO_B_H").codeColumn("STCD").nameColumn("ENNM").filter("IS_DELETED = 0 ").build());
CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("rvcd").modifyProperty("rvnm").dictType("DYNAMIC").dictSource("V_SD_RVCD_DIC_TREE").codeColumn("RVCD").nameColumn("RVNM").build());
CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("mway").modifyProperty("mwayName").dictType("STATIC").dictSource("MWAY").build());
CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("isUp").modifyProperty("isUpName").dictType("STATIC").dictSource("TY_SF").build());
diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdFpssrlRServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdFpssrlRServiceImpl.java
index 2b658fb2..1e30499f 100644
--- a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdFpssrlRServiceImpl.java
+++ b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdFpssrlRServiceImpl.java
@@ -6,8 +6,10 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yfd.platform.common.DataSourceRequest;
+import com.yfd.platform.qgc_base.domain.SdFpssrlAiR;
import com.yfd.platform.qgc_base.domain.SdFpssrlR;
import com.yfd.platform.qgc_base.domain.SdFpssrlRAiRequest;
+import com.yfd.platform.qgc_base.mapper.SdFpssrlAiRMapper;
import com.yfd.platform.qgc_base.mapper.SdFpssrlRMapper;
import com.yfd.platform.qgc_base.service.IMsOperationLogService;
import com.yfd.platform.qgc_base.service.ISdFpssrlRService;
@@ -35,6 +37,8 @@ public class SdFpssrlRServiceImpl extends ServiceImpl queryPageList(DataSourceRequest request) {
@@ -130,12 +134,13 @@ public class SdFpssrlRServiceImpl extends ServiceImpl processAiReportBatch(List requests) {
- List entities = new ArrayList<>();
+ public List processAiReportBatch(List requests) {
+ List entities = new ArrayList<>();
Date now = new Date();
for (SdFpssrlRAiRequest req : requests) {
- SdFpssrlR entity = new SdFpssrlR();
- entity.setStcd(req.getStcd());
+ SdFpssrlAiR entity = new SdFpssrlAiR();
+ entity.setStcd(req.getFwdx());
+ entity.setAiBoxCode(req.getStcd());
entity.setTm(req.getTm());
entity.setFtp(req.getFtp());
entity.setFcnt(req.getFcnt() != null ? req.getFcnt() : 1);
@@ -164,7 +169,7 @@ public class SdFpssrlRServiceImpl extends ServiceImpl i
CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("dtin").modifyProperty("dtinName").dictType("STATIC").dictSource("DTIN").build());
CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("bldsttCode").modifyProperty("bldsttCodeName").dictType("STATIC").dictSource("BLDSTT_CODE").build());
// CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("dtinType").modifyProperty("dtinTypeName").dictType("STATIC").dictSource("DTIN_TYPE").build());
- CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("sttp").modifyProperty("sttpName").dictType("DYNAMIC").dictSource("SD_STTP_B").codeColumn("STTP_CODE").nameColumn("STTP_NAME").filter("NVL(IS_DELETED, 0) = 0 ").build());
- CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("baseId").modifyProperty("baseName").dictType("DYNAMIC").dictSource("SD_HYDROBASE").codeColumn("BASEID").nameColumn("BASENAME").filter("NVL(IS_DELETED, 0) = 0 ").build());
- CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("rstcd").modifyProperty("ennm").dictType("DYNAMIC").dictSource("SD_ENGINFO_B_H").codeColumn("STCD").nameColumn("ENNM").filter("NVL(IS_DELETED, 0) = 0 ").build());
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("sttp").modifyProperty("sttpName").dictType("DYNAMIC").dictSource("SD_STTP_B").codeColumn("STTP_CODE").nameColumn("STTP_NAME").filter("IS_DELETED = 0 ").build());
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("baseId").modifyProperty("baseName").dictType("DYNAMIC").dictSource("SD_HYDROBASE").codeColumn("BASEID").nameColumn("BASENAME").filter("IS_DELETED = 0 ").build());
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("rstcd").modifyProperty("ennm").dictType("DYNAMIC").dictSource("SD_ENGINFO_B_H").codeColumn("STCD").nameColumn("ENNM").filter("IS_DELETED = 0 ").build());
CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("rvcd").modifyProperty("rvnm").dictType("DYNAMIC").dictSource("V_SD_RVCD_DIC_TREE").codeColumn("RVCD").nameColumn("RVNM").build());
CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("usfl").modifyProperty("usflName").dictType("STATIC").dictSource("USFL").build());
diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdOtweBHServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdOtweBHServiceImpl.java
index 8589aeb4..266c4bb4 100644
--- a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdOtweBHServiceImpl.java
+++ b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdOtweBHServiceImpl.java
@@ -47,9 +47,9 @@ public class SdOtweBHServiceImpl extends ServiceImpl i
CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("dtin").modifyProperty("dtinName").dictType("STATIC").dictSource("DTIN").build());
CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("bldsttCode").modifyProperty("bldsttCodeName").dictType("STATIC").dictSource("BLDSTT_CODE").build());
// CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("dtinType").modifyProperty("dtinTypeName").dictType("STATIC").dictSource("DTIN_TYPE").build());
- CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("sttp").modifyProperty("sttpName").dictType("DYNAMIC").dictSource("SD_STTP_B").codeColumn("STTP_CODE").nameColumn("STTP_NAME").filter("NVL(IS_DELETED, 0) = 0 ").build());
- CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("baseId").modifyProperty("baseName").dictType("DYNAMIC").dictSource("SD_HYDROBASE").codeColumn("BASEID").nameColumn("BASENAME").filter("NVL(IS_DELETED, 0) = 0 ").build());
- CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("rstcd").modifyProperty("ennm").dictType("DYNAMIC").dictSource("SD_ENGINFO_B_H").codeColumn("STCD").nameColumn("ENNM").filter("NVL(IS_DELETED, 0) = 0 ").build());
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("sttp").modifyProperty("sttpName").dictType("DYNAMIC").dictSource("SD_STTP_B").codeColumn("STTP_CODE").nameColumn("STTP_NAME").filter("IS_DELETED = 0 ").build());
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("baseId").modifyProperty("baseName").dictType("DYNAMIC").dictSource("SD_HYDROBASE").codeColumn("BASEID").nameColumn("BASENAME").filter("IS_DELETED = 0 ").build());
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("rstcd").modifyProperty("ennm").dictType("DYNAMIC").dictSource("SD_ENGINFO_B_H").codeColumn("STCD").nameColumn("ENNM").filter("IS_DELETED = 0 ").build());
CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("rvcd").modifyProperty("rvnm").dictType("DYNAMIC").dictSource("V_SD_RVCD_DIC_TREE").codeColumn("RVCD").nameColumn("RVNM").build());
CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("usfl").modifyProperty("usflName").dictType("STATIC").dictSource("USFL").build());
}
diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdSonarBHServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdSonarBHServiceImpl.java
index 0e1d337b..24438e9a 100644
--- a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdSonarBHServiceImpl.java
+++ b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdSonarBHServiceImpl.java
@@ -51,9 +51,9 @@ public class SdSonarBHServiceImpl extends ServiceImpl impleme
CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("dtin").modifyProperty("dtinName").dictType("STATIC").dictSource("DTIN").build());
CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("bldsttCode").modifyProperty("bldsttCodeName").dictType("STATIC").dictSource("BLDSTT_CODE").build());
// CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("dtinType").modifyProperty("dtinTypeName").dictType("STATIC").dictSource("DTIN_TYPE").build());
- CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("sttp").modifyProperty("sttpName").dictType("DYNAMIC").dictSource("SD_STTP_B").codeColumn("STTP_CODE").nameColumn("STTP_NAME").filter("NVL(IS_DELETED, 0) = 0 ").build());
- CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("baseId").modifyProperty("baseName").dictType("DYNAMIC").dictSource("SD_HYDROBASE").codeColumn("BASEID").nameColumn("BASENAME").filter("NVL(IS_DELETED, 0) = 0 ").build());
- CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("rstcd").modifyProperty("ennm").dictType("DYNAMIC").dictSource("SD_ENGINFO_B_H").codeColumn("STCD").nameColumn("ENNM").filter("NVL(IS_DELETED, 0) = 0 ").build());
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("sttp").modifyProperty("sttpName").dictType("DYNAMIC").dictSource("SD_STTP_B").codeColumn("STTP_CODE").nameColumn("STTP_NAME").filter("IS_DELETED = 0 ").build());
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("baseId").modifyProperty("baseName").dictType("DYNAMIC").dictSource("SD_HYDROBASE").codeColumn("BASEID").nameColumn("BASENAME").filter("IS_DELETED = 0 ").build());
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("rstcd").modifyProperty("ennm").dictType("DYNAMIC").dictSource("SD_ENGINFO_B_H").codeColumn("STCD").nameColumn("ENNM").filter("IS_DELETED = 0 ").build());
CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("rvcd").modifyProperty("rvnm").dictType("DYNAMIC").dictSource("V_SD_RVCD_DIC_TREE").codeColumn("RVCD").nameColumn("RVNM").build());
}
diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdVaBHServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdVaBHServiceImpl.java
index d90388ba..3e81ad52 100644
--- a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdVaBHServiceImpl.java
+++ b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdVaBHServiceImpl.java
@@ -50,9 +50,9 @@ public class SdVaBHServiceImpl extends ServiceImpl impleme
CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("dtin").modifyProperty("dtinName").dictType("STATIC").dictSource("DTIN").build());
CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("bldsttCode").modifyProperty("bldsttCodeName").dictType("STATIC").dictSource("BLDSTT_CODE").build());
CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("usfl").modifyProperty("usflName").dictType("STATIC").dictSource("USFL").build());
- CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("sttp").modifyProperty("sttpName").dictType("DYNAMIC").dictSource("SD_STTP_B").codeColumn("STTP_CODE").nameColumn("STTP_NAME").filter("NVL(IS_DELETED, 0) = 0 ").build());
- CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("baseId").modifyProperty("baseName").dictType("DYNAMIC").dictSource("SD_HYDROBASE").codeColumn("BASEID").nameColumn("BASENAME").filter("NVL(IS_DELETED, 0) = 0 ").build());
- CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("rstcd").modifyProperty("ennm").dictType("DYNAMIC").dictSource("SD_ENGINFO_B_H").codeColumn("STCD").nameColumn("ENNM").filter("NVL(IS_DELETED, 0) = 0 ").build());
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("sttp").modifyProperty("sttpName").dictType("DYNAMIC").dictSource("SD_STTP_B").codeColumn("STTP_CODE").nameColumn("STTP_NAME").filter("IS_DELETED = 0 ").build());
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("baseId").modifyProperty("baseName").dictType("DYNAMIC").dictSource("SD_HYDROBASE").codeColumn("BASEID").nameColumn("BASENAME").filter("IS_DELETED = 0 ").build());
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("rstcd").modifyProperty("ennm").dictType("DYNAMIC").dictSource("SD_ENGINFO_B_H").codeColumn("STCD").nameColumn("ENNM").filter("IS_DELETED = 0 ").build());
}
@Override
diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdVdinfoBServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdVdinfoBServiceImpl.java
index 01b739d0..02d1be85 100644
--- a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdVdinfoBServiceImpl.java
+++ b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdVdinfoBServiceImpl.java
@@ -49,9 +49,9 @@ public class SdVdinfoBServiceImpl extends ServiceImpl impleme
CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("dtin").modifyProperty("dtinName").dictType("STATIC").dictSource("DTIN").build());
CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("bldsttCode").modifyProperty("bldsttCodeName").dictType("STATIC").dictSource("BLDSTT_CODE").build());
// CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("dtinType").modifyProperty("dtinTypeName").dictType("STATIC").dictSource("DTIN_TYPE").build());
- CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("sttp").modifyProperty("sttpName").dictType("DYNAMIC").dictSource("SD_STTP_B").codeColumn("STTP_CODE").nameColumn("STTP_NAME").filter("NVL(IS_DELETED, 0) = 0 ").build());
- CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("baseId").modifyProperty("baseName").dictType("DYNAMIC").dictSource("SD_HYDROBASE").codeColumn("BASEID").nameColumn("BASENAME").filter("NVL(IS_DELETED, 0) = 0 ").build());
- CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("rstcd").modifyProperty("ennm").dictType("DYNAMIC").dictSource("SD_ENGINFO_B_H").codeColumn("STCD").nameColumn("ENNM").filter("NVL(IS_DELETED, 0) = 0 ").build());
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("sttp").modifyProperty("sttpName").dictType("DYNAMIC").dictSource("SD_STTP_B").codeColumn("STTP_CODE").nameColumn("STTP_NAME").filter("IS_DELETED = 0 ").build());
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("baseId").modifyProperty("baseName").dictType("DYNAMIC").dictSource("SD_HYDROBASE").codeColumn("BASEID").nameColumn("BASENAME").filter("IS_DELETED = 0 ").build());
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("rstcd").modifyProperty("ennm").dictType("DYNAMIC").dictSource("SD_ENGINFO_B_H").codeColumn("STCD").nameColumn("ENNM").filter("IS_DELETED = 0 ").build());
}
@Override
diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdWeBHServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdWeBHServiceImpl.java
index c71d4c39..63c4040d 100644
--- a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdWeBHServiceImpl.java
+++ b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdWeBHServiceImpl.java
@@ -49,9 +49,9 @@ public class SdWeBHServiceImpl extends ServiceImpl impleme
// CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("mway").modifyProperty("mwayName").dictType("STATIC").dictSource("MWAY").build());
CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("bldsttCode").modifyProperty("bldsttCodeName").dictType("STATIC").dictSource("BLDSTT_CODE").build());
// CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("dtinType").modifyProperty("dtinTypeName").dictType("STATIC").dictSource("DTIN_TYPE").build());
- CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("sttp").modifyProperty("sttpName").dictType("DYNAMIC").dictSource("SD_STTP_B").codeColumn("STTP_CODE").nameColumn("STTP_NAME").filter("NVL(IS_DELETED, 0) = 0 ").build());
- CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("baseId").modifyProperty("baseName").dictType("DYNAMIC").dictSource("SD_HYDROBASE").codeColumn("BASEID").nameColumn("BASENAME").filter("NVL(IS_DELETED, 0) = 0 ").build());
- CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("rstcd").modifyProperty("ennm").dictType("DYNAMIC").dictSource("SD_ENGINFO_B_H").codeColumn("STCD").nameColumn("ENNM").filter("NVL(IS_DELETED, 0) = 0 ").build());
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("sttp").modifyProperty("sttpName").dictType("DYNAMIC").dictSource("SD_STTP_B").codeColumn("STTP_CODE").nameColumn("STTP_NAME").filter("IS_DELETED = 0 ").build());
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("baseId").modifyProperty("baseName").dictType("DYNAMIC").dictSource("SD_HYDROBASE").codeColumn("BASEID").nameColumn("BASENAME").filter("IS_DELETED = 0 ").build());
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("rstcd").modifyProperty("ennm").dictType("DYNAMIC").dictSource("SD_ENGINFO_B_H").codeColumn("STCD").nameColumn("ENNM").filter("IS_DELETED = 0 ").build());
CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("rvcd").modifyProperty("rvnm").dictType("DYNAMIC").dictSource("V_SD_RVCD_DIC_TREE").codeColumn("RVCD").nameColumn("RVNM").build());
}
diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdWqBHServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdWqBHServiceImpl.java
index c474ddd0..1dbbf910 100644
--- a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdWqBHServiceImpl.java
+++ b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdWqBHServiceImpl.java
@@ -53,9 +53,9 @@ public class SdWqBHServiceImpl extends ServiceImpl impleme
CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("bldsttCode").modifyProperty("bldsttCodeName").dictType("STATIC").dictSource("BLDSTT_CODE").build());
CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("wwqtg").modifyProperty("wwqtgName").dictType("STATIC").dictSource("WWQTG").build());
CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("dtinType").modifyProperty("dtinTypeName").dictType("STATIC").dictSource("DTIN_TYPE").build());
- CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("sttp").modifyProperty("sttpName").dictType("DYNAMIC").dictSource("SD_STTP_B").codeColumn("STTP_CODE").nameColumn("STTP_NAME").filter("NVL(IS_DELETED, 0) = 0 ").build());
- CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("baseId").modifyProperty("baseName").dictType("DYNAMIC").dictSource("SD_HYDROBASE").codeColumn("BASEID").nameColumn("BASENAME").filter("NVL(IS_DELETED, 0) = 0 ").build());
- CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("rstcd").modifyProperty("ennm").dictType("DYNAMIC").dictSource("SD_ENGINFO_B_H").codeColumn("STCD").nameColumn("ENNM").filter("NVL(IS_DELETED, 0) = 0 ").build());
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("sttp").modifyProperty("sttpName").dictType("DYNAMIC").dictSource("SD_STTP_B").codeColumn("STTP_CODE").nameColumn("STTP_NAME").filter("IS_DELETED = 0 ").build());
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("baseId").modifyProperty("baseName").dictType("DYNAMIC").dictSource("SD_HYDROBASE").codeColumn("BASEID").nameColumn("BASENAME").filter("IS_DELETED = 0 ").build());
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("rstcd").modifyProperty("ennm").dictType("DYNAMIC").dictSource("SD_ENGINFO_B_H").codeColumn("STCD").nameColumn("ENNM").filter("IS_DELETED = 0 ").build());
}
@Override
diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdWtBHServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdWtBHServiceImpl.java
index 751f99aa..c179bc38 100644
--- a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdWtBHServiceImpl.java
+++ b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/SdWtBHServiceImpl.java
@@ -54,9 +54,9 @@ public class SdWtBHServiceImpl extends ServiceImpl impleme
CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("mway").modifyProperty("mwayName").dictType("STATIC").dictSource("MWAY").build());
CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("bldsttCode").modifyProperty("bldsttCodeName").dictType("STATIC").dictSource("BLDSTT_CODE").build());
CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("dtinType").modifyProperty("dtinTypeName").dictType("STATIC").dictSource("DTIN_TYPE").build());
- CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("sttp").modifyProperty("sttpName").dictType("DYNAMIC").dictSource("SD_STTP_B").codeColumn("STTP_CODE").nameColumn("STTP_NAME").filter("NVL(IS_DELETED, 0) = 0 ").build());
- CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("baseId").modifyProperty("baseName").dictType("DYNAMIC").dictSource("SD_HYDROBASE").codeColumn("BASEID").nameColumn("BASENAME").filter("NVL(IS_DELETED, 0) = 0 ").build());
- CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("rstcd").modifyProperty("ennm").dictType("DYNAMIC").dictSource("SD_ENGINFO_B_H").codeColumn("STCD").nameColumn("ENNM").filter("NVL(IS_DELETED, 0) = 0 ").build());
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("sttp").modifyProperty("sttpName").dictType("DYNAMIC").dictSource("SD_STTP_B").codeColumn("STTP_CODE").nameColumn("STTP_NAME").filter("IS_DELETED = 0 ").build());
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("baseId").modifyProperty("baseName").dictType("DYNAMIC").dictSource("SD_HYDROBASE").codeColumn("BASEID").nameColumn("BASENAME").filter("IS_DELETED = 0 ").build());
+ CODE_TO_NAME_META_LIST.add(CodeToNameMetadataBo.builder().codeProperty("rstcd").modifyProperty("ennm").dictType("DYNAMIC").dictSource("SD_ENGINFO_B_H").codeColumn("STCD").nameColumn("ENNM").filter("IS_DELETED = 0 ").build());
}
diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fb/controller/FbStationController.java b/backend/src/main/java/com/yfd/platform/qgc_env/fb/controller/FbStationController.java
index e68e22f5..71aeb46f 100644
--- a/backend/src/main/java/com/yfd/platform/qgc_env/fb/controller/FbStationController.java
+++ b/backend/src/main/java/com/yfd/platform/qgc_env/fb/controller/FbStationController.java
@@ -1,12 +1,15 @@
package com.yfd.platform.qgc_env.fb.controller;
import com.yfd.platform.common.DataSourceRequest;
+import com.yfd.platform.common.DataSourceResult;
import com.yfd.platform.config.ResponseResult;
+import com.yfd.platform.qgc_env.fb.entity.vo.BreedStageVO;
import com.yfd.platform.qgc_env.fb.service.FbStationService;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
+import cn.hutool.core.util.StrUtil;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
@@ -15,6 +18,8 @@ import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
+import java.util.List;
+
@RestController
@RequestMapping("/fb")
@Tag(name = "鱼类增殖站模块")
@@ -60,6 +65,84 @@ public class FbStationController {
return ResponseResult.successData(fbStationService.getYearRpStatistics(year));
}
+ @PostMapping("/bsmfr/GetKendoListCust")
+ @Operation(summary = "亲鱼档案管理记录列表")
+ public ResponseResult getBsmfRKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
+ return ResponseResult.successData(fbStationService.getBsmfRList(dataSourceRequest));
+ }
+
+ @PostMapping("/bsdeathr/GetKendoListCust")
+ @Operation(summary = "亲鱼死亡记录列表")
+ public ResponseResult getBsdeathRKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
+ return ResponseResult.successData(fbStationService.getBsdeathRList(dataSourceRequest));
+ }
+
+ @PostMapping("/bsctmob/GetKendoListCust")
+ @Operation(summary = "亲鱼培育方式列表")
+ public ResponseResult getBsctmoBKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
+ return ResponseResult.successData(fbStationService.getBsctmoBList(dataSourceRequest));
+ }
+
+ @PostMapping("/fbbwtr/GetKendoListCust")
+ @Operation(summary = "亲鱼培育水温观测记录列表")
+ public ResponseResult getFbbwtRKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
+ return ResponseResult.successData(fbStationService.getFbbwtRList(dataSourceRequest));
+ }
+
+ @PostMapping("/fbcwqr/GetKendoListCust")
+ @Operation(summary = "亲鱼培育水质监测记录列表")
+ public ResponseResult getFbcwqRKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
+ return ResponseResult.successData(fbStationService.getFbcwqRList(dataSourceRequest));
+ }
+
+ @PostMapping("/bsrfir/GetKendoListCust")
+ @Operation(summary = "亲鱼培育投喂记录列表")
+ public ResponseResult getBsrfiRKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
+ return ResponseResult.successData(fbStationService.getBsrfiRList(dataSourceRequest));
+ }
+
+ @PostMapping("/outfishr/GetKendoListCust")
+ @Operation(summary = "淘汰亲鱼基本信息记录列表")
+ public ResponseResult getOutfishRKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
+ return ResponseResult.successData(fbStationService.getOutfishRList(dataSourceRequest));
+ }
+
+ @PostMapping("/fishartinlr/GetKendoListCust")
+ @Operation(summary = "鱼类人工催产记录列表")
+ public ResponseResult getFishartinlRKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
+ return ResponseResult.successData(fbStationService.getFishartinlRList(dataSourceRequest));
+ }
+
+ @PostMapping("/fishhatchrecr/GetKendoListCust")
+ @Operation(summary = "鱼类受精卵孵化过程记录列表")
+ public ResponseResult getFishhatchrecRKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
+ return ResponseResult.successData(fbStationService.getFishhatchrecRList(dataSourceRequest));
+ }
+
+ @PostMapping("/fishhatchpror/GetKendoListCust")
+ @Operation(summary = "鱼类孵化过程巡查记录列表")
+ public ResponseResult getFishhatchproRKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
+ return ResponseResult.successData(fbStationService.getFishhatchproRList(dataSourceRequest));
+ }
+
+ @PostMapping("/scwemr/GetKendoListCust")
+ @Operation(summary = "苗种培育水环境监测记录列表")
+ public ResponseResult getScwemRKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
+ return ResponseResult.successData(fbStationService.getScwemRList(dataSourceRequest));
+ }
+
+ @PostMapping("/fishbreedr/GetKendoListCust")
+ @Operation(summary = "鱼苗和鱼种培育记录列表")
+ public ResponseResult getFishbreedRKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
+ return ResponseResult.successData(fbStationService.getFishbreedRList(dataSourceRequest));
+ }
+
+ @PostMapping("/fishdpacr/GetKendoListCust")
+ @Operation(summary = "鱼病防治记录列表")
+ public ResponseResult getFishdpacRKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
+ return ResponseResult.successData(fbStationService.getFishdpacRList(dataSourceRequest));
+ }
+
@PostMapping("/bsmfr/qgc/GetKendoListCust")
@Operation(summary = "(全过程)增殖站二级页面: 亲鱼选配与培育->亲鱼信息")
public ResponseResult getBsmfrQgcKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
@@ -79,6 +162,38 @@ public class FbStationController {
return ResponseResult.successData(fbStationService.getFbRelatedYrByStcd(stcd));
}
+ @PostMapping("/station/eng/GetAggregateData")
+ @Operation(summary = "电站放流统计-返回有数据的年份")
+ public ResponseResult getAggregateData(@RequestBody DataSourceRequest dataSourceRequest) {
+ return ResponseResult.successData(fbStationService.getAggregateData(dataSourceRequest));
+ }
+
+ @PostMapping("/station/eng/GetKendoListCust")
+ @Operation(summary = "电站放流统计")
+ public ResponseResult getEngKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
+ return ResponseResult.successData(fbStationService.getEngKendoListCust(dataSourceRequest));
+ }
+
+ @PostMapping("/breedStage/GetKendoListCust")
+ @Operation(summary = "条件过滤数据列表定制")
+ public ResponseResult getBreedStageKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
+ String stcd = null;
+ List filters = dataSourceRequest.getFilter().getFilters();
+ for (DataSourceRequest.FilterDescriptor filter : filters) {
+ if ("stcd".equals(filter.getField())) {
+ stcd = (String) filter.getValue();
+ }
+ }
+ if (StrUtil.isEmpty(stcd)) {
+ return ResponseResult.error("增殖站stcd不能为空!");
+ }
+ List breedStageList = fbStationService.getBreedStageList(stcd);
+ DataSourceResult dataSourceResult = new DataSourceResult<>();
+ dataSourceResult.setData(breedStageList);
+ dataSourceResult.setTotal(breedStageList.size());
+ return ResponseResult.successData(dataSourceResult);
+ }
+
@PostMapping("/msfbrdm/fbFlData/GetKendoListCust")
@Operation(summary = "增殖站增殖情况(app)")
public ResponseResult getFbFlData(@RequestBody DataSourceRequest dataSourceRequest) {
diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fb/entity/vo/BreedStageVO.java b/backend/src/main/java/com/yfd/platform/qgc_env/fb/entity/vo/BreedStageVO.java
new file mode 100644
index 00000000..96e50ad1
--- /dev/null
+++ b/backend/src/main/java/com/yfd/platform/qgc_env/fb/entity/vo/BreedStageVO.java
@@ -0,0 +1,30 @@
+package com.yfd.platform.qgc_env.fb.entity.vo;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+/**
+ * 鱼类增殖阶段
+ */
+@Data
+@Accessors(chain = true)
+public class BreedStageVO {
+
+ /** 增殖站编码 */
+ private String stcd;
+
+ /** 阶段名称 */
+ private String key;
+
+ /** 阶段状态:1=有数据 2=无数据 */
+ private String value;
+
+ /** 是否为最新数据 */
+ private Boolean newest;
+
+ /** 最新表 */
+ private String newSurface;
+
+ /** 主菜单 */
+ private String firstGrade;
+}
diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fb/entity/vo/FbBsctmoBVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/fb/entity/vo/FbBsctmoBVo.java
new file mode 100644
index 00000000..23def6a5
--- /dev/null
+++ b/backend/src/main/java/com/yfd/platform/qgc_env/fb/entity/vo/FbBsctmoBVo.java
@@ -0,0 +1,76 @@
+package com.yfd.platform.qgc_env.fb.entity.vo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 亲鱼培育方式 VO
+ */
+@Data
+public class FbBsctmoBVo {
+
+ /** 主键 */
+ private String id;
+
+ /** 设施编码 */
+ private String stcd;
+
+ /** 鱼池编号 */
+ private String fpnum;
+
+ /** 鱼池名称 */
+ private String fpName;
+
+ /** 鱼种类 */
+ private String ftp;
+
+ /** 鱼类名称 */
+ private String ftpName;
+
+ /** 数量(尾) */
+ private Long value;
+
+ /** 全长(cm) */
+ private BigDecimal length;
+
+ /** 体重(g) */
+ private BigDecimal weight;
+
+ /** 培育方式:1=流水单养 2=流水混养 3=静水 4=循环水 */
+ private Integer ctmo;
+
+ /** 培育方式名称 */
+ private String ctmoName;
+
+ /** 放养密度 */
+ private String skds;
+
+ /** 体重范围值 */
+ private String fwgh;
+
+ /** 记录人 */
+ private String recorder;
+
+ /** 创建人 */
+ private String recordUser;
+
+ /** 创建时间 */
+ private Date recordTime;
+
+ /** 更新人 */
+ private String modifyUser;
+
+ /** 更新时间 */
+ private Date modifyTime;
+
+ /** 是否已删除 */
+ private Integer isDeleted;
+
+ /** 删除人 */
+ private String deleteUser;
+
+ /** 删除时间 */
+ private Date deleteTime;
+}
diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fb/entity/vo/FbBsdeathRVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/fb/entity/vo/FbBsdeathRVo.java
new file mode 100644
index 00000000..6a2fd409
--- /dev/null
+++ b/backend/src/main/java/com/yfd/platform/qgc_env/fb/entity/vo/FbBsdeathRVo.java
@@ -0,0 +1,79 @@
+package com.yfd.platform.qgc_env.fb.entity.vo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 亲鱼死亡记录 VO
+ */
+@Data
+public class FbBsdeathRVo {
+
+ /** 主键 */
+ private String id;
+
+ /** 设施编码 */
+ private String stcd;
+
+ /** 死亡日期 */
+ private Date tm;
+
+ /** 鱼池编号 */
+ private String fpnum;
+
+ /** 鱼池名称 */
+ private String fpName;
+
+ /** 鱼种类 */
+ private String ftp;
+
+ /** 鱼类名称 */
+ private String ftpName;
+
+ /** 标记编号 */
+ private String signnum;
+
+ /** 全长(cm) */
+ private BigDecimal length;
+
+ /** 体重(g) */
+ private BigDecimal weight;
+
+ /** 死亡症状 */
+ private String spod;
+
+ /** 死亡诊断 */
+ private String deathd;
+
+ /** 记录人 */
+ private String recorder;
+
+ /** 数量(尾) */
+ private Long value;
+
+ /** 附件ID */
+ private String fid;
+
+ /** 创建人 */
+ private String recordUser;
+
+ /** 创建时间 */
+ private Date recordTime;
+
+ /** 更新人 */
+ private String modifyUser;
+
+ /** 更新时间 */
+ private Date modifyTime;
+
+ /** 是否已删除 */
+ private Integer isDeleted;
+
+ /** 删除人 */
+ private String deleteUser;
+
+ /** 删除时间 */
+ private Date deleteTime;
+}
diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fb/entity/vo/FbBsmfRVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/fb/entity/vo/FbBsmfRVo.java
new file mode 100644
index 00000000..fbe1c69b
--- /dev/null
+++ b/backend/src/main/java/com/yfd/platform/qgc_env/fb/entity/vo/FbBsmfRVo.java
@@ -0,0 +1,82 @@
+package com.yfd.platform.qgc_env.fb.entity.vo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 亲鱼档案管理记录 VO
+ */
+@Data
+public class FbBsmfRVo {
+
+ /** 主键 */
+ private String id;
+
+ /** 设施编码 */
+ private String stcd;
+
+ /** 引进日期 */
+ private Date tm;
+
+ /** 鱼种类 */
+ private String ftp;
+
+ /** 鱼类名称 */
+ private String ftpName;
+
+ /** 亲鱼来源 */
+ private String bssr;
+
+ /** 亲鱼来源名称 */
+ private String bssrName;
+
+ /** 全长(cm) */
+ private BigDecimal length;
+
+ /** 体重(g) */
+ private BigDecimal weight;
+
+ /** 鱼龄 */
+ private BigDecimal age;
+
+ /** 性别:1=雄鱼 2=雌鱼 */
+ private Integer sex;
+
+ /** 性别名称 */
+ private String sexName;
+
+ /** 标记编号 */
+ private String signnum;
+
+ /** 记录人 */
+ private String recorder;
+
+ /** 数量 */
+ private Long value;
+
+ /** 附件ID */
+ private String fid;
+
+ /** 创建人 */
+ private String recordUser;
+
+ /** 创建时间 */
+ private Date recordTime;
+
+ /** 更新人 */
+ private String modifyUser;
+
+ /** 更新时间 */
+ private Date modifyTime;
+
+ /** 是否已删除 */
+ private Integer isDeleted;
+
+ /** 删除人 */
+ private String deleteUser;
+
+ /** 删除时间 */
+ private Date deleteTime;
+}
diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fb/entity/vo/FbBsrfiRVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/fb/entity/vo/FbBsrfiRVo.java
new file mode 100644
index 00000000..fde1f547
--- /dev/null
+++ b/backend/src/main/java/com/yfd/platform/qgc_env/fb/entity/vo/FbBsrfiRVo.java
@@ -0,0 +1,73 @@
+package com.yfd.platform.qgc_env.fb.entity.vo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 亲鱼培育投喂记录 VO
+ */
+@Data
+public class FbBsrfiRVo {
+
+ /** 主键 */
+ private String id;
+
+ /** 设施编码 */
+ private String stcd;
+
+ /** 鱼池编号 */
+ private String fpnum;
+
+ /** 鱼种类 */
+ private String ftp;
+
+ /** 投喂日期 */
+ private Date tm;
+
+ /** 饲料种类 */
+ private String ftype;
+
+ /** 投食量(g) */
+ private BigDecimal cfe;
+
+ /** 水交换频次(次/d) */
+ private Long warfre;
+
+ /** 记录人 */
+ private String recorder;
+
+ /** 总体量(g) */
+ private BigDecimal tbw;
+
+ /** 日投喂率(%) */
+ private BigDecimal dfr;
+
+ /** 摄食情况 */
+ private String fdi;
+
+ /** 附件ID */
+ private String fid;
+
+ /** 创建人 */
+ private String recordUser;
+
+ /** 创建时间 */
+ private Date recordTime;
+
+ /** 更新人 */
+ private String modifyUser;
+
+ /** 更新时间 */
+ private Date modifyTime;
+
+ /** 是否已删除 */
+ private Integer isDeleted;
+
+ /** 删除人 */
+ private String deleteUser;
+
+ /** 删除时间 */
+ private Date deleteTime;
+}
diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fb/entity/vo/FbEngFishVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/fb/entity/vo/FbEngFishVo.java
new file mode 100644
index 00000000..581f109b
--- /dev/null
+++ b/backend/src/main/java/com/yfd/platform/qgc_env/fb/entity/vo/FbEngFishVo.java
@@ -0,0 +1,22 @@
+package com.yfd.platform.qgc_env.fb.entity.vo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 电站放流统计-有数据的年份
+ */
+@Data
+public class FbEngFishVo {
+ /** 电站编码 */
+ private String stcd;
+ /** 电站名称 */
+ private String ennm;
+ /** 计划放流尾数 */
+ private BigDecimal fcntjh;
+ /** 实际放流尾数 */
+ private BigDecimal fcntjc;
+ /** 计划放流日期(年份) */
+ private String plansd;
+}
diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fb/entity/vo/FbFbbwtRVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/fb/entity/vo/FbFbbwtRVo.java
new file mode 100644
index 00000000..c592faee
--- /dev/null
+++ b/backend/src/main/java/com/yfd/platform/qgc_env/fb/entity/vo/FbFbbwtRVo.java
@@ -0,0 +1,64 @@
+package com.yfd.platform.qgc_env.fb.entity.vo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 亲鱼培育水温观测记录 VO
+ */
+@Data
+public class FbFbbwtRVo {
+
+ /** 主键 */
+ private String id;
+
+ /** 设施编码 */
+ private String stcd;
+
+ /** 观测日期 */
+ private Date tm;
+
+ /** 鱼池编号 */
+ private String fpnum;
+
+ /** 鱼池名称 */
+ private String fpName;
+
+ /** 8点水温 */
+ private BigDecimal wte;
+
+ /** 14点水温 */
+ private BigDecimal wtf;
+
+ /** 20点水温 */
+ private BigDecimal wtt;
+
+ /** 记录人 */
+ private String recorder;
+
+ /** 附件ID */
+ private String fid;
+
+ /** 创建人 */
+ private String recordUser;
+
+ /** 创建时间 */
+ private Date recordTime;
+
+ /** 更新人 */
+ private String modifyUser;
+
+ /** 更新时间 */
+ private Date modifyTime;
+
+ /** 是否已删除 */
+ private Integer isDeleted;
+
+ /** 删除人 */
+ private String deleteUser;
+
+ /** 删除时间 */
+ private Date deleteTime;
+}
diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fb/entity/vo/FbFbcwqRVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/fb/entity/vo/FbFbcwqRVo.java
new file mode 100644
index 00000000..20eab584
--- /dev/null
+++ b/backend/src/main/java/com/yfd/platform/qgc_env/fb/entity/vo/FbFbcwqRVo.java
@@ -0,0 +1,70 @@
+package com.yfd.platform.qgc_env.fb.entity.vo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 亲鱼培育水质监测记录 VO
+ */
+@Data
+public class FbFbcwqRVo {
+
+ /** 主键 */
+ private String id;
+
+ /** 设施编码 */
+ private String stcd;
+
+ /** 鱼池编号 */
+ private String fpnum;
+
+ /** 鱼池名称 */
+ private String fpName;
+
+ /** 氨氮(mg/L) */
+ private BigDecimal nh3n;
+
+ /** 亚硝酸盐(mg/L) */
+ private BigDecimal no2;
+
+ /** 溶解氧(mg/L) */
+ private BigDecimal dox;
+
+ /** pH */
+ private BigDecimal ph;
+
+ /** 记录人 */
+ private String recorder;
+
+ /** 是否符合标准 */
+ private Integer iffit;
+
+ /** 监测时段 */
+ private Date tm;
+
+ /** 附件ID */
+ private String fid;
+
+ /** 创建人 */
+ private String recordUser;
+
+ /** 创建时间 */
+ private Date recordTime;
+
+ /** 更新人 */
+ private String modifyUser;
+
+ /** 更新时间 */
+ private Date modifyTime;
+
+ /** 是否已删除 */
+ private Integer isDeleted;
+
+ /** 删除人 */
+ private String deleteUser;
+
+ /** 删除时间 */
+ private Date deleteTime;
+}
diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fb/entity/vo/FbFishartinlRVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/fb/entity/vo/FbFishartinlRVo.java
new file mode 100644
index 00000000..b5abdba7
--- /dev/null
+++ b/backend/src/main/java/com/yfd/platform/qgc_env/fb/entity/vo/FbFishartinlRVo.java
@@ -0,0 +1,88 @@
+package com.yfd.platform.qgc_env.fb.entity.vo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 鱼类人工催产记录 VO
+ */
+@Data
+public class FbFishartinlRVo {
+
+ /** 主键 */
+ private String id;
+
+ /** 设施编码 */
+ private String stcd;
+
+ /** 鱼种类 */
+ private String ftp;
+
+ /** 催产日期 */
+ private Date tm;
+
+ /** 雌鱼数量 */
+ private Long ffisht;
+
+ /** 雌鱼催产剂种类 */
+ private Integer fpitocintype;
+
+ /** 雌鱼总剂量 */
+ private BigDecimal fdose;
+
+ /** 雌鱼注射方式 */
+ private String finjmo;
+
+ /** 气温(℃) */
+ private BigDecimal air;
+
+ /** 水温(℃) */
+ private BigDecimal wartem;
+
+ /** 溶解氧(mg/L) */
+ private BigDecimal dox;
+
+ /** 记录人 */
+ private String recorder;
+
+ /** 性别:1=雄鱼 2=雌鱼 */
+ private Integer sex;
+
+ /** 附件ID */
+ private String fid;
+
+ /** 雄鱼注射方式 */
+ private Long mfisht;
+
+ /** 雄鱼催产剂种类 */
+ private Integer mpitocintype;
+
+ /** 雄鱼总剂量 */
+ private BigDecimal mdose;
+
+ /** 雄鱼注射方式 */
+ private String minjmo;
+
+ /** 创建人 */
+ private String recordUser;
+
+ /** 创建时间 */
+ private Date recordTime;
+
+ /** 更新人 */
+ private String modifyUser;
+
+ /** 更新时间 */
+ private Date modifyTime;
+
+ /** 是否已删除 */
+ private Integer isDeleted;
+
+ /** 删除人 */
+ private String deleteUser;
+
+ /** 删除时间 */
+ private Date deleteTime;
+}
diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fb/entity/vo/FbFishbreedRVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/fb/entity/vo/FbFishbreedRVo.java
new file mode 100644
index 00000000..50090b81
--- /dev/null
+++ b/backend/src/main/java/com/yfd/platform/qgc_env/fb/entity/vo/FbFishbreedRVo.java
@@ -0,0 +1,76 @@
+package com.yfd.platform.qgc_env.fb.entity.vo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 鱼苗和鱼种培育记录 VO
+ */
+@Data
+public class FbFishbreedRVo {
+
+ /** 主键 */
+ private String id;
+
+ /** 设施编码 */
+ private String stcd;
+
+ /** 培育日期 */
+ private Date tm;
+
+ /** 鱼池编号 */
+ private String farmno;
+
+ /** 鱼种类 */
+ private String ftp;
+
+ /** 数量(尾) */
+ private Long counts;
+
+ /** 平均规格全长(cm) */
+ private BigDecimal length;
+
+ /** 平均规格体重(g) */
+ private BigDecimal weight;
+
+ /** 饲料或饵料种类 */
+ private String feedtp;
+
+ /** 投食量(g) */
+ private BigDecimal foodint;
+
+ /** 日投食率(%) */
+ private BigDecimal dfr;
+
+ /** 摄食情况 */
+ private String fin;
+
+ /** 记录人 */
+ private String recorder;
+
+ /** 附件ID */
+ private String fid;
+
+ /** 创建人 */
+ private String recordUser;
+
+ /** 创建时间 */
+ private Date recordTime;
+
+ /** 更新人 */
+ private String modifyUser;
+
+ /** 更新时间 */
+ private Date modifyTime;
+
+ /** 是否已删除 */
+ private Integer isDeleted;
+
+ /** 删除人 */
+ private String deleteUser;
+
+ /** 删除时间 */
+ private Date deleteTime;
+}
diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fb/entity/vo/FbFishdpacRVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/fb/entity/vo/FbFishdpacRVo.java
new file mode 100644
index 00000000..dd97385c
--- /dev/null
+++ b/backend/src/main/java/com/yfd/platform/qgc_env/fb/entity/vo/FbFishdpacRVo.java
@@ -0,0 +1,79 @@
+package com.yfd.platform.qgc_env.fb.entity.vo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 鱼病防治记录表 VO
+ */
+@Data
+public class FbFishdpacRVo {
+
+ /** 主键 */
+ private String id;
+
+ /** 设施编码 */
+ private String stcd;
+
+ /** 鱼池编号 */
+ private String fpnum;
+
+ /** 鱼种类 */
+ private String ftp;
+
+ /** 平均体重(g) */
+ private BigDecimal weight;
+
+ /** 发病症状 */
+ private String symptoms;
+
+ /** 鱼药种类 */
+ private String fishdrugtype;
+
+ /** 用药方法 */
+ private Integer method;
+
+ /** 用药剂量(mg/kg) */
+ private BigDecimal dose;
+
+ /** 用药天数(d) */
+ private BigDecimal days;
+
+ /** 治疗效果 */
+ private Integer treateffect;
+
+ /** 记录人 */
+ private String recorder;
+
+ /** 日期 */
+ private Date tm;
+
+ /** 附件ID */
+ private String fid;
+
+ /** 备注 */
+ private String remark;
+
+ /** 创建人 */
+ private String recordUser;
+
+ /** 创建时间 */
+ private Date recordTime;
+
+ /** 更新人 */
+ private String modifyUser;
+
+ /** 更新时间 */
+ private Date modifyTime;
+
+ /** 是否已删除 */
+ private Integer isDeleted;
+
+ /** 删除人 */
+ private String deleteUser;
+
+ /** 删除时间 */
+ private Date deleteTime;
+}
diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fb/entity/vo/FbFishhatchproRVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/fb/entity/vo/FbFishhatchproRVo.java
new file mode 100644
index 00000000..fa52f101
--- /dev/null
+++ b/backend/src/main/java/com/yfd/platform/qgc_env/fb/entity/vo/FbFishhatchproRVo.java
@@ -0,0 +1,82 @@
+package com.yfd.platform.qgc_env.fb.entity.vo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 鱼类孵化过程巡查记录 VO
+ */
+@Data
+public class FbFishhatchproRVo {
+
+ /** 主键 */
+ private String id;
+
+ /** 设施编码 */
+ private String stcd;
+
+ /** 孵化设施编号 */
+ private String devno;
+
+ /** 记录时间 */
+ private Date recordtm;
+
+ /** 水温(℃) */
+ private BigDecimal wartem;
+
+ /** 与上一时段水温差(℃) */
+ private BigDecimal wtdiff;
+
+ /** 溶解氧(mg/L) */
+ private BigDecimal dox;
+
+ /** pH */
+ private BigDecimal ph;
+
+ /** 胚胎发育时期 */
+ private String empsta;
+
+ /** 水交换频次(次/d) */
+ private Long warfre;
+
+ /** 孵化密度是否均匀:0=否 1=是 */
+ private Integer iseven;
+
+ /** 记录人 */
+ private String recorder;
+
+ /** 备注 */
+ private String remarks;
+
+ /** 产卵时间 */
+ private Date spawntm;
+
+ /** 巡查时间 */
+ private Date tm;
+
+ /** 附件ID */
+ private String fid;
+
+ /** 创建人 */
+ private String recordUser;
+
+ /** 创建时间 */
+ private Date recordTime;
+
+ /** 更新人 */
+ private String modifyUser;
+
+ /** 更新时间 */
+ private Date modifyTime;
+
+ /** 是否已删除 */
+ private Integer isDeleted;
+
+ /** 删除人 */
+ private String deleteUser;
+
+ /** 删除时间 */
+ private Date deleteTime;
+}
diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fb/entity/vo/FbFishhatchrecRVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/fb/entity/vo/FbFishhatchrecRVo.java
new file mode 100644
index 00000000..f94f5875
--- /dev/null
+++ b/backend/src/main/java/com/yfd/platform/qgc_env/fb/entity/vo/FbFishhatchrecRVo.java
@@ -0,0 +1,73 @@
+package com.yfd.platform.qgc_env.fb.entity.vo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 鱼类受精卵孵化过程记录 VO
+ */
+@Data
+public class FbFishhatchrecRVo {
+
+ /** 主键 */
+ private String id;
+
+ /** 设施编码 */
+ private String stcd;
+
+ /** 鱼种类 */
+ private String ftp;
+
+ /** 亲鱼来源 */
+ private String fishsrc;
+
+ /** 鱼卵数量(万粒) */
+ private BigDecimal eggcount;
+
+ /** 受精率(%) */
+ private BigDecimal ferrate;
+
+ /** 孵化率(%) */
+ private BigDecimal hatchrate;
+
+ /** 出苗时长(h) */
+ private BigDecimal outhour;
+
+ /** 出苗数量(万尾) */
+ private BigDecimal outcount;
+
+ /** 出苗率(%) */
+ private BigDecimal outrate;
+
+ /** 记录人 */
+ private String recorder;
+
+ /** 孵化时间 */
+ private Date tm;
+
+ /** 附件ID */
+ private String fid;
+
+ /** 创建人 */
+ private String recordUser;
+
+ /** 创建时间 */
+ private Date recordTime;
+
+ /** 更新人 */
+ private String modifyUser;
+
+ /** 更新时间 */
+ private Date modifyTime;
+
+ /** 是否已删除 */
+ private Integer isDeleted;
+
+ /** 删除人 */
+ private String deleteUser;
+
+ /** 删除时间 */
+ private Date deleteTime;
+}
diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fb/entity/vo/FbOutfishRVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/fb/entity/vo/FbOutfishRVo.java
new file mode 100644
index 00000000..35d1c70a
--- /dev/null
+++ b/backend/src/main/java/com/yfd/platform/qgc_env/fb/entity/vo/FbOutfishRVo.java
@@ -0,0 +1,85 @@
+package com.yfd.platform.qgc_env.fb.entity.vo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 淘汰亲鱼基本信息记录 VO
+ */
+@Data
+public class FbOutfishRVo {
+
+ /** 主键 */
+ private String id;
+
+ /** 设施编码 */
+ private String stcd;
+
+ /** 录入时间 */
+ private Date recordertm;
+
+ /** 标记编号 */
+ private String signno;
+
+ /** 鱼种类 */
+ private String ftp;
+
+ /** 亲鱼来源 */
+ private String src;
+
+ /** 性别:1=雄鱼 2=雌鱼 */
+ private Integer sex;
+
+ /** 鱼龄 */
+ private BigDecimal age;
+
+ /** 全长(cm) */
+ private BigDecimal length;
+
+ /** 体重(g) */
+ private BigDecimal weight;
+
+ /** 繁殖年限 */
+ private Long agelmt;
+
+ /** 繁殖次数 */
+ private Long brecount;
+
+ /** 淘汰日期 */
+ private Date tm;
+
+ /** 淘汰原因 */
+ private String outrea;
+
+ /** 处置方式 */
+ private Integer hand;
+
+ /** 记录人 */
+ private String recorder;
+
+ /** 附件ID */
+ private String fid;
+
+ /** 创建人 */
+ private String recordUser;
+
+ /** 创建时间 */
+ private Date recordTime;
+
+ /** 更新人 */
+ private String modifyUser;
+
+ /** 更新时间 */
+ private Date modifyTime;
+
+ /** 是否已删除 */
+ private Integer isDeleted;
+
+ /** 删除人 */
+ private String deleteUser;
+
+ /** 删除时间 */
+ private Date deleteTime;
+}
diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fb/entity/vo/FbScwemRVo.java b/backend/src/main/java/com/yfd/platform/qgc_env/fb/entity/vo/FbScwemRVo.java
new file mode 100644
index 00000000..9f6f3517
--- /dev/null
+++ b/backend/src/main/java/com/yfd/platform/qgc_env/fb/entity/vo/FbScwemRVo.java
@@ -0,0 +1,73 @@
+package com.yfd.platform.qgc_env.fb.entity.vo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 苗种培育水环境监测记录表 VO
+ */
+@Data
+public class FbScwemRVo {
+
+ /** 主键 */
+ private String id;
+
+ /** 设施编码 */
+ private String stcd;
+
+ /** 监测日期 */
+ private Date tm;
+
+ /** 鱼池编号 */
+ private String fpnum;
+
+ /** 鱼池名称 */
+ private String fpName;
+
+ /** 水温(℃) */
+ private BigDecimal wartem;
+
+ /** 与上一时段水温差(℃) */
+ private BigDecimal wtdiff;
+
+ /** 氨氮(mg/L) */
+ private BigDecimal nh3n;
+
+ /** 亚硝酸盐(mg/L) */
+ private BigDecimal no2;
+
+ /** 溶解氧(mg/L) */
+ private BigDecimal dox;
+
+ /** pH */
+ private BigDecimal ph;
+
+ /** 记录人 */
+ private String recorder;
+
+ /** 附件ID */
+ private String fid;
+
+ /** 创建人 */
+ private String recordUser;
+
+ /** 创建时间 */
+ private Date recordTime;
+
+ /** 更新人 */
+ private String modifyUser;
+
+ /** 更新时间 */
+ private Date modifyTime;
+
+ /** 是否已删除 */
+ private Integer isDeleted;
+
+ /** 删除人 */
+ private String deleteUser;
+
+ /** 删除时间 */
+ private Date deleteTime;
+}
diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fb/service/FbStationService.java b/backend/src/main/java/com/yfd/platform/qgc_env/fb/service/FbStationService.java
index 66578ed0..da2ef0e6 100644
--- a/backend/src/main/java/com/yfd/platform/qgc_env/fb/service/FbStationService.java
+++ b/backend/src/main/java/com/yfd/platform/qgc_env/fb/service/FbStationService.java
@@ -2,22 +2,7 @@ package com.yfd.platform.qgc_env.fb.service;
import com.yfd.platform.common.DataSourceRequest;
import com.yfd.platform.common.DataSourceResult;
-import com.yfd.platform.qgc_env.fb.entity.vo.FbBsmfRQgcVo;
-import com.yfd.platform.qgc_env.fb.entity.vo.FbBsmfRFishTableVo;
-import com.yfd.platform.qgc_env.fb.entity.vo.FbFlDataVo;
-import com.yfd.platform.qgc_env.fb.entity.vo.FbFishCountFinishVo;
-import com.yfd.platform.qgc_env.fb.entity.vo.FbFishRunQgcVo;
-import com.yfd.platform.qgc_env.fb.entity.vo.FbFishTypeStcdVo;
-import com.yfd.platform.qgc_env.fb.entity.vo.FbFishTypeFinishVo;
-import com.yfd.platform.qgc_env.fb.entity.vo.FbRelatedYrVo;
-import com.yfd.platform.qgc_env.fb.entity.vo.FbMsfbrdmQgcVo;
-import com.yfd.platform.qgc_env.fb.entity.vo.FbResearchVo;
-import com.yfd.platform.qgc_env.fb.entity.vo.FbStInfoResultVo;
-import com.yfd.platform.qgc_env.fb.entity.vo.FbStationStaticsDataVo;
-import com.yfd.platform.qgc_env.fb.entity.vo.YearRpStatisticsVo;
-import com.yfd.platform.qgc_env.fb.entity.vo.FbStationOverviewSecondVo;
-import com.yfd.platform.qgc_env.fb.entity.vo.FbTracingPointVo;
-import com.yfd.platform.qgc_env.fb.entity.vo.TableVo;
+import com.yfd.platform.qgc_env.fb.entity.vo.*;
import java.util.List;
import java.util.Map;
@@ -67,4 +52,84 @@ public interface FbStationService {
DataSourceResult getFbPointKendoListCust(DataSourceRequest dataSourceRequest);
DataSourceResult getFbBuiltPointKendoListCust(DataSourceRequest dataSourceRequest);
+
+ /**
+ * 电站放流统计-返回有数据的年份
+ */
+ DataSourceResult getAggregateData(DataSourceRequest dataSourceRequest);
+
+ /**
+ * 电站放流统计列表
+ */
+ DataSourceResult getEngKendoListCust(DataSourceRequest dataSourceRequest);
+
+ /**
+ * 获取增殖站各阶段数据状态(选配/繁殖/培育/防治)
+ */
+ List getBreedStageList(String stcd);
+
+ /**
+ * 亲鱼档案管理记录列表
+ */
+ DataSourceResult getBsmfRList(DataSourceRequest dataSourceRequest);
+
+ /**
+ * 亲鱼死亡记录列表
+ */
+ DataSourceResult getBsdeathRList(DataSourceRequest dataSourceRequest);
+
+ /**
+ * 亲鱼培育方式列表
+ */
+ DataSourceResult getBsctmoBList(DataSourceRequest dataSourceRequest);
+
+ /**
+ * 亲鱼培育水温观测记录列表
+ */
+ DataSourceResult getFbbwtRList(DataSourceRequest dataSourceRequest);
+
+ /**
+ * 亲鱼培育水质监测记录列表
+ */
+ DataSourceResult getFbcwqRList(DataSourceRequest dataSourceRequest);
+
+ /**
+ * 亲鱼培育投喂记录列表
+ */
+ DataSourceResult getBsrfiRList(DataSourceRequest dataSourceRequest);
+
+ /**
+ * 淘汰亲鱼基本信息记录列表
+ */
+ DataSourceResult getOutfishRList(DataSourceRequest dataSourceRequest);
+
+ /**
+ * 鱼类人工催产记录列表
+ */
+ DataSourceResult getFishartinlRList(DataSourceRequest dataSourceRequest);
+
+ /**
+ * 鱼类受精卵孵化过程记录列表
+ */
+ DataSourceResult getFishhatchrecRList(DataSourceRequest dataSourceRequest);
+
+ /**
+ * 鱼类孵化过程巡查记录列表
+ */
+ DataSourceResult getFishhatchproRList(DataSourceRequest dataSourceRequest);
+
+ /**
+ * 苗种培育水环境监测记录列表
+ */
+ DataSourceResult getScwemRList(DataSourceRequest dataSourceRequest);
+
+ /**
+ * 鱼苗和鱼种培育记录列表
+ */
+ DataSourceResult getFishbreedRList(DataSourceRequest dataSourceRequest);
+
+ /**
+ * 鱼病防治记录列表
+ */
+ DataSourceResult getFishdpacRList(DataSourceRequest dataSourceRequest);
}
diff --git a/backend/src/main/java/com/yfd/platform/qgc_env/fb/service/impl/FbStationServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_env/fb/service/impl/FbStationServiceImpl.java
index ee2f4b67..80f8b9b0 100644
--- a/backend/src/main/java/com/yfd/platform/qgc_env/fb/service/impl/FbStationServiceImpl.java
+++ b/backend/src/main/java/com/yfd/platform/qgc_env/fb/service/impl/FbStationServiceImpl.java
@@ -11,6 +11,20 @@ import com.yfd.platform.common.Group;
import com.yfd.platform.common.GroupHelper;
import com.yfd.platform.common.GroupingInfo;
import com.yfd.platform.common.MicroservicDynamicSQLMapper;
+import com.yfd.platform.qgc_env.fb.entity.vo.BreedStageVO;
+import com.yfd.platform.qgc_env.fb.entity.vo.FbBsmfRVo;
+import com.yfd.platform.qgc_env.fb.entity.vo.FbBsdeathRVo;
+import com.yfd.platform.qgc_env.fb.entity.vo.FbBsctmoBVo;
+import com.yfd.platform.qgc_env.fb.entity.vo.FbFbbwtRVo;
+import com.yfd.platform.qgc_env.fb.entity.vo.FbFbcwqRVo;
+import com.yfd.platform.qgc_env.fb.entity.vo.FbBsrfiRVo;
+import com.yfd.platform.qgc_env.fb.entity.vo.FbOutfishRVo;
+import com.yfd.platform.qgc_env.fb.entity.vo.FbFishartinlRVo;
+import com.yfd.platform.qgc_env.fb.entity.vo.FbFishhatchrecRVo;
+import com.yfd.platform.qgc_env.fb.entity.vo.FbFishhatchproRVo;
+import com.yfd.platform.qgc_env.fb.entity.vo.FbScwemRVo;
+import com.yfd.platform.qgc_env.fb.entity.vo.FbFishbreedRVo;
+import com.yfd.platform.qgc_env.fb.entity.vo.FbFishdpacRVo;
import com.yfd.platform.qgc_env.fb.entity.vo.FbBsmfRQgcVo;
import com.yfd.platform.qgc_env.fb.entity.vo.FbBsmfRFishHeadColumnVo;
import com.yfd.platform.qgc_env.fb.entity.vo.FbBsmfRFishSummaryVo;
@@ -20,6 +34,7 @@ import com.yfd.platform.qgc_env.fb.entity.vo.FbFishRunQgcVo;
import com.yfd.platform.qgc_env.fb.entity.vo.FbFishTypeStcdVo;
import com.yfd.platform.qgc_env.fb.entity.vo.FbFishTypeFinishVo;
import com.yfd.platform.qgc_env.fb.entity.vo.FbFtpStatisticsVo;
+import com.yfd.platform.qgc_env.fb.entity.vo.FbEngFishVo;
import com.yfd.platform.qgc_env.fb.entity.vo.FbFlDataVo;
import com.yfd.platform.qgc_env.fb.entity.vo.FbMsfbrdmQgcVo;
import com.yfd.platform.qgc_env.fb.entity.vo.FbRelatedYrVo;
@@ -1978,6 +1993,23 @@ public class FbStationServiceImpl implements FbStationService {
return result;
}
+ private String buildQgcMsfbrdmCoreSql1(Date startTime, Date endTime, Map paramMap) {
+ StringBuilder sql = new StringBuilder();
+ sql.append(" SELECT\n" +
+ " a.ID, a.STCD, a.TM,\n" +
+ " CASE WHEN ZY_FISH_ID IS NULL THEN TO_CHAR(a.FTP) ELSE TO_CHAR(ZY_FISH_ID) END AS ftp,CASE WHEN c.NAME IS NULL THEN TO_CHAR(a.FTP) ELSE TO_CHAR(c.NAME) END AS ftpName,\n" +
+ " a.BSSR, a.AGE, a.SEX, a.SIGNNUM, a.RECORDER, a.VALUE, a.FID,\n" +
+ " a.RECORD_USER, a.RECORD_TIME, a.MODIFY_USER, a.MODIFY_TIME,\n" +
+ " a.IS_DELETED, a.DELETE_USER, a.DELETE_TIME,\n" +
+ " a.LENGTH, a.WEIGHT\n" +
+ " FROM SD_FBBSMF_R a\n" +
+ " INNER JOIN V_MS_STBPRP_T b\n" +
+ " ON a.stcd = b.STCD AND b.STTP_CODE = 'FB' AND b.IS_DELETED = 0\n" +
+ " LEFT JOIN V_SD_FISHDICTORY_B c\n" +
+ " ON a.FTP = c.FISH_ID AND (b.HBRVCD = c.RVCD OR c.RVCD = 'ZY')");
+ return sql.toString();
+ }
+
private String buildQgcMsfbrdmCoreSql(Date startTime, Date endTime, Map paramMap) {
Integer year = startTime == null ? null : Integer.parseInt(DateUtil.format(startTime, "yyyy"));
String ftpCodeExpr = "COALESCE(TO_CHAR(NVL(relRv.ZY_FISH_ID, relRv.FISH_ID)), " +
@@ -4809,6 +4841,285 @@ public class FbStationServiceImpl implements FbStationService {
return voList;
}
+ @Override
+ public DataSourceResult getAggregateData(DataSourceRequest dataSourceRequest) {
+ DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest();
+ List stcdList = resolveStcdList(dataSourceRequest, loadOptions);
+
+ Map paramMap = new HashMap<>();
+ String sql = buildAggregateDataSql(stcdList, paramMap);
+
+ List list = microservicDynamicSQLMapper.pageAllListWithResultType(
+ null, sql, paramMap, FbEngFishVo.class
+ );
+
+ if (CollUtil.isNotEmpty(list)) {
+ FbEngFishVo first = list.get(0);
+ if (StrUtil.isNotBlank(first.getPlansd()) && first.getPlansd().length() >= 4) {
+ first.setPlansd(first.getPlansd().substring(0, 4));
+ }
+ }
+
+ DataSourceResult result = new DataSourceResult<>();
+ result.setData(list.stream()
+ .filter(it -> StrUtil.isNotBlank(it.getStcd()))
+ .sorted(Comparator.comparing(FbEngFishVo::getStcd))
+ .collect(Collectors.toList()));
+ result.setTotal(list.size());
+ return result;
+ }
+
+ /**
+ * 构建电站放流统计-年份聚合数据 SQL
+ *
+ * 查询指定电站有放流数据(计划或实际)的最新一条年份记录。
+ * 上半部分以计划表为主 LEFT JOIN 实际表,下半部分以实际表为主 LEFT JOIN 计划表,
+ * UNION 去重合并后按日期降序取第一条。
+ *
+ */
+ private String buildAggregateDataSql(List stcdList, Map paramMap) {
+ String planTable = "SD_ENGFRPLAN_B";
+ String planDetTable = "SD_ENGFRPLANDET_B";
+ String actualTable = "SD_ENGFR_R";
+ String actualDetTable = "SD_RPIMNFISH_R";
+ String engInfoTable = "SD_ENGINFO_B_H";
+
+ StringBuilder sql = new StringBuilder();
+ sql.append("SELECT STCD, ennm, fcntjh, fcntjc, PLANSD FROM ( ");
+ sql.append("SELECT s.STCD, e.ENNM AS ennm, s.fcntjh, s.fcntjc, s.PLANSD ");
+ sql.append("FROM ( ");
+
+ // 上半部分:计划表为主 LEFT JOIN 实际表
+ sql.append("SELECT jh.STCD, jh.PLANSD, jh.fcntjh, jc.fcntjc FROM ( ");
+ sql.append("SELECT a.STCD, a.PLANSD, SUM(NVL(b.FCNT, 0)) AS fcntjh ");
+ sql.append("FROM ").append(planTable).append(" a ");
+ sql.append("LEFT JOIN ").append(planDetTable).append(" b ON a.ID = b.RPJH_ID AND NVL(b.IS_DELETED, 0) = 0 ");
+ sql.append("WHERE NVL(a.IS_DELETED, 0) = 0 ");
+ appendInCondition(sql, paramMap, "a.STCD", stcdList, "aggPlanStcd");
+ sql.append("GROUP BY a.STCD, a.PLANSD ");
+ sql.append(") jh ");
+ sql.append("LEFT JOIN ( ");
+ sql.append("SELECT a.STCD, SUM(NVL(b.FCNT, 0)) AS fcntjc ");
+ sql.append("FROM ").append(actualTable).append(" a ");
+ sql.append("LEFT JOIN ").append(actualDetTable).append(" b ON a.ID = b.RPIMN_ID AND NVL(b.IS_DELETED, 0) = 0 ");
+ sql.append("WHERE NVL(a.IS_DELETED, 0) = 0 ");
+ appendInCondition(sql, paramMap, "a.STCD", stcdList, "aggActStcd1");
+ sql.append("GROUP BY a.STCD ");
+ sql.append(") jc ON jh.STCD = jc.STCD ");
+ sql.append("WHERE (jh.fcntjh IS NOT NULL OR jc.fcntjc IS NOT NULL) ");
+
+ sql.append("UNION ");
+
+ // 下半部分:实际表为主 LEFT JOIN 计划表
+ sql.append("SELECT jc.STCD, jc.PLANSD, jh.fcntjh, jc.fcntjc FROM ( ");
+ sql.append("SELECT a.STCD, a.TM AS PLANSD, SUM(NVL(b.FCNT, 0)) AS fcntjc ");
+ sql.append("FROM ").append(actualTable).append(" a ");
+ sql.append("LEFT JOIN ").append(actualDetTable).append(" b ON a.ID = b.RPIMN_ID AND NVL(b.IS_DELETED, 0) = 0 ");
+ sql.append("WHERE NVL(a.IS_DELETED, 0) = 0 ");
+ appendInCondition(sql, paramMap, "a.STCD", stcdList, "aggActStcd2");
+ sql.append("GROUP BY a.STCD, a.TM ");
+ sql.append(") jc ");
+ sql.append("LEFT JOIN ( ");
+ sql.append("SELECT a.STCD, SUM(NVL(b.FCNT, 0)) AS fcntjh ");
+ sql.append("FROM ").append(planTable).append(" a ");
+ sql.append("LEFT JOIN ").append(planDetTable).append(" b ON a.ID = b.RPJH_ID AND NVL(b.IS_DELETED, 0) = 0 ");
+ sql.append("WHERE NVL(a.IS_DELETED, 0) = 0 ");
+ appendInCondition(sql, paramMap, "a.STCD", stcdList, "aggPlanStcd2");
+ sql.append("GROUP BY a.STCD ");
+ sql.append(") jh ON jc.STCD = jh.STCD ");
+ sql.append("WHERE (jh.fcntjh IS NOT NULL OR jc.fcntjc IS NOT NULL) ");
+
+ sql.append(") s ");
+ sql.append("LEFT JOIN ").append(engInfoTable).append(" e ON s.STCD = e.STCD AND NVL(e.IS_DELETED, 0) = 0 ");
+ sql.append("WHERE (s.fcntjh IS NOT NULL OR s.fcntjc IS NOT NULL) ");
+ sql.append("ORDER BY s.PLANSD DESC ");
+ sql.append(") WHERE ROWNUM = 1");
+
+ return sql.toString();
+ }
+
+ @Override
+ public DataSourceResult getEngKendoListCust(DataSourceRequest dataSourceRequest) {
+ DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest();
+ String startTime = loadOptions == null ? null : QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "startTime");
+ String endTime = loadOptions == null ? null : QgcQueryWrapperUtil.getFilterFieldValue(loadOptions, "endTime");
+ List stcdList = resolveStcdList(dataSourceRequest, loadOptions);
+
+ Map paramMap = new HashMap<>();
+ String sql = buildEngKendoListCustSql(startTime, endTime, stcdList, paramMap);
+
+ List list = microservicDynamicSQLMapper.pageAllListWithResultType(
+ null, sql, paramMap, FbEngFishVo.class
+ );
+
+ DataSourceResult result = new DataSourceResult<>();
+ result.setData(list.stream()
+ .filter(it -> StrUtil.isNotBlank(it.getStcd()))
+ .collect(Collectors.toList()));
+ result.setTotal(list.size());
+ return result;
+ }
+
+ /**
+ * 构建电站放流统计列表 SQL
+ *
+ * UNION 合并计划放流和实际放流数据,确保同时有两类数据的电站不遗漏。
+ * 上半部分以计划表为主 LEFT JOIN 实际表,下半部分以实际表为主 LEFT JOIN 计划表。
+ *
+ */
+ private String buildEngKendoListCustSql(String startTime, String endTime,
+ List stcdList, Map paramMap) {
+ String planTable = "SD_ENGFRPLAN_B";
+ String planDetTable = "SD_ENGFRPLANDET_B";
+ String actualTable = "SD_ENGFR_R";
+ String actualDetTable = "SD_RPIMNFISH_R";
+ String viewTable = "V_MS_STBPRP_T";
+
+ StringBuilder sql = new StringBuilder();
+
+ sql.append("SELECT s.STCD, t.STNM AS ennm, s.fcntjh, s.fcntjc ");
+ sql.append("FROM ( ");
+
+ // 上半部分:计划表为主 LEFT JOIN 实际表
+ sql.append("SELECT jh.STCD, jh.fcntjh, jc.fcntjc FROM ( ");
+ sql.append("SELECT a.STCD, SUM(NVL(b.FCNT, 0)) AS fcntjh ");
+ sql.append("FROM ").append(planTable).append(" a ");
+ sql.append("LEFT JOIN ").append(planDetTable).append(" b ON a.ID = b.RPJH_ID ");
+ sql.append("WHERE NVL(a.IS_DELETED, 0) = 0 ");
+ if (StrUtil.isNotBlank(startTime)) {
+ paramMap.put("planStartTime1", DateUtil.parse(startTime));
+ sql.append("AND a.PLANSD >= #{map.planStartTime1} ");
+ }
+ if (StrUtil.isNotBlank(endTime)) {
+ paramMap.put("planEndTime1", DateUtil.parse(endTime));
+ sql.append("AND a.PLANED <= #{map.planEndTime1} ");
+ }
+ sql.append("GROUP BY a.STCD ");
+ sql.append(") jh ");
+ sql.append("LEFT JOIN ( ");
+ sql.append("SELECT a.STCD, SUM(NVL(b.FCNT, 0)) AS fcntjc ");
+ sql.append("FROM ").append(actualTable).append(" a ");
+ sql.append("LEFT JOIN ").append(actualDetTable).append(" b ON a.ID = b.RPIMN_ID AND NVL(b.IS_DELETED, 0) = 0 ");
+ sql.append("WHERE NVL(a.IS_DELETED, 0) = 0 ");
+// sql.append("AND (a.TASK_STATUS = 'Approved' OR a.TASK_STATUS IS NULL) ");
+ if (StrUtil.isNotBlank(startTime)) {
+ paramMap.put("actStartTime1", DateUtil.parse(startTime));
+ sql.append("AND a.TM >= #{map.actStartTime1} ");
+ }
+ if (StrUtil.isNotBlank(endTime)) {
+ paramMap.put("actEndTime1", DateUtil.parse(endTime));
+ sql.append("AND a.TM <= #{map.actEndTime1} ");
+ }
+ sql.append("GROUP BY a.STCD ");
+ sql.append(") jc ON jh.STCD = jc.STCD ");
+
+ sql.append("UNION ");
+
+ // 下半部分:实际表为主 LEFT JOIN 计划表
+ sql.append("SELECT jc.STCD, jh.fcntjh, jc.fcntjc FROM ( ");
+ sql.append("SELECT a.STCD, SUM(NVL(b.FCNT, 0)) AS fcntjc ");
+ sql.append("FROM ").append(actualTable).append(" a ");
+ sql.append("LEFT JOIN ").append(actualDetTable).append(" b ON a.ID = b.RPIMN_ID AND NVL(b.IS_DELETED, 0) = 0 ");
+ sql.append("WHERE NVL(a.IS_DELETED, 0) = 0 ");
+// sql.append("AND (a.TASK_STATUS = 'Approved' OR a.TASK_STATUS IS NULL) ");
+ if (StrUtil.isNotBlank(startTime)) {
+ paramMap.put("actStartTime2", DateUtil.parse(startTime));
+ sql.append("AND a.TM >= #{map.actStartTime2} ");
+ }
+ if (StrUtil.isNotBlank(endTime)) {
+ paramMap.put("actEndTime2", DateUtil.parse(endTime));
+ sql.append("AND a.TM <= #{map.actEndTime2} ");
+ }
+ sql.append("GROUP BY a.STCD ");
+ sql.append(") jc ");
+ sql.append("LEFT JOIN ( ");
+ sql.append("SELECT a.STCD, SUM(NVL(b.FCNT, 0)) AS fcntjh ");
+ sql.append("FROM ").append(planTable).append(" a ");
+ sql.append("LEFT JOIN ").append(planDetTable).append(" b ON a.ID = b.RPJH_ID ");
+ sql.append("WHERE NVL(a.IS_DELETED, 0) = 0 ");
+ if (StrUtil.isNotBlank(startTime)) {
+ paramMap.put("planStartTime2", DateUtil.parse(startTime));
+ sql.append("AND a.PLANSD >= #{map.planStartTime2} ");
+ }
+ if (StrUtil.isNotBlank(endTime)) {
+ paramMap.put("planEndTime2", DateUtil.parse(endTime));
+ sql.append("AND a.PLANED <= #{map.planEndTime2} ");
+ }
+ sql.append("GROUP BY a.STCD ");
+ sql.append(") jh ON jc.STCD = jh.STCD ");
+
+ sql.append(") s ");
+ sql.append("LEFT JOIN ").append(viewTable).append(" t ON s.STCD = t.STCD ");
+ sql.append("WHERE 1 = 1 ");
+ appendInCondition(sql, paramMap, "s.STCD", stcdList, "engStcd");
+ sql.append("ORDER BY t.SITESTEPSORT ");
+
+ return sql.toString();
+ }
+
+ @Override
+ public List getBreedStageList(String stcd) {
+ List stageVOList = new ArrayList<>();
+
+ // 阶段1:选配 --- SD_FBBSMF_R(亲鱼档案管理记录表)+ SD_FBBSDEATH_R(亲鱼死亡记录表)
+ boolean bsmfExists = existsDataInTable("SD_FBBSMF_R", stcd);
+ boolean bsdeathExists = existsDataInTable("SD_FBBSDEATH_R", stcd);
+ BreedStageVO stage1 = new BreedStageVO();
+ stage1.setKey("选配");
+ stage1.setValue((bsmfExists || bsdeathExists) ? "1" : "2");
+ stageVOList.add(stage1);
+
+ // 阶段2:繁殖 --- SD_FBFISHARTINL_R(鱼类人工催产记录)
+ boolean fishArtinlExists = existsDataInTable("SD_FBFISHARTINL_R", stcd);
+ BreedStageVO stage2 = new BreedStageVO();
+ stage2.setKey("繁殖");
+ stage2.setValue(fishArtinlExists ? "1" : "2");
+ stageVOList.add(stage2);
+
+ // 阶段3:培育 --- SD_FBFISHBREED_R(鱼苗和鱼种培育记录)+ SD_FBSCWEM_R(苗种培育水环境监测记录表)
+ boolean fishbreedExists = existsDataInTable("SD_FBFISHBREED_R", stcd);
+ boolean scwemExists = existsDataInTable("SD_FBSCWEM_R", stcd);
+ BreedStageVO stage3 = new BreedStageVO();
+ stage3.setKey("培育");
+ stage3.setValue((fishbreedExists || scwemExists) ? "1" : "2");
+ stageVOList.add(stage3);
+
+ // 阶段4:防治 --- SD_FBFISHDPAC_R(鱼病防治记录表)
+ boolean fishDpacExists = existsDataInTable("SD_FBFISHDPAC_R", stcd);
+ BreedStageVO stage4 = new BreedStageVO();
+ stage4.setKey("防治");
+ stage4.setValue(fishDpacExists ? "1" : "2");
+ stageVOList.add(stage4);
+
+ return stageVOList;
+ }
+
+ /**
+ * 检查指定表在指定 stcd 下是否存在未删除的数据
+ */
+ private boolean existsDataInTable(String tableName, String stcd) {
+ Map paramMap = new HashMap<>();
+ paramMap.put("stcd", stcd);
+ StringBuilder sql = new StringBuilder();
+ sql.append("SELECT 1 AS existFlag FROM ").append(tableName);
+ sql.append(" WHERE STCD = #{map.stcd} AND NVL(IS_DELETED, 0) = 0 AND ROWNUM = 1");
+ List list = microservicDynamicSQLMapper.pageAllListWithResultType(
+ null, sql.toString(), paramMap, DataExistsVo.class);
+ return CollUtil.isNotEmpty(list);
+ }
+
+ private static class DataExistsVo {
+ private Integer existFlag;
+
+ public Integer getExistFlag() {
+ return existFlag;
+ }
+
+ public void setExistFlag(Integer existFlag) {
+ this.existFlag = existFlag;
+ }
+ }
+
private static class FbPointCountVo {
private String stcd;
private Long fcnt;
@@ -4829,4 +5140,3479 @@ public class FbStationServiceImpl implements FbStationService {
this.fcnt = fcnt;
}
}
+
+ // ==================== 亲鱼档案管理记录列表 ====================
+
+ @Override
+ public DataSourceResult getBsmfRList(DataSourceRequest dataSourceRequest) {
+ DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest();
+ GroupingInfo[] groups = loadOptions == null ? null : loadOptions.getGroup();
+ if (groups != null && groups.length > 0) {
+ return queryBsmfRGroupList(dataSourceRequest, loadOptions, groups);
+ }
+ return queryBsmfRDetailList(dataSourceRequest, loadOptions);
+ }
+
+ private DataSourceResult queryBsmfRDetailList(DataSourceRequest dataSourceRequest,
+ DataSourceLoadOptionsBase loadOptions) {
+ Map paramMap = new HashMap<>();
+ StringBuilder sql = new StringBuilder();
+ sql.append("SELECT ")
+ .append(buildBsmfRDetailSelectSql(dataSourceRequest == null ? null : dataSourceRequest.getSelect()))
+ .append(" FROM (")
+ .append(buildBsmfRCoreSql())
+ .append(") t WHERE 1 = 1 ");
+
+ String filterSql = buildBsmfRFilterCondition(
+ dataSourceRequest == null ? null : dataSourceRequest.getFilter(),
+ paramMap,
+ new int[]{0}
+ );
+ if (StrUtil.isNotBlank(filterSql)) {
+ sql.append(" AND ").append(filterSql).append(" ");
+ }
+ sql.append(buildBsmfROrderBySql(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, FbBsmfRVo.class
+ );
+ DataSourceResult result = new DataSourceResult<>();
+ result.setData(list);
+ result.setTotal(page != null ? page.getTotal() : list.size());
+ result.setAggregates(new HashMap<>());
+ return result;
+ }
+
+ @SuppressWarnings({"rawtypes", "unchecked"})
+ private DataSourceResult queryBsmfRGroupList(DataSourceRequest dataSourceRequest,
+ DataSourceLoadOptionsBase loadOptions,
+ GroupingInfo[] groupInfos) {
+ Map paramMap = new HashMap<>();
+ StringBuilder sql = new StringBuilder();
+ sql.append("SELECT * FROM (")
+ .append(buildBsmfRCoreSql())
+ .append(") t WHERE 1 = 1 ");
+
+ String filterSql = buildBsmfRFilterCondition(
+ dataSourceRequest == null ? null : dataSourceRequest.getFilter(),
+ paramMap,
+ new int[]{0}
+ );
+ if (StrUtil.isNotBlank(filterSql)) {
+ sql.append(" AND ").append(filterSql).append(" ");
+ }
+ String groupedSql = buildBsmfRGroupSql(sql.toString(),
+ dataSourceRequest == null ? null : dataSourceRequest.getGroup());
+ List