diff --git a/pom.xml b/pom.xml
index 0758b18..c7ad927 100644
--- a/pom.xml
+++ b/pom.xml
@@ -18,7 +18,7 @@
UTF-8
1.8
3.1.1
- 1.2.8
+ 1.2.16
1.21
3.0.0
2.3.2
diff --git a/ruoyi-admin/src/main/resources/excel/dayDscs.xls b/ruoyi-admin/src/main/resources/excel/dayDscs.xls
new file mode 100644
index 0000000..7a0a205
Binary files /dev/null and b/ruoyi-admin/src/main/resources/excel/dayDscs.xls differ
diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml
index 0612064..41360cb 100644
--- a/ruoyi-common/pom.xml
+++ b/ruoyi-common/pom.xml
@@ -17,6 +17,19 @@
+
+ cn.hutool
+ hutool-all
+ 5.8.22
+
+
+
+ com.alibaba
+ druid
+ 1.2.16
+
+
+
org.springframework
diff --git a/swlscx/src/main/java/com/ruoyi/swlscx/basic/controller/BaseExportController.java b/swlscx/src/main/java/com/ruoyi/swlscx/basic/controller/BaseExportController.java
index ad11c6b..4285541 100644
--- a/swlscx/src/main/java/com/ruoyi/swlscx/basic/controller/BaseExportController.java
+++ b/swlscx/src/main/java/com/ruoyi/swlscx/basic/controller/BaseExportController.java
@@ -21,8 +21,6 @@ import javax.servlet.http.HttpServletResponse;
public class BaseExportController {
private final HyStscAService hyStscAService;
-
-
/**
* 导出测站一览表
*/
diff --git a/swlscx/src/main/java/com/ruoyi/swlscx/basic/controller/BaseInfoController.java b/swlscx/src/main/java/com/ruoyi/swlscx/basic/controller/BaseInfoController.java
index 06ab7aa..68c0b03 100644
--- a/swlscx/src/main/java/com/ruoyi/swlscx/basic/controller/BaseInfoController.java
+++ b/swlscx/src/main/java/com/ruoyi/swlscx/basic/controller/BaseInfoController.java
@@ -1,17 +1,32 @@
package com.ruoyi.swlscx.basic.controller;
+import cn.hutool.core.io.IoUtil;
+import cn.hutool.core.io.resource.InputStreamResource;
+import cn.hutool.http.HttpRequest;
+import cn.hutool.http.HttpResponse;
+import cn.hutool.http.HttpUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.ruoyi.common.core.page.R;
import com.ruoyi.swlscx.basic.domain.po.YcExportTask;
+import com.ruoyi.swlscx.basic.domain.ro.FormDataRo;
+import com.ruoyi.swlscx.basic.domain.vo.HyStscASelectVo;
import com.ruoyi.swlscx.basic.domain.vo.HyStscAVo;
import com.ruoyi.swlscx.basic.service.YcExportTaskService;
import com.ruoyi.swlscx.common.PageParams;
import com.ruoyi.swlscx.basic.service.HyStscAService;
import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.HttpHeaders;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
+import java.io.InputStream;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.SQLException;
+import java.util.HashMap;
import java.util.Map;
/**
@@ -33,12 +48,23 @@ public class BaseInfoController {
* 查询站点信息
*/
@GetMapping("/getStationPageByInfo")
- public R getStationPageByInfo(Integer pageNum,Integer pageSize, String stnm,String stcd, String startTime, String endTime) {
+ public R getStationPageByInfo(Integer pageNum,Integer pageSize, String stnm,String stcds, String startTime, String endTime) {
PageParams pageParams = new PageParams(pageNum.longValue(), pageSize.longValue());
- IPage stationPageByInfo = hyStscAService.getStationPageByInfo(pageParams, stnm, stcd, startTime, endTime);
+ IPage stationPageByInfo = hyStscAService.getStationPageByInfo(pageParams, stnm, stcds, startTime, endTime);
return R.ok().put("data", stationPageByInfo.getRecords()).put("count", stationPageByInfo.getTotal());
}
+
+ /**
+ * 站点下拉框
+ */
+ @GetMapping("/getStationList")
+ public R getStationList(@RequestParam(value = "startTime",defaultValue = "") String startTime,
+ @RequestParam(value = "endTime",defaultValue = "")String endTime,
+ @RequestParam(value = "type",defaultValue = "") String type) {
+ return R.ok().put("data", hyStscAService.getList(startTime,endTime,type));
+ }
+
/**
* 查询列表
*/
@@ -53,6 +79,65 @@ public class BaseInfoController {
ycExportTaskService.downloadExcel(response,t);
}
+ @Value("${softurl}")
+ private String sqlServerUrl;
+
+ @RequestMapping("/downloadSoftFile")
+ public void downloadSoftFile(HttpServletResponse response){
+ try (HttpResponse remoteResponse = HttpRequest.post(sqlServerUrl+"/downloadSoftFile")
+ .header(HttpHeaders.ACCEPT, "application/octet-stream")
+ .execute()) {
+ // 检查远程响应状态
+ if (!remoteResponse.isOk()) {
+ response.sendError(remoteResponse.getStatus(), "远程服务器错误");
+ return;
+ }
+
+ // 设置当前响应头
+ remoteResponse.headers().forEach((key, values) -> {
+ if (!"Transfer-Encoding".equalsIgnoreCase(key)) { // 排除特殊头
+ values.forEach(value -> response.addHeader(key, value));
+ }
+ });
+
+ // 将远程文件流写入当前响应
+ try (InputStream remoteStream = remoteResponse.bodyStream()) {
+ IoUtil.copy(remoteStream, response.getOutputStream());
+ }
+ response.flushBuffer();
+
+ } catch (Exception e) {
+ throw new RuntimeException("文件下载失败", e);
+ }
+ }
+
+ @RequestMapping("/uploadSoftFile")
+ public R uploadSoftFile(@RequestParam("file") MultipartFile file, @RequestParam("type") String type){
+ try {
+ // 1. 将 MultipartFile 转为 Hutool 的 Resource 对象
+ InputStreamResource resource = new InputStreamResource(
+ file.getInputStream(),
+ file.getOriginalFilename() // 保留原始文件名
+ );
+ // 2. 构建 HTTP 请求
+ HttpResponse response = HttpRequest.post(sqlServerUrl+"/uploadSoftFile")
+ .form("file", resource) // 关键!参数名需与 @RequestParam("file") 一致
+ .form("type", type)
+ .execute();
+
+ // 3. 处理响应
+ if (response.isOk()) {
+ return R.ok();
+ } else {
+ return R.error();
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return R.ok();
+ }
+
+
@DeleteMapping("/cgtask/delete/{id}")
public R delete(@PathVariable("id")Integer id){
return ycExportTaskService.removeTask(id);
@@ -61,8 +146,53 @@ public class BaseInfoController {
@PostMapping("/importDateToSoft")
- public R importDateToSoft(String startTime, String endTime){
- return hyStscAService.importDateTosoft(startTime,endTime);
+ public R importDateToSoft(){
+ return hyStscAService.importDateTosoft();
+ }
+
+ @RequestMapping("/getStationListByType")
+ public R getStationListByType(@RequestParam(value = "type",defaultValue = "") String type,
+ @RequestParam(value = "startTime",defaultValue = "") String startTime,
+ @RequestParam(value = "endTime",defaultValue = "")String endTime) {
+ return R.ok().put("data", hyStscAService.getStationListByType(startTime,endTime,type));
+ }
+
+ @RequestMapping("/testConnection")
+ public R testConnection(@RequestParam Map params) {
+ // 从参数中提取连接信息(注意:前端参数键名需保持一致)
+ String ip = params.get("sqlseverIp").toString();
+ String userName = params.get("userName").toString();
+ String password = params.get("password").toString();
+ String database = params.get("dataBase").toString();
+
+ String url = "jdbc:sqlserver://" + ip + ":1433;databaseName=" + database+";ncrypt=false;allowMultiQueries=true";
+
+ // 测试连接
+ try {
+ // 加载JDBC驱动(需确保驱动包在类路径中)
+ Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
+
+ // 尝试建立连接
+ try (Connection conn = DriverManager.getConnection(url, userName, password)) {
+ return R.ok().put("data", "数据库连接成功");
+ }
+ } catch (ClassNotFoundException | SQLException e) {
+ return R.error("连接失败");
+ }
+ }
+
+
+ @RequestMapping("/importDateToSoftOrExportSoft")
+ public R importDateToSoftOrExportSoft(@RequestBody FormDataRo formDataRo) {
+ if (formDataRo.getIds().isEmpty() || formDataRo.getStationTypeValue().isEmpty() || formDataRo.getStartTime().isEmpty() || formDataRo.getEndTime().isEmpty() || formDataRo.getSoftTypeValue().isEmpty() || formDataRo.getStcds().isEmpty()){
+ return R.error("还有未填的选项");
+ }
+ if ("1".equals(formDataRo.getSoftTypeValue())) {
+ return hyStscAService.importDateToHydp(formDataRo);
+ } else {
+ return hyStscAService.exportSoftToDate(formDataRo);
+ }
+
}
}
diff --git a/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/po/FzTableId.java b/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/po/FzTableId.java
new file mode 100644
index 0000000..b3b3563
--- /dev/null
+++ b/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/po/FzTableId.java
@@ -0,0 +1,23 @@
+package com.ruoyi.swlscx.basic.domain.po;
+
+import lombok.Data;
+
+/**
+ * @Author al
+ * @Date 2025/6/8 14:56
+ * @Description: TODO
+ * @Version
+ */
+@Data
+public class FzTableId {
+
+ private String stcd;
+
+ private Integer yr;
+
+ private String rtno;
+
+ private String yn;
+
+
+}
diff --git a/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/po/HyWfdzF.java b/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/po/HyWfdzF.java
new file mode 100644
index 0000000..98e4531
--- /dev/null
+++ b/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/po/HyWfdzF.java
@@ -0,0 +1,23 @@
+
+package com.ruoyi.swlscx.basic.domain.po;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @Author al
+ * @Date 2025/6/7 22:06
+ * @Description: TODO
+ * @Version
+ */
+@Data
+public class HyWfdzF
+{
+ private String stcd;
+ private BigDecimal yr;
+ private BigDecimal wf;
+ private BigDecimal rfz;
+ private String rzrcd;
+
+}
diff --git a/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/po/YcShdpInfo.java b/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/po/YcShdpInfo.java
new file mode 100644
index 0000000..5c9f38c
--- /dev/null
+++ b/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/po/YcShdpInfo.java
@@ -0,0 +1,20 @@
+package com.ruoyi.swlscx.basic.domain.po;
+
+import lombok.Data;
+
+/**
+ * @Author al
+ * @Date 2025/6/7 22:06
+ * @Description: TODO
+ * @Version
+ */
+@Data
+public class YcShdpInfo
+{
+ private Integer tableId;
+ private String name;
+ private String tableName;
+
+ private String yn;
+
+}
diff --git a/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/ro/FormDataRo.java b/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/ro/FormDataRo.java
new file mode 100644
index 0000000..1387355
--- /dev/null
+++ b/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/ro/FormDataRo.java
@@ -0,0 +1,23 @@
+package com.ruoyi.swlscx.basic.domain.ro;
+
+import lombok.Data;
+
+/**
+ * @Author al
+ * @Date 2025/6/7 21:40
+ * @Description: TODO
+ * @Version
+ */
+@Data
+public class FormDataRo {
+ private String sqlseverIp;
+ private String userName;
+ private String password;
+ private String dataBase;
+ private String startTime;
+ private String endTime;
+ private String stcds;
+ private String softTypeValue;
+ private String stationTypeValue;
+ private String ids;
+}
diff --git a/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyDmxpFRowMapper.java b/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyDmxpFRowMapper.java
new file mode 100644
index 0000000..86bf9a0
--- /dev/null
+++ b/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyDmxpFRowMapper.java
@@ -0,0 +1,46 @@
+package com.ruoyi.swlscx.basic.domain.rowMapper;
+
+import com.ruoyi.swlscx.year.domain.po.HyDmxpF;
+import com.ruoyi.swlscx.year.domain.po.HyYrpF;
+import org.springframework.jdbc.core.RowMapper;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.Date;
+
+/**
+ * @Author al
+ * @Date 2025/6/20 0:01
+ * @Description: TODO
+ * @Version
+ */
+public class HyDmxpFRowMapper implements RowMapper {
+
+ @Override
+ public HyDmxpF mapRow(ResultSet rs, int rowNum) throws SQLException {
+ HyDmxpF hyDmxpF = new HyDmxpF();
+
+ // 映射基础字段
+ hyDmxpF.setStcd(rs.getString("stcd")); // 站码[7](@ref)
+ hyDmxpF.setMxpdr(rs.getInt("mxpdr")); // 最大降水量时段长
+ hyDmxpF.setYr(rs.getInt("yr")); // 年[7](@ref)
+
+ // 映射数值字段(BigDecimal类型)
+ hyDmxpF.setMxp(rs.getBigDecimal("mxp")); // 最大降水量[6](@ref)
+ hyDmxpF.setMxprc(rs.getString("mxprc")); // 注解码[7](@ref)
+
+ // 安全处理日期字段(避免空指针)
+ mapNullableDate(rs, "bgdt", hyDmxpF::setBgdt); // 起始日期[6](@ref)
+
+ return hyDmxpF;
+ }
+
+ // 辅助方法:安全处理日期空值
+ private void mapNullableDate(ResultSet rs, String column, java.util.function.Consumer setter)
+ throws SQLException {
+ java.sql.Date sqlDate = rs.getDate(column);
+ if (sqlDate != null && !rs.wasNull()) { // 双重空值检查[6](@ref)
+ setter.accept(new Date(sqlDate.getTime())); // 转换为java.util.Date[6](@ref)
+ }
+ }
+}
diff --git a/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyDpCRowMapper.java b/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyDpCRowMapper.java
new file mode 100644
index 0000000..3dfeb12
--- /dev/null
+++ b/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyDpCRowMapper.java
@@ -0,0 +1,37 @@
+package com.ruoyi.swlscx.basic.domain.rowMapper;
+
+import com.ruoyi.swlscx.day.domain.po.HyDpC;
+import org.springframework.jdbc.core.RowMapper;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.Date;
+
+/**
+ * @Author al
+ * @Date 2025/6/20 15:15
+ * @Description: TODO
+ * @Version
+ */
+public class HyDpCRowMapper implements RowMapper {
+
+ @Override
+ public HyDpC mapRow(ResultSet rs, int rowNum) throws SQLException {
+ HyDpC hyDpC = new HyDpC();
+
+ // 字符串类型字段(主键+普通字段)
+ hyDpC.setStcd(rs.getString("stcd")); // 站码
+ hyDpC.setPrcd(rs.getString("prcd")); // 降水量注解码
+
+ // 日期类型字段(需转换java.sql.Date → java.util.Date)
+ java.sql.Date sqlDate = rs.getDate("dt");
+ if (sqlDate != null) {
+ hyDpC.setDt(new Date(sqlDate.getTime())); // 日期
+ }
+
+ // 数值类型字段(BigDecimal精确处理)
+ hyDpC.setP(rs.getBigDecimal("p")); // 降水量(毫米)
+
+ return hyDpC;
+ }
+}
diff --git a/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyDqCRowMapper.java b/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyDqCRowMapper.java
new file mode 100644
index 0000000..ca68e2f
--- /dev/null
+++ b/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyDqCRowMapper.java
@@ -0,0 +1,44 @@
+package com.ruoyi.swlscx.basic.domain.rowMapper;
+
+import com.ruoyi.swlscx.day.domain.po.HyDpC;
+import com.ruoyi.swlscx.day.domain.po.HyDqC;
+import org.springframework.jdbc.core.RowMapper;
+
+import java.math.BigDecimal;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Timestamp;
+import java.util.Date;
+
+/**
+ * @Author al
+ * @Date 2025/6/20 15:15
+ * @Description: TODO
+ * @Version
+ */
+public class HyDqCRowMapper implements RowMapper {
+
+ @Override
+ public HyDqC mapRow(ResultSet rs, int rowNum) throws SQLException {
+ HyDqC entity = new HyDqC();
+
+ // 1. 站码(空值安全处理)
+ entity.setStcd(rs.getString("stcd") != null ? rs.getString("stcd") : "");
+
+ // 2. 日期(精确到毫秒的时间戳处理)
+ Timestamp dtTimestamp = rs.getTimestamp("dt");
+ if (dtTimestamp != null) {
+ entity.setDt(new Date(dtTimestamp.getTime()));
+ }
+
+ // 3. 平均流量(保留NULL语义)
+ BigDecimal avq = rs.getBigDecimal("avq");
+ entity.setAvq(avq); // 保留NULL表示数据缺失
+
+ // 4. 平均流量注解码(空值安全处理)
+ String avqrcd = rs.getString("avqrcd");
+ entity.setAvqrcd(avqrcd != null ? avqrcd : ""); // NULL → 空字符串
+
+ return entity;
+ }
+}
diff --git a/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyDzCRowMapper.java b/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyDzCRowMapper.java
new file mode 100644
index 0000000..d44edd3
--- /dev/null
+++ b/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyDzCRowMapper.java
@@ -0,0 +1,46 @@
+
+package com.ruoyi.swlscx.basic.domain.rowMapper;
+
+import com.ruoyi.swlscx.day.domain.po.HyDzC;
+import com.ruoyi.swlscx.excerpt.domain.po.HyPrexB;
+import org.springframework.jdbc.core.RowMapper;
+
+import java.math.BigDecimal;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Timestamp;
+import java.util.Date;
+
+/**
+ * @Author al
+ * @Date 2025/6/20 0:01
+ * @Description: TODO
+ * @Version
+ */
+public class HyDzCRowMapper implements RowMapper {
+
+
+ @Override
+ public HyDzC mapRow(ResultSet rs, int rowNum) throws SQLException {
+ HyDzC hyDzC = new HyDzC();
+
+ // 1. 站码(字符串)
+ hyDzC.setStcd(rs.getString("stcd"));
+
+ // 2. 日期(带空值检查)
+ Timestamp dtTimestamp = rs.getTimestamp("dt");
+ if (dtTimestamp != null) {
+ hyDzC.setDt(new Date(dtTimestamp.getTime())); // SQL Timestamp → Java Date
+ }
+
+ // 3. 平均水位(精确数值)
+ BigDecimal avz = rs.getBigDecimal("avz");
+ hyDzC.setAvz(avz != null ? avz : BigDecimal.ZERO); // NULL 转为 0.00
+
+ // 4. 注解码(空值安全处理)
+ String avzrcd = rs.getString("avzrcd");
+ hyDzC.setAvzrcd(avzrcd != null ? avzrcd : ""); // NULL 转空字符串
+
+ return hyDzC;
+ }
+}
diff --git a/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyHltdzBRowMapper.java b/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyHltdzBRowMapper.java
new file mode 100644
index 0000000..707c3e5
--- /dev/null
+++ b/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyHltdzBRowMapper.java
@@ -0,0 +1,64 @@
+package com.ruoyi.swlscx.basic.domain.rowMapper;
+
+import com.ruoyi.swlscx.excerpt.domain.po.HyHltdzB;
+import org.springframework.jdbc.core.RowMapper;
+
+import java.math.BigDecimal;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Timestamp;
+import java.util.Date;
+
+/**
+ * @Author al
+ * @Date 2025/6/20 0:01
+ * @Description: TODO
+ * @Version
+ */
+public class HyHltdzBRowMapper implements RowMapper {
+
+ @Override
+ public HyHltdzB mapRow(ResultSet rs, int rowNum) throws SQLException {
+ HyHltdzB hyHltdzB = new HyHltdzB();
+
+ // 1. 站码(空值安全处理)
+ hyHltdzB.setStcd(rs.getString("stcd") != null ? rs.getString("stcd") : "");
+
+ // 2. 时间(精确到毫秒的时间戳处理)
+ Timestamp tmTimestamp = rs.getTimestamp("tm");
+ if (tmTimestamp != null) {
+ hyHltdzB.setTm(new Date(tmTimestamp.getTime()));
+ }
+
+ // 3. 潮别(空值安全处理)
+ hyHltdzB.setTdtp(rs.getString("tdtp") != null ? rs.getString("tdtp") : "");
+
+ // 4. 潮位(精确数值,保留NULL语义)
+ BigDecimal tdz = rs.getBigDecimal("tdz");
+ hyHltdzB.setTdz(tdz); // 保持NULL表示数据缺失
+
+ // 5. 潮位注解码(空值安全处理)
+ hyHltdzB.setTdzrcd(rs.getString("tdzrcd") != null ? rs.getString("tdzrcd") : "");
+
+ // 6. 潮差(精确数值,保留NULL语义)
+ BigDecimal tdrng = rs.getBigDecimal("tdrng");
+ hyHltdzB.setTdrng(tdrng); // 保持NULL表示数据缺失
+
+ // 7. 历时(空值安全处理)
+ hyHltdzB.setDr(rs.getString("dr") != null ? rs.getString("dr") : "");
+
+ // 8. 备注(空值安全处理)
+ hyHltdzB.setNt(rs.getString("nt") != null ? rs.getString("nt") : "");
+
+ return hyHltdzB;
+ }
+
+ // 辅助方法:安全处理日期空值(已集成到主逻辑)
+ private void mapNullableDate(ResultSet rs, String column, java.util.function.Consumer setter)
+ throws SQLException {
+ java.sql.Date sqlDate = rs.getDate(column);
+ if (sqlDate != null && !rs.wasNull()) {
+ setter.accept(new Date(sqlDate.getTime()));
+ }
+ }
+}
diff --git a/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyHmxpFRowMapper.java b/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyHmxpFRowMapper.java
new file mode 100644
index 0000000..e4bb336
--- /dev/null
+++ b/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyHmxpFRowMapper.java
@@ -0,0 +1,59 @@
+package com.ruoyi.swlscx.basic.domain.rowMapper;
+
+import com.ruoyi.swlscx.day.domain.po.HyDpC;
+import com.ruoyi.swlscx.year.domain.po.HyHmxpF;
+import org.springframework.jdbc.core.RowMapper;
+
+import java.math.BigDecimal;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Timestamp;
+import java.util.Date;
+
+/**
+ * @Author al
+ * @Date 2025/6/20 15:15
+ * @Description: TODO
+ * @Version
+ */
+public class HyHmxpFRowMapper implements RowMapper {
+
+ @Override
+ public HyHmxpF mapRow(ResultSet rs, int rowNum) throws SQLException {
+ HyHmxpF hyHmxpF = new HyHmxpF();
+
+ // 映射基础字段(空值安全处理)
+ hyHmxpF.setStcd(rs.getString("stcd")); // 站码
+
+ // 整数类型字段(处理数据库NULL值)
+ setNullableInt(rs, "mxpdr", hyHmxpF::setMxpdr); // 最大降水量时段长(小时)
+ setNullableInt(rs, "yr", hyHmxpF::setYr); // 年
+
+ // 精度数值字段
+ hyHmxpF.setMxp(rs.getObject("mxp", BigDecimal.class)); // 最大降水量(毫米)
+ hyHmxpF.setMxprc(rs.getString("mxprc")); // 注解码
+
+ // 日期时间字段(精确到秒)
+ mapNullableTimestamp(rs, "bgtm", hyHmxpF::setBgtm); // 起时间
+
+ return hyHmxpF;
+ }
+
+ // 辅助方法:安全处理整数空值
+ private void setNullableInt(ResultSet rs, String column,
+ java.util.function.Consumer setter)
+ throws SQLException {
+ int value = rs.getInt(column);
+ setter.accept(rs.wasNull() ? null : value);
+ }
+
+ // 辅助方法:安全处理时间戳(精确到秒)
+ private void mapNullableTimestamp(ResultSet rs, String column,
+ java.util.function.Consumer setter)
+ throws SQLException {
+ Timestamp timestamp = rs.getTimestamp(column);
+ if (timestamp != null && !rs.wasNull()) {
+ setter.accept(new Date(timestamp.getTime())); // 转为java.util.Date
+ }
+ }
+}
diff --git a/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyImxfwFRowMapper.java b/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyImxfwFRowMapper.java
new file mode 100644
index 0000000..c9c1f07
--- /dev/null
+++ b/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyImxfwFRowMapper.java
@@ -0,0 +1,67 @@
+package com.ruoyi.swlscx.basic.domain.rowMapper;
+
+import com.ruoyi.swlscx.day.domain.po.HyDpC;
+import com.ruoyi.swlscx.year.domain.po.HyImxfwF;
+import org.springframework.jdbc.core.RowMapper;
+
+import java.math.BigDecimal;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Timestamp;
+import java.util.Date;
+import java.util.function.Consumer;
+
+/**
+ * @Author al
+ * @Date 2025/6/20 15:15
+ * @Description: TODO
+ * @Version
+ */
+public class HyImxfwFRowMapper implements RowMapper {
+
+ @Override
+ public HyImxfwF mapRow(ResultSet rs, int rowNum) throws SQLException {
+ HyImxfwF entity = new HyImxfwF();
+
+ // 基础信息映射
+ entity.setStcd(handleStringNull(rs, "stcd")); // 站码(空值→空字符串)[5](@ref)
+ entity.setMxwdr(handleStringNull(rs, "mxwdr")); // 洪量时段长(空值→空字符串)
+ setNullableInt(rs, "yr", entity::setYr); // 年份(保留NULL语义)[5](@ref)
+
+ // 洪量特征数据
+ mapNullableTimestamp(rs, "bgdt", entity::setBgdt); // 起始日期(精确时间戳)[4,5](@ref)
+ mapBigDecimal(rs, "mxw", entity::setMxw); // 最大洪量(保留NULL)[5](@ref)
+ entity.setMxwrc(handleStringNull(rs, "mxwrc")); // 洪量注解码(空值→空字符串)
+
+ return entity;
+ }
+
+ // 辅助方法:安全处理字符串空值
+ private String handleStringNull(ResultSet rs, String column) throws SQLException {
+ String value = rs.getString(column);
+ return value != null ? value : ""; // NULL → 空字符串[5](@ref)
+ }
+
+ // 辅助方法:安全处理整数空值(保留NULL语义)
+ private void setNullableInt(ResultSet rs, String column,
+ Consumer setter) throws SQLException {
+ int value = rs.getInt(column);
+ setter.accept(rs.wasNull() ? null : value); // 区分0值与数据缺失[1,4](@ref)
+ }
+
+ // 辅助方法:安全处理时间戳(精确到毫秒)
+ private void mapNullableTimestamp(ResultSet rs, String column,
+ Consumer setter) throws SQLException {
+ Timestamp timestamp = rs.getTimestamp(column);
+ if (timestamp != null && !rs.wasNull()) {
+ setter.accept(new Date(timestamp.getTime())); // 确保时间精度[4,5](@ref)
+ }
+ }
+
+ // 辅助方法:安全处理BigDecimal(保留NULL语义)
+ private void mapBigDecimal(ResultSet rs, String column,
+ Consumer setter) throws SQLException {
+ BigDecimal value = rs.getBigDecimal(column);
+ setter.accept(value); // 不转换NULL,区分真实0值与数据缺失[5](@ref)
+ }
+}
diff --git a/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyMmxpFRowMapper.java b/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyMmxpFRowMapper.java
new file mode 100644
index 0000000..c4f5dcd
--- /dev/null
+++ b/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyMmxpFRowMapper.java
@@ -0,0 +1,45 @@
+package com.ruoyi.swlscx.basic.domain.rowMapper;
+
+import com.ruoyi.swlscx.year.domain.po.HyMmxpF;
+import com.ruoyi.swlscx.year.domain.po.HyYrpF;
+import org.springframework.jdbc.core.RowMapper;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.Date;
+
+/**
+ * @Author al
+ * @Date 2025/6/20 0:01
+ * @Description: TODO
+ * @Version
+ */
+public class HyMmxpFRowMapper implements RowMapper {
+
+ @Override
+ public HyMmxpF mapRow(ResultSet rs, int rowNum) throws SQLException {
+ HyMmxpF hyMmxpF = new HyMmxpF();
+ // 映射基础字段
+ hyMmxpF.setStcd(rs.getString("stcd")); // 站码
+ hyMmxpF.setMxpdr(rs.getInt("mxpdr")); // 最大降水量时段长
+ hyMmxpF.setYr(rs.getInt("yr")); // 年
+
+ // 映射精度数值字段
+ hyMmxpF.setMxp(rs.getBigDecimal("mxp")); // 最大降水量
+ hyMmxpF.setMxprc(rs.getString("mxprc")); // 注解码
+
+ // 安全处理日期字段(空值保护)
+ mapNullableDate(rs, "bgtm", hyMmxpF::setBgdt); // 起时间
+
+ return hyMmxpF;
+ }
+ // 辅助方法:安全处理日期空值(双重检查)
+ private void mapNullableDate(ResultSet rs, String column,
+ java.util.function.Consumer setter)
+ throws SQLException {
+ java.sql.Date sqlDate = rs.getDate(column);
+ if (sqlDate != null && !rs.wasNull()) {
+ setter.accept(new Date(sqlDate.getTime())); // 转换为java.util.Date
+ }
+ }
+}
diff --git a/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyMtpERowMapper.java b/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyMtpERowMapper.java
new file mode 100644
index 0000000..ecb73f3
--- /dev/null
+++ b/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyMtpERowMapper.java
@@ -0,0 +1,48 @@
+package com.ruoyi.swlscx.basic.domain.rowMapper;
+
+import com.ruoyi.swlscx.basic.domain.po.HyStscA;
+import com.ruoyi.swlscx.month.domain.po.HyMtpE;
+import org.springframework.jdbc.core.RowMapper;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.Date;
+
+/**
+ * @Author al
+ * @Date 2025/6/20 0:01
+ * @Description: TODO
+ * @Version
+ */
+public class HyMtpERowMapper implements RowMapper {
+
+ @Override
+ public HyMtpE mapRow(ResultSet rs, int rowNum) throws SQLException {
+ HyMtpE hyMtpE = new HyMtpE();
+
+ // 映射基础字段
+ hyMtpE.setStcd(rs.getString("stcd")); // 站码
+ hyMtpE.setYr(rs.getInt("yr")); // 年
+ hyMtpE.setMth(rs.getInt("mth")); // 月
+
+ // 映射降水量相关字段
+ hyMtpE.setP(rs.getBigDecimal("p")); // 降水量(毫米)
+ hyMtpE.setPrcd(rs.getString("prcd")); // 降水量注解码
+
+ // 映射降水日数字段
+ hyMtpE.setPdynum(rs.getString("pdynum")); // 降水日数
+ hyMtpE.setPdynumrcd(rs.getString("pdynumrcd")); // 降水日数注解码
+
+ // 映射最大降水量字段
+ hyMtpE.setMxdyp(rs.getBigDecimal("mxdyp")); // 最大降水量(毫米)
+ hyMtpE.setMxdyprcd(rs.getString("mxdyprcd")); // 最大降水量注解码
+
+ // 映射日期字段
+ java.sql.Date sqlDate = rs.getDate("mxdypodt");
+ if (sqlDate != null) {
+ hyMtpE.setMxdypodt(new Date(sqlDate.getTime())); // 最大日降水量出现日期
+ }
+
+ return hyMtpE;
+ }
+}
diff --git a/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyMtqERowMapper.java b/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyMtqERowMapper.java
new file mode 100644
index 0000000..a9dcca6
--- /dev/null
+++ b/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyMtqERowMapper.java
@@ -0,0 +1,72 @@
+package com.ruoyi.swlscx.basic.domain.rowMapper;
+
+import com.ruoyi.swlscx.day.domain.po.HyDqC;
+import com.ruoyi.swlscx.month.domain.po.HyMtqE;
+import org.springframework.jdbc.core.RowMapper;
+
+import java.math.BigDecimal;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Timestamp;
+import java.util.Date;
+
+/**
+ * @Author al
+ * @Date 2025/6/20 15:15
+ * @Description: TODO
+ * @Version
+ */
+public class HyMtqERowMapper implements RowMapper {
+
+ @Override
+ public HyMtqE mapRow(ResultSet rs, int rowNum) throws SQLException {
+ HyMtqE entity = new HyMtqE();
+
+ // 1. 基础信息映射
+ entity.setStcd(rs.getString("stcd") != null ? rs.getString("stcd") : ""); // 站码(空值→空字符串)
+ setNullableInt(rs, "yr", entity::setYr); // 年份(保留NULL语义)
+ setNullableInt(rs, "mth", entity::setMth); // 月份(保留NULL语义)
+
+ // 2. 平均流量数据
+ mapBigDecimal(rs, "avq", entity::setAvq); // 平均流量(保留NULL)
+ entity.setAvqrcd(rs.getString("avqrcd") != null ? rs.getString("avqrcd") : ""); // 注解码
+
+ // 3. 最高流量数据
+ mapBigDecimal(rs, "mxq", entity::setMxq); // 最高流量(保留NULL)
+ entity.setMxqrcd(rs.getString("mxqrcd") != null ? rs.getString("mxqrcd") : "");
+ mapNullableTimestamp(rs, "mxqdt", entity::setMxqdt); // 最高流量日期(精确时间戳)
+
+ // 4. 最低流量数据
+ mapBigDecimal(rs, "mnq", entity::setMnq); // 最低流量(保留NULL)
+ entity.setMnqrcd(rs.getString("mnqrcd") != null ? rs.getString("mnqrcd") : "");
+ mapNullableTimestamp(rs, "mnqdt", entity::setMnqdt); // 最低流量日期
+
+ return entity;
+ }
+
+ // 辅助方法:安全处理整数空值(保留NULL语义)
+ private void setNullableInt(ResultSet rs, String column,
+ java.util.function.Consumer setter)
+ throws SQLException {
+ int value = rs.getInt(column);
+ setter.accept(rs.wasNull() ? null : value); // 明确区分0值和数据缺失[3](@ref)
+ }
+
+ // 辅助方法:安全处理时间戳(精确到毫秒)
+ private void mapNullableTimestamp(ResultSet rs, String column,
+ java.util.function.Consumer setter)
+ throws SQLException {
+ Timestamp timestamp = rs.getTimestamp(column);
+ if (timestamp != null && !rs.wasNull()) {
+ setter.accept(new Date(timestamp.getTime())); // 确保时间精度[1](@ref)
+ }
+ }
+
+ // 辅助方法:安全处理BigDecimal(保留NULL语义)
+ private void mapBigDecimal(ResultSet rs, String column,
+ java.util.function.Consumer setter)
+ throws SQLException {
+ BigDecimal value = rs.getBigDecimal(column);
+ setter.accept(value); // 不转换NULL,区分真实0值与数据缺失[4](@ref)
+ }
+}
diff --git a/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyMttdzERowMapper.java b/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyMttdzERowMapper.java
new file mode 100644
index 0000000..59b89e8
--- /dev/null
+++ b/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyMttdzERowMapper.java
@@ -0,0 +1,126 @@
+package com.ruoyi.swlscx.basic.domain.rowMapper;
+
+import com.ruoyi.swlscx.month.domain.po.HyMttdzE;
+import com.ruoyi.swlscx.year.domain.po.HyHmxpF;
+import org.springframework.jdbc.core.RowMapper;
+
+import java.math.BigDecimal;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Timestamp;
+import java.util.Date;
+
+/**
+ * @Author al
+ * @Date 2025/6/20 15:15
+ * @Description: TODO
+ * @Version
+ */
+public class HyMttdzERowMapper implements RowMapper {
+
+ @Override
+ public HyMttdzE mapRow(ResultSet rs, int rowNum) throws SQLException {
+ HyMttdzE entity = new HyMttdzE();
+
+ // 基础信息映射
+ entity.setStcd(rs.getString("stcd") != null ? rs.getString("stcd") : "");
+ setNullableInt(rs, "yr", entity::setYr);
+ setNullableInt(rs, "mth", entity::setMth);
+
+ // 高潮潮位数据
+ mapBigDecimal(rs, "avhtdz", entity::setAvhtdz);
+ entity.setAvhtdzrcd(rs.getString("avhtdzrcd") != null ? rs.getString("avhtdzrcd") : "");
+ mapBigDecimal(rs, "hthtdz", entity::setHthtdz);
+ entity.setHthtdzrcd(rs.getString("hthtdzrcd") != null ? rs.getString("hthtdzrcd") : "");
+ mapNullableTimestamp(rs, "hthtdzotm", entity::setHthtdzotm);
+ mapBigDecimal(rs, "lthtdz", entity::setLthtdz);
+ entity.setLthtdzrcd(rs.getString("lthtdzrcd") != null ? rs.getString("lthtdzrcd") : "");
+ mapNullableTimestamp(rs, "lthtdzotm", entity::setLthtdzotm);
+
+ // 低潮潮位数据
+ mapBigDecimal(rs, "avltdz", entity::setAvltdz);
+ entity.setAvltdzrcd(rs.getString("avltdzrcd") != null ? rs.getString("avltdzrcd") : "");
+ mapBigDecimal(rs, "htltdz", entity::setHtltdz);
+ entity.setHtltdzrcd(rs.getString("htltdzrcd") != null ? rs.getString("htltdzrcd") : "");
+ mapNullableTimestamp(rs, "htltdzotm", entity::setHtltdzotm);
+ mapBigDecimal(rs, "ltltdz", entity::setLtltdz);
+ entity.setLtltdzrcd(rs.getString("ltltdzrcd") != null ? rs.getString("ltltdzrcd") : "");
+ mapNullableTimestamp(rs, "ltltdzotm", entity::setLtltdzotm);
+
+ // 涨潮潮差数据
+ mapBigDecimal(rs, "avftdr", entity::setAvftdr);
+ entity.setAvftdrrcd(rs.getString("avftdrrcd") != null ? rs.getString("avftdrrcd") : "");
+ mapBigDecimal(rs, "mxfltdr", entity::setMxfltdr);
+ entity.setMxfltdrrcd(rs.getString("mxfltdrrcd") != null ? rs.getString("mxfltdrrcd") : "");
+ mapNullableTimestamp(rs, "mxfltdrhtm", entity::setMxfltdrhtm);
+ mapBigDecimal(rs, "mnfltdr", entity::setMnfltdr);
+ entity.setMnfltdrrcd(rs.getString("mnfltdrrcd") != null ? rs.getString("mnfltdrrcd") : "");
+ mapNullableTimestamp(rs, "mnfltdrhtm", entity::setMnfltdrhtm);
+
+ // 落潮潮差数据
+ mapBigDecimal(rs, "aver", entity::setAver);
+ entity.setAverbbrrcd(rs.getString("averbbrrcd") != null ? rs.getString("averbbrrcd") : "");
+ mapBigDecimal(rs, "mxebtdr", entity::setMxebtdr);
+ entity.setMxebtdrrcd(rs.getString("mxebtdrrcd") != null ? rs.getString("mxebtdrrcd") : "");
+ mapNullableTimestamp(rs, "mxebtdrht", entity::setMxebtdrht);
+ mapBigDecimal(rs, "mnebtdr", entity::setMnebtdr);
+ entity.setMnebtdrrcd(rs.getString("mnebtdrrcd") != null ? rs.getString("mnebtdrrcd") : "");
+ mapNullableTimestamp(rs, "mnebtdrhtm", entity::setMnebtdrhtm);
+
+ // 涨潮历时数据
+ setNullableInt(rs, "avftd", entity::setAvftd);
+ entity.setAvftdrcd(rs.getString("avftdrcd") != null ? rs.getString("avftdrcd") : "");
+ setNullableInt(rs, "mxfltddr", entity::setMxfltddr);
+ entity.setMxfltddrrcd(rs.getString("mxfltddrrcd") != null ? rs.getString("mxfltddrrcd") : "");
+ mapNullableTimestamp(rs, "mxfltddrhtm", entity::setMxfltddrhtm);
+ setNullableInt(rs, "mnfltddr", entity::setMnfltddr);
+ entity.setMnfltddrrcd(rs.getString("mnfltddrrcd") != null ? rs.getString("mnfltddrrcd") : "");
+ mapNullableTimestamp(rs, "mnfltddrhtm", entity::setMnfltddrhtm);
+
+ // 落潮历时数据
+ setNullableInt(rs, "avebbdr", entity::setAvebbdr);
+ entity.setAvedrc(rs.getString("avedrc") != null ? rs.getString("avedrc") : "");
+ setNullableInt(rs, "mxebtddr", entity::setMxebtddr);
+ entity.setMxebtddrrcd(rs.getString("mxebtddrrcd") != null ? rs.getString("mxebtddrrcd") : "");
+ mapNullableTimestamp(rs, "mxebtddrhtm", entity::setMxebtddrhtm);
+ setNullableInt(rs, "mnbtddr", entity::setMnbtddr);
+ entity.setMnebtddrrcd(rs.getString("mnebtddrrcd") != null ? rs.getString("mnebtddrrcd") : "");
+ mapNullableTimestamp(rs, "mnebtddrhtm", entity::setMnebtddrhtm);
+
+ // 综合潮位数据
+ mapBigDecimal(rs, "hravtdz", entity::setHravtdz);
+ entity.setHravtdzrcd(rs.getString("hravtdzrcd") != null ? rs.getString("hravtdzrcd") : "");
+ mapBigDecimal(rs, "avtdr", entity::setAvtdr);
+ entity.setAvtdrrcd(rs.getString("avtdrrcd") != null ? rs.getString("avtdrrcd") : "");
+ setNullableInt(rs, "avtddr", entity::setAvtddr);
+ entity.setAvtddrrcd(rs.getString("avtddrrcd") != null ? rs.getString("avtddrrcd") : "");
+
+ return entity;
+ }
+
+ // 辅助方法:安全处理整数空值
+ private void setNullableInt(ResultSet rs, String column,
+ java.util.function.Consumer setter)
+ throws SQLException {
+ int value = rs.getInt(column);
+ setter.accept(rs.wasNull() ? null : value);
+ }
+
+ // 辅助方法:安全处理时间戳(精确到秒)
+ private void mapNullableTimestamp(ResultSet rs, String column,
+ java.util.function.Consumer setter)
+ throws SQLException {
+ Timestamp timestamp = rs.getTimestamp(column);
+ if (timestamp != null && !rs.wasNull()) {
+ setter.accept(new Date(timestamp.getTime()));
+ }
+ }
+
+ // 新增辅助方法:安全处理BigDecimal空值(保留NULL语义)
+ private void mapBigDecimal(ResultSet rs, String column,
+ java.util.function.Consumer setter)
+ throws SQLException {
+ BigDecimal value = rs.getBigDecimal(column);
+ setter.accept(value); // 保留NULL表示数据缺失
+ }
+}
diff --git a/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyMtzERowMapper.java b/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyMtzERowMapper.java
new file mode 100644
index 0000000..0614e25
--- /dev/null
+++ b/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyMtzERowMapper.java
@@ -0,0 +1,75 @@
+
+package com.ruoyi.swlscx.basic.domain.rowMapper;
+
+import com.ruoyi.swlscx.day.domain.po.HyDzC;
+import com.ruoyi.swlscx.month.domain.po.HyMtzE;
+import org.springframework.jdbc.core.RowMapper;
+
+import java.math.BigDecimal;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Timestamp;
+import java.util.Date;
+
+/**
+ * @Author al
+ * @Date 2025/6/20 0:01
+ * @Description: TODO
+ * @Version
+ */
+public class HyMtzERowMapper implements RowMapper {
+
+ @Override
+ public HyMtzE mapRow(ResultSet rs, int rowNum) throws SQLException {
+ HyMtzE hyMtzE = new HyMtzE();
+
+ // 1. 站码(字符串)
+ hyMtzE.setStcd(rs.getString("stcd"));
+
+ // 2. 年份(整数)
+ Integer yr = rs.getInt("yr");
+ hyMtzE.setYr(rs.wasNull() ? null : yr); // 处理SQL NULL
+
+ // 3. 月份(整数)
+ Integer mth = rs.getInt("mth");
+ hyMtzE.setMth(rs.wasNull() ? null : mth);
+
+ // 4. 平均水位(精确数值)
+ BigDecimal avz = rs.getBigDecimal("avz");
+ hyMtzE.setAvz(avz != null ? avz : BigDecimal.ZERO); // NULL 转为 0.00
+
+ // 5. 平均水位注解码
+ String avzrcd = rs.getString("avzrcd");
+ hyMtzE.setAvzrcd(avzrcd != null ? avzrcd : "");
+
+ // 6. 最高水位(精确数值)
+ BigDecimal htz = rs.getBigDecimal("htz");
+ hyMtzE.setHtz(htz != null ? htz : BigDecimal.ZERO);
+
+ // 7. 最高水位注解码
+ String htzrcd = rs.getString("htzrcd");
+ hyMtzE.setHtzrcd(htzrcd != null ? htzrcd : "");
+
+ // 8. 最高水位日期(带空值检查)
+ Timestamp htzdtTimestamp = rs.getTimestamp("htzdt");
+ if (htzdtTimestamp != null) {
+ hyMtzE.setHtzdt(new Date(htzdtTimestamp.getTime()));
+ }
+
+ // 9. 最低水位(精确数值)
+ BigDecimal mnz = rs.getBigDecimal("mnz");
+ hyMtzE.setMnz(mnz != null ? mnz : BigDecimal.ZERO);
+
+ // 10. 最低水位注解码
+ String mnzrcd = rs.getString("mnzrcd");
+ hyMtzE.setMnzrcd(mnzrcd != null ? mnzrcd : "");
+
+ // 11. 最低水位日期(带空值检查)
+ Timestamp mnzdtTimestamp = rs.getTimestamp("mnzdt");
+ if (mnzdtTimestamp != null) {
+ hyMtzE.setMnzdt(new Date(mnzdtTimestamp.getTime()));
+ }
+
+ return hyMtzE;
+ }
+}
diff --git a/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyPrexBRowMapper.java b/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyPrexBRowMapper.java
new file mode 100644
index 0000000..08c1e58
--- /dev/null
+++ b/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyPrexBRowMapper.java
@@ -0,0 +1,49 @@
+
+package com.ruoyi.swlscx.basic.domain.rowMapper;
+
+import com.ruoyi.swlscx.excerpt.domain.po.HyPrexB;
+import com.ruoyi.swlscx.year.domain.po.HyMmxpF;
+import org.springframework.jdbc.core.RowMapper;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Timestamp;
+import java.util.Date;
+
+/**
+ * @Author al
+ * @Date 2025/6/20 0:01
+ * @Description: TODO
+ * @Version
+ */
+public class HyPrexBRowMapper implements RowMapper {
+
+
+ @Override
+ public HyPrexB mapRow(ResultSet rs, int rowNum) throws SQLException {
+ HyPrexB hyPrexB = new HyPrexB();
+
+ // 1. 站码(字符串)
+ hyPrexB.setStcd(rs.getString("stcd"));
+
+ // 2. 起止时间(带时区转换)
+ Timestamp bgTimestamp = rs.getTimestamp("bgtm");
+ if (bgTimestamp != null) {
+ hyPrexB.setBgtm(new Date(bgTimestamp.getTime())); // SQL Timestamp -> Java Date
+ }
+
+ Timestamp endTimestamp = rs.getTimestamp("endtm");
+ if (endTimestamp != null) {
+ hyPrexB.setEndtm(new Date(endTimestamp.getTime()));
+ }
+
+ // 3. 降水量(精确数值)
+ hyPrexB.setP(rs.getBigDecimal("p")); // 直接映射BigDecimal
+
+ // 4. 注解码(空值安全处理)
+ String prcd = rs.getString("prcd");
+ hyPrexB.setPrcd(prcd != null ? prcd : ""); // NULL转空字符串
+
+ return hyPrexB;
+ }
+}
diff --git a/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyStscARowMapper.java b/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyStscARowMapper.java
new file mode 100644
index 0000000..0e47d33
--- /dev/null
+++ b/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyStscARowMapper.java
@@ -0,0 +1,61 @@
+package com.ruoyi.swlscx.basic.domain.rowMapper;
+
+import com.ruoyi.swlscx.basic.domain.po.HyStscA;
+import org.springframework.jdbc.core.RowMapper;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+/**
+ * @Author al
+ * @Date 2025/6/20 0:01
+ * @Description: TODO
+ * @Version
+ */
+public class HyStscARowMapper implements RowMapper {
+
+ @Override
+ public HyStscA mapRow(java.sql.ResultSet rs, int rowNum) throws java.sql.SQLException {
+ HyStscA hyStscA = new HyStscA();
+ // 主键字段
+ hyStscA.setStcd(rs.getString("stcd"));
+ hyStscA.setStnm(rs.getString("stnm"));
+
+ // 字符串类型字段
+ hyStscA.setStct(rs.getString("stct"));
+ hyStscA.setBshncd(rs.getString("bshncd"));
+ hyStscA.setHnnm(rs.getString("hnnm"));
+ hyStscA.setRvnm(rs.getString("rvnm"));
+ hyStscA.setObitmcd(rs.getString("obitmcd"));
+ hyStscA.setAddvcd(rs.getString("addvcd"));
+ hyStscA.setWrrgcd(rs.getString("wrrgcd"));
+ hyStscA.setFlto(rs.getString("flto"));
+ hyStscA.setFdtmnm(rs.getString("fdtmnm"));
+ hyStscA.setAdmag(rs.getString("admag"));
+ hyStscA.setAdmnst(rs.getString("admnst"));
+ hyStscA.setStlc(rs.getString("stlc"));
+ hyStscA.setStgrd(rs.getString("stgrd"));
+ hyStscA.setFrgrd(rs.getString("frgrd"));
+ hyStscA.setNt(rs.getString("nt"));
+
+ // 整数类型字段(注意处理 NULL 值)
+ hyStscA.setEsstyr(getNullableInt(rs, "esstyr"));
+ hyStscA.setEsstmth(getNullableInt(rs, "esstmth"));
+ hyStscA.setWdstyr(getNullableInt(rs, "wdstyr"));
+ hyStscA.setWdstmth(getNullableInt(rs, "wdstmth"));
+
+ // 小数类型字段(使用 BigDecimal 精确计算)
+ hyStscA.setDrar(rs.getBigDecimal("drar"));
+ hyStscA.setDstrvm(rs.getBigDecimal("dstrvm"));
+ hyStscA.setLgtd(rs.getBigDecimal("lgtd"));
+ hyStscA.setLttd(rs.getBigDecimal("lttd"));
+
+ return hyStscA;
+ }
+
+ // 处理可能为 NULL 的整数字段
+ private Integer getNullableInt(ResultSet rs, String column) throws SQLException {
+ Object value = rs.getObject(column);
+ return (value != null) ? rs.getInt(column) : null;
+ }
+}
diff --git a/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyWfdzFRowMapper.java b/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyWfdzFRowMapper.java
new file mode 100644
index 0000000..d3061f1
--- /dev/null
+++ b/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyWfdzFRowMapper.java
@@ -0,0 +1,54 @@
+package com.ruoyi.swlscx.basic.domain.rowMapper;
+
+import com.ruoyi.swlscx.basic.domain.po.HyWfdzF;
+import com.ruoyi.swlscx.year.domain.po.HyYrpF;
+import org.springframework.jdbc.core.RowMapper;
+
+import java.math.BigDecimal;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.Date;
+
+/**
+ * @Author al
+ * @Date 2025/6/20 0:01
+ * @Description: TODO
+ * @Version
+ */
+public class HyWfdzFRowMapper implements RowMapper {
+
+ @Override
+ public HyWfdzF mapRow(ResultSet rs, int rowNum) throws SQLException {
+ HyWfdzF hyWfdzF = new HyWfdzF();
+
+ // 1. 站码(直接映射)
+ hyWfdzF.setStcd(rs.getString("stcd"));
+
+ // 2. 年份(BigDecimal类型)
+ BigDecimal yr = rs.getBigDecimal("yr");
+ hyWfdzF.setYr(yr != null ? yr : BigDecimal.ZERO); // NULL → 0
+
+ // 3. 降水量(BigDecimal类型)
+ BigDecimal wf = rs.getBigDecimal("wf");
+ hyWfdzF.setWf(wf != null ? wf : BigDecimal.ZERO); // NULL → 0.00
+
+ // 4. 水位值(BigDecimal类型)
+ BigDecimal rfz = rs.getBigDecimal("rfz");
+ hyWfdzF.setRfz(rfz != null ? rfz : BigDecimal.ZERO); // NULL → 0.00
+
+ // 5. 注解码(空值安全处理)
+ String rzrcd = rs.getString("rzrcd");
+ hyWfdzF.setRzrcd(rzrcd != null ? rzrcd : ""); // NULL → 空字符串
+
+ return hyWfdzF;
+ }
+
+ // 辅助方法:安全处理日期空值
+ private void mapNullableDate(ResultSet rs, String column, java.util.function.Consumer setter)
+ throws SQLException {
+ java.sql.Date sqlDate = rs.getDate(column);
+ if (sqlDate != null && !rs.wasNull()) {
+ setter.accept(new Date(sqlDate.getTime()));
+ }
+ }
+}
diff --git a/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyWsfhexBRowMapper.java b/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyWsfhexBRowMapper.java
new file mode 100644
index 0000000..226a69e
--- /dev/null
+++ b/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyWsfhexBRowMapper.java
@@ -0,0 +1,53 @@
+package com.ruoyi.swlscx.basic.domain.rowMapper;
+
+import com.ruoyi.swlscx.excerpt.domain.po.HyWsfhexB;
+import com.ruoyi.swlscx.year.domain.po.HyMmxpF;
+import org.springframework.jdbc.core.RowMapper;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Timestamp;
+import java.util.Date;
+
+/**
+ * @Author al
+ * @Date 2025/6/20 0:01
+ * @Description: TODO
+ * @Version
+ */
+public class HyWsfhexBRowMapper implements RowMapper {
+
+ @Override
+ public HyWsfhexB mapRow(ResultSet rs, int rowNum) throws SQLException {
+ HyWsfhexB entity = new HyWsfhexB();
+
+ // 站码(字符串,处理空值)
+ entity.setStcd(rs.getString("stcd") != null ? rs.getString("stcd") : "");
+
+ // 时间(使用getTimestamp获取时间戳,然后转换为Date)
+ Timestamp tmTimestamp = rs.getTimestamp("tm");
+ if (tmTimestamp != null) {
+ entity.setTm(new Date(tmTimestamp.getTime()));
+ }
+
+ // 闸上水位(BigDecimal,允许为NULL)
+ entity.setUpz(rs.getBigDecimal("upz"));
+
+ // 闸上水位注解码(字符串,处理空值)
+ entity.setUpzrcd(rs.getString("upzrcd") != null ? rs.getString("upzrcd") : "");
+
+ // 闸下水位(BigDecimal,允许为NULL)
+ entity.setDwz(rs.getBigDecimal("dwz"));
+
+ // 闸下水位注解码(字符串,处理空值)
+ entity.setDwzrcd(rs.getString("dwzrcd") != null ? rs.getString("dwzrcd") : "");
+
+ // 流量(BigDecimal,允许为NULL)
+ entity.setQ(rs.getBigDecimal("q"));
+
+ // 含沙量(BigDecimal,允许为NULL)
+ entity.setS(rs.getBigDecimal("s"));
+
+ return entity;
+ }
+}
diff --git a/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyYrpFRowMapper.java b/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyYrpFRowMapper.java
new file mode 100644
index 0000000..a9b31de
--- /dev/null
+++ b/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyYrpFRowMapper.java
@@ -0,0 +1,52 @@
+package com.ruoyi.swlscx.basic.domain.rowMapper;
+
+import com.ruoyi.swlscx.month.domain.po.HyMtpE;
+import com.ruoyi.swlscx.year.domain.po.HyYrpF;
+import org.springframework.jdbc.core.RowMapper;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.Date;
+
+/**
+ * @Author al
+ * @Date 2025/6/20 0:01
+ * @Description: TODO
+ * @Version
+ */
+public class HyYrpFRowMapper implements RowMapper {
+
+ @Override
+ public HyYrpF mapRow(ResultSet rs, int rowNum) throws SQLException {
+ HyYrpF hyYrpF = new HyYrpF();
+
+ // 映射基础字段
+ hyYrpF.setStcd(rs.getString("stcd")); // 站码
+ hyYrpF.setYr(rs.getInt("yr")); // 年
+
+ // 映射降水量相关字段
+ hyYrpF.setP(rs.getBigDecimal("p")); // 降水量(毫米)
+ hyYrpF.setPrcd(rs.getString("prcd")); // 降水量注解码
+
+ // 映射降水日数字段
+ hyYrpF.setPdynum(rs.getString("pdynum")); // 降水日数
+ hyYrpF.setPdynumrcd(rs.getString("pdynumrcd")); // 降水日数注解码
+
+ // 映射日期字段(处理空值)
+ mapNullableDate(rs, "frdsdt", hyYrpF::setFrdsdt); // 终霜日期
+ mapNullableDate(rs, "frapdt", hyYrpF::setFrapdt); // 初霜日期
+ mapNullableDate(rs, "sndsdt", hyYrpF::setSndsdt); // 终雪日期
+ mapNullableDate(rs, "snapdt", hyYrpF::setSnapdt); // 初雪日期
+
+ return hyYrpF;
+ }
+
+ // 辅助方法:安全处理日期空值
+ private void mapNullableDate(ResultSet rs, String column, java.util.function.Consumer setter)
+ throws SQLException {
+ java.sql.Date sqlDate = rs.getDate(column);
+ if (sqlDate != null && !rs.wasNull()) {
+ setter.accept(new Date(sqlDate.getTime()));
+ }
+ }
+}
diff --git a/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyYrqFRowMapper.java b/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyYrqFRowMapper.java
new file mode 100644
index 0000000..38260f5
--- /dev/null
+++ b/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyYrqFRowMapper.java
@@ -0,0 +1,73 @@
+package com.ruoyi.swlscx.basic.domain.rowMapper;
+
+import com.ruoyi.swlscx.month.domain.po.HyMtpE;
+import com.ruoyi.swlscx.year.domain.po.HyYrqF;
+import org.springframework.jdbc.core.RowMapper;
+
+import java.math.BigDecimal;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Timestamp;
+import java.util.Date;
+
+/**
+ * @Author al
+ * @Date 2025/6/20 0:01
+ * @Description: TODO
+ * @Version
+ */
+public class HyYrqFRowMapper implements RowMapper {
+
+ @Override
+ public HyYrqF mapRow(ResultSet rs, int rowNum) throws SQLException {
+ HyYrqF entity = new HyYrqF();
+
+ // 基础信息映射
+ entity.setStcd(rs.getString("stcd") != null ? rs.getString("stcd") : ""); // 站码(空值→空字符串)[2,4](@ref)
+ setNullableInt(rs, "yr", entity::setYr); // 年份(保留NULL语义)
+
+ // 流量核心数据
+ mapBigDecimal(rs, "avq", entity::setAvq); // 平均流量(保留NULL)
+ entity.setAvqrcd(rs.getString("avqrcd") != null ? rs.getString("avqrcd") : "");
+ mapBigDecimal(rs, "mxq", entity::setMxq); // 最高流量(保留NULL)
+ entity.setMxqrcd(rs.getString("mxqrcd") != null ? rs.getString("mxqrcd") : "");
+ mapNullableTimestamp(rs, "mxqdt", entity::setMxqdt); // 最高流量日期(精确时间戳)
+ mapBigDecimal(rs, "mnq", entity::setMnq); // 最低流量(保留NULL)
+ entity.setMnqrcd(rs.getString("mnqrcd") != null ? rs.getString("mnqrcd") : "");
+ mapNullableTimestamp(rs, "mnqdt", entity::setMnqdt); // 最低流量日期
+
+ // 径流特征数据
+ mapBigDecimal(rs, "rw", entity::setRw); // 径流量(万立方米)
+ entity.setRwrcd(rs.getString("rwrcd") != null ? rs.getString("rwrcd") : "");
+ mapBigDecimal(rs, "rm", entity::setRm); // 径流模数
+ mapBigDecimal(rs, "rd", entity::setRd); // 径流深
+
+ return entity;
+ }
+
+ // 辅助方法:安全处理整数空值(保留NULL语义)[3,5](@ref)
+ private void setNullableInt(ResultSet rs, String column,
+ java.util.function.Consumer setter)
+ throws SQLException {
+ int value = rs.getInt(column);
+ setter.accept(rs.wasNull() ? null : value); // 明确区分0值和数据缺失
+ }
+
+ // 辅助方法:安全处理时间戳(精确到毫秒)[4](@ref)
+ private void mapNullableTimestamp(ResultSet rs, String column,
+ java.util.function.Consumer setter)
+ throws SQLException {
+ Timestamp timestamp = rs.getTimestamp(column);
+ if (timestamp != null && !rs.wasNull()) {
+ setter.accept(new Date(timestamp.getTime())); // 确保时间精度
+ }
+ }
+
+ // 辅助方法:安全处理BigDecimal(保留NULL语义)[6](@ref)
+ private void mapBigDecimal(ResultSet rs, String column,
+ java.util.function.Consumer setter)
+ throws SQLException {
+ BigDecimal value = rs.getBigDecimal(column);
+ setter.accept(value); // 不转换NULL,区分真实0值与数据缺失
+ }
+}
\ No newline at end of file
diff --git a/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyYrtdzFRowMapper.java b/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyYrtdzFRowMapper.java
new file mode 100644
index 0000000..daff6c0
--- /dev/null
+++ b/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyYrtdzFRowMapper.java
@@ -0,0 +1,125 @@
+package com.ruoyi.swlscx.basic.domain.rowMapper;
+
+import com.ruoyi.swlscx.month.domain.po.HyMttdzE;
+import com.ruoyi.swlscx.year.domain.po.HyYrtdzF;
+import org.springframework.jdbc.core.RowMapper;
+
+import java.math.BigDecimal;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Timestamp;
+import java.util.Date;
+
+/**
+ * @Author al
+ * @Date 2025/6/20 15:15
+ * @Description: TODO
+ * @Version
+ */
+public class HyYrtdzFRowMapper implements RowMapper {
+
+ @Override
+ public HyYrtdzF mapRow(ResultSet rs, int rowNum) throws SQLException {
+ HyYrtdzF entity = new HyYrtdzF();
+
+ // 基础信息映射
+ entity.setStcd(rs.getString("stcd") != null ? rs.getString("stcd") : "");
+ setNullableInt(rs, "yr", entity::setYr);
+
+ // 高潮潮位数据
+ mapBigDecimal(rs, "avhtdz", entity::setAvhtdz);
+ entity.setAvhtdzrcd(rs.getString("avhtdzrcd") != null ? rs.getString("avhtdzrcd") : "");
+ mapBigDecimal(rs, "hthtdz", entity::setHthtdz);
+ entity.setHthtdzrcd(rs.getString("hthtdzrcd") != null ? rs.getString("hthtdzrcd") : "");
+ mapNullableTimestamp(rs, "hthtdzotm", entity::setHthtdzotm);
+ mapBigDecimal(rs, "lthtdz", entity::setLthtdz);
+ entity.setLthtdzrcd(rs.getString("lthtdzrcd") != null ? rs.getString("lthtdzrcd") : "");
+ mapNullableTimestamp(rs, "lthtdzotm", entity::setLthtdzotm);
+
+ // 低潮潮位数据
+ mapBigDecimal(rs, "avltdz", entity::setAvltdz);
+ entity.setAvltdzrcd(rs.getString("avltdzrcd") != null ? rs.getString("avltdzrcd") : "");
+ mapBigDecimal(rs, "htltdz", entity::setHtltdz);
+ entity.setHtltdzrcd(rs.getString("htltdzrcd") != null ? rs.getString("htltdzrcd") : "");
+ mapNullableTimestamp(rs, "htltdzotm", entity::setHtltdzotm);
+ mapBigDecimal(rs, "ltltdz", entity::setLtltdz);
+ entity.setLtltdzrcd(rs.getString("ltltdzrcd") != null ? rs.getString("ltltdzrcd") : "");
+ mapNullableTimestamp(rs, "ltltdzotm", entity::setLtltdzotm);
+
+ // 涨潮潮差数据
+ mapBigDecimal(rs, "avftdr", entity::setAvftdr);
+ entity.setAvftdrrcd(rs.getString("avftdrrcd") != null ? rs.getString("avftdrrcd") : "");
+ mapBigDecimal(rs, "mxfltdr", entity::setMxfltdr);
+ entity.setMxfltdrrcd(rs.getString("mxfltdrrcd") != null ? rs.getString("mxfltdrrcd") : "");
+ mapNullableTimestamp(rs, "mxfltdrhtm", entity::setMxfltdrhtm);
+ mapBigDecimal(rs, "mnfltdr", entity::setMnfltdr);
+ entity.setMnfltdrrcd(rs.getString("mnfltdrrcd") != null ? rs.getString("mnfltdrrcd") : "");
+ mapNullableTimestamp(rs, "mnfltdrhtm", entity::setMnfltdrhtm);
+
+ // 落潮潮差数据
+ mapBigDecimal(rs, "aver", entity::setAver);
+ entity.setAverbbrrcd(rs.getString("averbbrrcd") != null ? rs.getString("averbbrrcd") : "");
+ mapBigDecimal(rs, "mxebtdr", entity::setMxebtdr);
+ entity.setMxebtdrrcd(rs.getString("mxebtdrrcd") != null ? rs.getString("mxebtdrrcd") : "");
+ mapNullableTimestamp(rs, "mxebtdrht", entity::setMxebtdrht);
+ mapBigDecimal(rs, "mnebtdr", entity::setMnebtdr);
+ entity.setMnebtdrrcd(rs.getString("mnebtdrrcd") != null ? rs.getString("mnebtdrrcd") : "");
+ mapNullableTimestamp(rs, "mnebtdrhtm", entity::setMnebtdrhtm);
+
+ // 涨潮历时数据
+ setNullableInt(rs, "avftd", entity::setAvftd);
+ entity.setAvftdrcd(rs.getString("avftdrcd") != null ? rs.getString("avftdrcd") : "");
+ setNullableInt(rs, "mxfltddr", entity::setMxfltddr);
+ entity.setMxfltddrrcd(rs.getString("mxfltddrrcd") != null ? rs.getString("mxfltddrrcd") : "");
+ mapNullableTimestamp(rs, "mxfltddrhtm", entity::setMxfltddrhtm);
+ setNullableInt(rs, "mnfltddr", entity::setMnfltddr);
+ entity.setMnfltddrrcd(rs.getString("mnfltddrrcd") != null ? rs.getString("mnfltddrrcd") : "");
+ mapNullableTimestamp(rs, "mnfltddrhtm", entity::setMnfltddrhtm);
+
+ // 落潮历时数据
+ setNullableInt(rs, "avebbdr", entity::setAvebbdr);
+ entity.setAvedrc(rs.getString("avedrc") != null ? rs.getString("avedrc") : "");
+ setNullableInt(rs, "mxebtddr", entity::setMxebtddr);
+ entity.setMxebtddrrcd(rs.getString("mxebtddrrcd") != null ? rs.getString("mxebtddrrcd") : "");
+ mapNullableTimestamp(rs, "mxebtddrhtm", entity::setMxebtddrhtm);
+ setNullableInt(rs, "mnbtddr", entity::setMnbtddr);
+ entity.setMnebtddrrcd(rs.getString("mnebtddrrcd") != null ? rs.getString("mnebtddrrcd") : "");
+ mapNullableTimestamp(rs, "mnebtddrhtm", entity::setMnebtddrhtm);
+
+ // 综合潮位数据
+ mapBigDecimal(rs, "hravtdz", entity::setHravtdz);
+ entity.setHravtdzrcd(rs.getString("hravtdzrcd") != null ? rs.getString("hravtdzrcd") : "");
+ mapBigDecimal(rs, "avtdr", entity::setAvtdr);
+ entity.setAvtdrrcd(rs.getString("avtdrrcd") != null ? rs.getString("avtdrrcd") : "");
+ setNullableInt(rs, "avtddr", entity::setAvtddr);
+ entity.setAvtddrrcd(rs.getString("avtddrrcd") != null ? rs.getString("avtddrrcd") : "");
+
+ return entity;
+ }
+
+ // 辅助方法:安全处理整数空值
+ private void setNullableInt(ResultSet rs, String column,
+ java.util.function.Consumer setter)
+ throws SQLException {
+ int value = rs.getInt(column);
+ setter.accept(rs.wasNull() ? null : value);
+ }
+
+ // 辅助方法:安全处理时间戳(精确到秒)
+ private void mapNullableTimestamp(ResultSet rs, String column,
+ java.util.function.Consumer setter)
+ throws SQLException {
+ Timestamp timestamp = rs.getTimestamp(column);
+ if (timestamp != null && !rs.wasNull()) {
+ setter.accept(new Date(timestamp.getTime()));
+ }
+ }
+
+ // 新增辅助方法:安全处理BigDecimal空值(保留NULL语义)
+ private void mapBigDecimal(ResultSet rs, String column,
+ java.util.function.Consumer setter)
+ throws SQLException {
+ BigDecimal value = rs.getBigDecimal(column);
+ setter.accept(value); // 保留NULL表示数据缺失
+ }
+}
diff --git a/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyYrzFRowMapper.java b/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyYrzFRowMapper.java
new file mode 100644
index 0000000..f4a1d58
--- /dev/null
+++ b/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyYrzFRowMapper.java
@@ -0,0 +1,60 @@
+package com.ruoyi.swlscx.basic.domain.rowMapper;
+
+import com.ruoyi.swlscx.month.domain.po.HyMtpE;
+import com.ruoyi.swlscx.year.domain.po.HyYrzF;
+import org.springframework.jdbc.core.RowMapper;
+
+import java.math.BigDecimal;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Timestamp;
+import java.util.Date;
+
+/**
+ * @Author al
+ * @Date 2025/6/20 0:01
+ * @Description: TODO
+ * @Version
+ */
+public class HyYrzFRowMapper implements RowMapper {
+
+ @Override
+ public HyYrzF mapRow(ResultSet rs, int rowNum) throws SQLException {
+ HyYrzF hyYrzF = new HyYrzF();
+
+ // 1. 站码(直接映射)
+ hyYrzF.setStcd(rs.getString("stcd"));
+
+ // 2. 年份(处理SQL NULL)
+ int yrValue = rs.getInt("yr");
+ hyYrzF.setYr(rs.wasNull() ? null : yrValue);
+
+ // 3. 平均水位及注解码
+ BigDecimal avz = rs.getBigDecimal("avz");
+ hyYrzF.setAvz(avz != null ? avz : BigDecimal.ZERO); // NULL → 0.00
+ String avzrcd = rs.getString("avzrcd");
+ hyYrzF.setAvzrcd(avzrcd != null ? avzrcd : ""); // NULL → 空字符串
+
+ // 4. 最高水位及关联字段
+ BigDecimal htz = rs.getBigDecimal("htz");
+ hyYrzF.setHtz(htz != null ? htz : BigDecimal.ZERO);
+ String htzrcd = rs.getString("htzrcd");
+ hyYrzF.setHtzrcd(htzrcd != null ? htzrcd : "");
+ Timestamp htzdtTimestamp = rs.getTimestamp("htzdt");
+ if (htzdtTimestamp != null) {
+ hyYrzF.setHtzdt(new Date(htzdtTimestamp.getTime())); // SQL → Java Date
+ }
+
+ // 5. 最低水位及关联字段
+ BigDecimal mnz = rs.getBigDecimal("mnz");
+ hyYrzF.setMnz(mnz != null ? mnz : BigDecimal.ZERO);
+ String mnzrcd = rs.getString("mnzrcd");
+ hyYrzF.setMnzrcd(mnzrcd != null ? mnzrcd : "");
+ Timestamp mnzdtTimestamp = rs.getTimestamp("mnzdt");
+ if (mnzdtTimestamp != null) {
+ hyYrzF.setMnzdt(new Date(mnzdtTimestamp.getTime()));
+ }
+
+ return hyYrzF;
+ }
+}
diff --git a/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/vo/HyStscASelectVo.java b/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/vo/HyStscASelectVo.java
new file mode 100644
index 0000000..1b77e5d
--- /dev/null
+++ b/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/vo/HyStscASelectVo.java
@@ -0,0 +1,31 @@
+package com.ruoyi.swlscx.basic.domain.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 测站一览表
+ * @Author al
+ * @Date 2024/7/30 13:52
+ * @Description: TODO
+ * @Version
+ */
+
+@Data
+public class HyStscASelectVo implements Serializable {
+
+ /** 站码 */
+ private String value;
+
+ private Boolean disabled;
+
+ /**站名**/
+ private String label;
+
+ private List children;
+
+ private static final long serialVersionUID = 1L;
+
+}
diff --git a/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/vo/HyStscAVo.java b/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/vo/HyStscAVo.java
index 808b014..012f97d 100644
--- a/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/vo/HyStscAVo.java
+++ b/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/vo/HyStscAVo.java
@@ -100,6 +100,9 @@ public class HyStscAVo implements Serializable {
/**备注**/
private String nt;
+ /**站名+站码 **/
+ private String stnmAndStcd;
+
private static final long serialVersionUID = 1L;
}
diff --git a/swlscx/src/main/java/com/ruoyi/swlscx/basic/mapper/HyStscAMapper.java b/swlscx/src/main/java/com/ruoyi/swlscx/basic/mapper/HyStscAMapper.java
index b656999..f43716b 100644
--- a/swlscx/src/main/java/com/ruoyi/swlscx/basic/mapper/HyStscAMapper.java
+++ b/swlscx/src/main/java/com/ruoyi/swlscx/basic/mapper/HyStscAMapper.java
@@ -4,7 +4,10 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.swlscx.basic.domain.po.HyStscA;
+import com.ruoyi.swlscx.basic.domain.po.HyWfdzF;
+import com.ruoyi.swlscx.basic.domain.po.YcShdpInfo;
import com.ruoyi.swlscx.basic.domain.vo.HyStscAVo;
+import com.ruoyi.swlscx.synchronousData.dto.JHDayData;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@@ -28,11 +31,23 @@ public interface HyStscAMapper extends BaseMapper {
- void deleteTempData();
+ void deleteData();
- void mergeToData();
+ void mergeToData(@Param("list") List records);
- void insertTempData(@Param("list") List records);
+ void insertData(@Param("list") List records);
+
+ void copyFile(@Param("path") String backupPath);
+
+ void remoteFile(@Param("path") String backupPath);
+
+ List getRainStationListByType(@Param("startYear") String startYear, @Param("startMth") String startMth, @Param("endYear") String endYear, @Param("endMth") String endMth, @Param("type") String type);
+
+ List getYcShdpInfoByTableId(@Param("ids") List ids);
+
+ List