From a1172e5c4ab8e7e4db9ca836bade5c425cf7604d Mon Sep 17 00:00:00 2001 From: LeoAnn <1297441823@qq.com> Date: Tue, 21 Oct 2025 13:15:57 +0800 Subject: [PATCH] feat: .... --- .../service/impl/HyDpCServiceImplTest.java | 86 ------- .../service/impl/HyXsmsrsGServiceImpl.java | 1 - .../basic/controller/BaseInfoController.java | 6 +- .../domain/rowMapper/HyObqGRowMapper.java | 75 ++++++ .../domain/rowMapper/HyXsmsrsGRowMapper.java | 68 ++++++ .../service/impl/HyStscAServiceImpl.java | 225 ++++++++++++++++++ .../common/utils/SqlServerDataSourceUtil.java | 19 +- .../controller/TimeTasksController.java | 21 ++ .../swlscx/synchronousData/dto/JHDayData.java | 46 ++++ .../synchronousData/enums/JhhkTableEnum.java | 1 + .../synchronousData/enums/SWTableEnum.java | 5 +- .../mapper/TimeTasksMapper.java | 10 + .../mapper/YcResTableInfoMapper.java | 6 + .../service/TimeTasksService.java | 16 +- .../service/YcResTableInfoService.java | 2 +- .../service/impl/GetDateServiceImpl.java | 19 +- .../service/impl/TimeTasksServiceImpl.java | 109 ++++++++- .../impl/YcResTableInfoServiceImpl.java | 202 +++++++++++++--- .../mapper/actualSurvey/HyXsmsrsGMapper.xml | 4 +- .../synchronousData/TimeTasksMapper.xml | 164 +++++++++++-- .../synchronousData/YcResTableInfoMapper.xml | 35 ++- 21 files changed, 968 insertions(+), 152 deletions(-) delete mode 100644 ruoyi-admin/src/test/java/com/ruoyi/swlscx/day/service/impl/HyDpCServiceImplTest.java create mode 100644 swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyObqGRowMapper.java create mode 100644 swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyXsmsrsGRowMapper.java diff --git a/ruoyi-admin/src/test/java/com/ruoyi/swlscx/day/service/impl/HyDpCServiceImplTest.java b/ruoyi-admin/src/test/java/com/ruoyi/swlscx/day/service/impl/HyDpCServiceImplTest.java deleted file mode 100644 index 2960b47..0000000 --- a/ruoyi-admin/src/test/java/com/ruoyi/swlscx/day/service/impl/HyDpCServiceImplTest.java +++ /dev/null @@ -1,86 +0,0 @@ -package com.ruoyi.swlscx.day.service.impl; - -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.ruoyi.common.core.page.R; -import com.ruoyi.swlscx.basic.domain.vo.HyStscAVo; -import com.ruoyi.swlscx.basic.service.HyStscAService; -import com.ruoyi.swlscx.basic.service.YcExportTaskService; -import com.ruoyi.swlscx.common.PageParams; -import com.ruoyi.swlscx.day.service.HyDcsFService; -import com.ruoyi.swlscx.day.service.HyDwtCService; -import com.ruoyi.swlscx.day.service.HyZscsBService; -import com.ruoyi.swlscx.excerpt.service.HyHltdzBService; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.mock.web.MockMultipartFile; -import org.springframework.web.multipart.MultipartFile; - -import java.io.File; -import java.io.FileInputStream; -import java.util.Arrays; -import java.util.List; - - -/** - * @Author al - * @Date 2024/10/16 9:48 - * @Description: TODO - * @Version - */ -@SpringBootTest(classes = com.ruoyi.RuoYiApplication.class) -class HyDpCServiceImplTest { - - - @Autowired - private HyDcsFService hyDcsFService; - @Autowired - private YcExportTaskService ycExportTaskService; - - @Autowired - private HyStscAService hyStscAService; - - - @Autowired - private HyZscsBService hyZscsBService; - @Test - public void importData() throws Exception { - -// List stringList = Arrays.asList("逐潮高低潮位表200501-200801" -// , "逐潮高低潮位表200801-201001", -// "逐潮高低潮位表201001-201301" -// , "逐潮高低潮位表201301-201501", -// "逐潮高低潮位表201501-201701", -// "逐潮高低潮位表201701-202001" -// ,"逐潮高低潮位表202001-"); - List stringList = Arrays.asList("逐时潮水位表 (1)","逐时潮水位表 (2)","逐时潮水位表 (3)"); - long newTime = System.currentTimeMillis(); - System.out.println("当前时间:" + newTime); - for (String s : stringList) { -// File file = new File("C:\\Users\\12974\\Desktop\\历史查询子系统\\历史数据\\日表类\\日平均含沙量表-已完成\\" + s + ".xls"); - - File file = new File("C:\\Users\\12974\\Downloads\\" + s + ".xls"); - // 创建 FileInputStream 对象 - FileInputStream fileInputStream = new FileInputStream(file); - - // 创建 MockMultipartFile 对象 - MultipartFile multipartFile = new MockMultipartFile( - "file", - file.getName(), - "application/vnd.ms-excel", - fileInputStream - ); - hyZscsBService.importHyZscsBData(multipartFile); - } - System.out.println("总耗时:" + (System.currentTimeMillis() - newTime)); - } - - @Test - public void test() { - System.out.println(hyStscAService.testSqlServer()); - } - - - - -} \ No newline at end of file diff --git a/swlscx/src/main/java/com/ruoyi/swlscx/actualSurvey/service/impl/HyXsmsrsGServiceImpl.java b/swlscx/src/main/java/com/ruoyi/swlscx/actualSurvey/service/impl/HyXsmsrsGServiceImpl.java index 72ef9f9..39c722c 100644 --- a/swlscx/src/main/java/com/ruoyi/swlscx/actualSurvey/service/impl/HyXsmsrsGServiceImpl.java +++ b/swlscx/src/main/java/com/ruoyi/swlscx/actualSurvey/service/impl/HyXsmsrsGServiceImpl.java @@ -176,7 +176,6 @@ public class HyXsmsrsGServiceImpl extends ServiceImpl { + + @Override + public HyObqG mapRow(ResultSet rs, int rowNum) throws SQLException { + HyObqG hyObqG = new HyObqG(); + + // 1. 字符串类型字段 + hyObqG.setId(rs.getString("ID")); // 唯一标识符 + hyObqG.setStcd(rs.getString("STCD")); // 站码 + hyObqG.setXsqlc(rs.getString("XSQLC")); // 测流断面位置 + hyObqG.setMsqmt(rs.getString("MSQMT")); // 测流方法 + hyObqG.setQrcd(rs.getString("QRCD")); // 流量注解码 + hyObqG.setXsarcd(rs.getString("XSARCD")); // 断面面积注解码 + hyObqG.setObnont(rs.getString("OBNONT")); // 测次说明 + + // 2. 整数类型字段(处理可能的NULL值) + hyObqG.setYr(rs.getObject("YR") != null ? rs.getInt("YR") : null); // 年份 + hyObqG.setMnth(rs.getObject("MNTH") != null ? rs.getInt("MNTH") : null); // 月份 + hyObqG.setQobno(rs.getObject("QOBNO") != null ? rs.getInt("QOBNO") : null); // 流量施测号数 + + // 3. 日期/时间类型字段(java.sql.Timestamp → java.util.Date) + Timestamp msqbgtmTs = rs.getTimestamp("MSQBGTM"); + if (msqbgtmTs != null) { + hyObqG.setMsqbgtm(new Date(msqbgtmTs.getTime())); // 测流起时间 + } + Timestamp msqedtmTs = rs.getTimestamp("MSQEDTM"); + if (msqedtmTs != null) { + hyObqG.setMsqedtm(new Date(msqedtmTs.getTime())); // 测流止时间 + } + + // 4. 双精度浮点数字段(使用getDouble() + NULL检查) + setDoubleField(rs, "BSGGZ", hyObqG::setBsggz); // 基本水尺水位 + setDoubleField(rs, "Q", hyObqG::setQ); // 流量 + setDoubleField(rs, "XSTTA", hyObqG::setXstta); // 断面总面积 + setDoubleField(rs, "XSA", hyObqG::setXsa); // 断面过水面积 + setDoubleField(rs, "XSAVV", hyObqG::setXsavv); // 断面平均流速 + setDoubleField(rs, "XSMXV", hyObqG::setXsmxv); // 断面最大流速 + setDoubleField(rs, "TPWD", hyObqG::setTpwd); // 水面宽 + setDoubleField(rs, "XSAVDP", hyObqG::setXsavdp); // 断面平均水深 + setDoubleField(rs, "XSMXDP", hyObqG::setXsmxdp); // 断面最大水深 + setDoubleField(rs, "IBWD", hyObqG::setIbwd); // 水浸冰底宽度 + setDoubleField(rs, "IBAVDP", hyObqG::setIbavdp); // 水浸冰底平均水深 + setDoubleField(rs, "IBMXDP", hyObqG::setIbmxdp); // 水浸冰底最大水深 + setDoubleField(rs, "RVSFSL", hyObqG::setRvsfsl); // 水面比降 + setDoubleField(rs, "N", hyObqG::setN); // 糙率 + + return hyObqG; + } + + // 辅助方法:安全设置Double字段(处理NULL值) + private void setDoubleField(ResultSet rs, String columnName, java.util.function.Consumer setter) + throws SQLException { + double value = rs.getDouble(columnName); + if (!rs.wasNull()) { // 关键:检查实际值是否为NULL + setter.accept(value); + } + } +} + diff --git a/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyXsmsrsGRowMapper.java b/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyXsmsrsGRowMapper.java new file mode 100644 index 0000000..da85e21 --- /dev/null +++ b/swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyXsmsrsGRowMapper.java @@ -0,0 +1,68 @@ +package com.ruoyi.swlscx.basic.domain.rowMapper; + +import com.ruoyi.swlscx.actualSurvey.domain.po.HyObqG; +import com.ruoyi.swlscx.actualSurvey.domain.po.HyXsmsrsG; +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/7/13 14:47 + * @Description: TODO + * @Version + */ +public class HyXsmsrsGRowMapper implements RowMapper { + + @Override + public HyXsmsrsG mapRow(ResultSet rs, int rowNum) throws SQLException { + HyXsmsrsG hyXsmsrsG = new HyXsmsrsG(); + + // 1. 字符串类型字段(直接映射,数据库NULL转为Java null) + hyXsmsrsG.setStcd(rs.getString("STCD")); // 站码 + hyXsmsrsG.setVtno(rs.getString("VTNO")); // 垂线号 + hyXsmsrsG.setRvbbelrcd(rs.getString("RVBDELRCD")); // 河底高程注解码 + hyXsmsrsG.setOdbrzrcd(rs.getString("ODBRZRCD")); // 测时水位注解码 + hyXsmsrsG.setVtaz(rs.getString("VTAZ")); // 垂线方位 + + // 2. 日期类型字段(Timestamp → java.util.Date) + Timestamp obdtTs = rs.getTimestamp("OBDT"); + if (obdtTs != null) { + hyXsmsrsG.setObdt(new Date(obdtTs.getTime())); // 施测日期 + } + + // 3. 整数字段(处理NULL值) + hyXsmsrsG.setObno(getNullableInt(rs, "OBNO")); // 测次号 + // nof字段若未从数据库读取则设默认值1 + Integer nofValue = getNullableInt(rs, "NOF"); + hyXsmsrsG.setNof(nofValue != null ? nofValue : 1); // 默认值逻辑[4](@ref) + + // 4. BigDecimal字段(精确小数处理) + setBigDecimalField(rs, "DI", hyXsmsrsG::setDi); // 起点距(米) + setBigDecimalField(rs, "RVBDEL", hyXsmsrsG::setRvbbel); // 河底高程(米) + setBigDecimalField(rs, "ODBRZ", hyXsmsrsG::setOdbrz); // 测时水位(米) + + return hyXsmsrsG; + } + + // 辅助方法:安全获取可空整数字段 + private Integer getNullableInt(ResultSet rs, String columnName) throws SQLException { + int value = rs.getInt(columnName); + return rs.wasNull() ? null : value; // 检测数据库NULL值[4](@ref) + } + + // 辅助方法:安全设置BigDecimal字段 + private void setBigDecimalField(ResultSet rs, String columnName, Consumer setter) + throws SQLException { + BigDecimal value = rs.getBigDecimal(columnName); + if (value != null) { // 直接检查BigDecimal是否为NULL + setter.accept(value); + } + } + +} diff --git a/swlscx/src/main/java/com/ruoyi/swlscx/basic/service/impl/HyStscAServiceImpl.java b/swlscx/src/main/java/com/ruoyi/swlscx/basic/service/impl/HyStscAServiceImpl.java index a182ba8..341a97b 100644 --- a/swlscx/src/main/java/com/ruoyi/swlscx/basic/service/impl/HyStscAServiceImpl.java +++ b/swlscx/src/main/java/com/ruoyi/swlscx/basic/service/impl/HyStscAServiceImpl.java @@ -15,6 +15,10 @@ import com.ruoyi.common.enums.DataSourceType; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.bean.BeanUtils; +import com.ruoyi.swlscx.actualSurvey.domain.po.HyObqG; +import com.ruoyi.swlscx.actualSurvey.domain.po.HyXsmsrsG; +import com.ruoyi.swlscx.actualSurvey.service.HyObqGService; +import com.ruoyi.swlscx.actualSurvey.service.HyXsmsrsGService; import com.ruoyi.swlscx.basic.domain.bo.HyStscABo; import com.ruoyi.swlscx.basic.domain.po.*; import com.ruoyi.swlscx.basic.domain.ro.FormDataRo; @@ -49,6 +53,7 @@ import org.apache.poi.ss.usermodel.Sheet; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.Lazy; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -57,6 +62,8 @@ import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.io.File; +import java.sql.PreparedStatement; +import java.sql.SQLException; import java.sql.Timestamp; import java.sql.Types; import java.text.SimpleDateFormat; @@ -269,6 +276,13 @@ public class HyStscAServiceImpl extends ServiceImpl impl private HyStscAService hyStscAService; + @Autowired + @Lazy + private HyObqGService hyObqGService; + + @Autowired + @Lazy + private HyXsmsrsGService hyXsmsrsGService; @Override public HyStscASelectVo getList(String startTime, String endTime, String type) { @@ -761,6 +775,39 @@ public class HyStscAServiceImpl extends ServiceImpl impl if (!stcds.isEmpty()) { list = this.list(Wrappers.lambdaQuery(HyStscA.class).in(HyStscA::getStcd, stcds)); } + }else if (type.equals("HyObq")){ + String startYear = ""; + String endYear = ""; + if (StringUtils.isNotBlank(startTime)) { + startYear = startTime.length() > 4 ? startTime.substring(0, 4) : startTime; + } + if (StringUtils.isNotBlank(endTime)) { + endYear = endTime.length() > 4 ? endTime.substring(0, 4) : endTime; + } + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(HyObqG.class); + if (ObjectUtils.isNotEmpty(startYear)) { + queryWrapper.ge(HyObqG::getYr, startYear); + } + if (ObjectUtils.isNotEmpty(endYear)) { + queryWrapper.le(HyObqG::getYr, endYear); + } + List stcds = hyObqGService.list(queryWrapper).stream().map(HyObqG::getStcd).distinct().collect(Collectors.toList()); + if (!stcds.isEmpty()) { + list = this.list(Wrappers.lambdaQuery(HyStscA.class).in(HyStscA::getStcd, stcds)); + } + }else if (type.equals("HyXsmsrs")){ + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.select("DISTINCT stcd"); // 指定查询字段 + if (ObjectUtils.isNotEmpty(startTime)) { + queryWrapper.ge("OBDT", startTime); + } + if (ObjectUtils.isNotEmpty(endTime)) { + queryWrapper.le("OBDT", endTime); + } + List stcds = hyXsmsrsGService.list(queryWrapper).stream().map(HyXsmsrsG::getStcd).collect(Collectors.toList()); + if (!stcds.isEmpty()) { + list = this.list(Wrappers.lambdaQuery(HyStscA.class).in(HyStscA::getStcd, stcds)); + } } @@ -2101,6 +2148,157 @@ public class HyStscAServiceImpl extends ServiceImpl impl } } } + + else if (tableName.equals(SWTableEnum.DP_OBQ.value())) { + List hyObqGList = hyObqGService.list(Wrappers.lambdaQuery(HyObqG.class) + .between(HyObqG::getYr, startYear, endYear) + .in(HyObqG::getStcd, stcdsList)); + if (ObjectUtils.isNotEmpty(hyObqGList)) { + List stcdList = hyObqGList.stream().map(HyObqG::getStcd).distinct().collect(Collectors.toList()); + Set stcdSet = new HashSet<>(stcdList); // 将小集合转为HashSet + List missingList = stcdsList.stream() + .filter(stcd -> !stcdSet.contains(stcd)) // 过滤未出现在stcdList中的元素 + .collect(Collectors.toList()); + for (String s : missingList) { + FzTableId fzTableId = new FzTableId(); + fzTableId.setStcd(s); + fzTableId.setRtno("751"); + removeFzTableId.add(fzTableId); + } + String sql = "MERGE INTO " + tableName + " AS target " + + "USING (VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)) " + // 23个占位符 + "AS source (STCD, QOBNO, MSQBGTM, XSQLC, MSQEDTM, MSQMT, BSGGZ, Q, QRCD, XSTTA, XSA, XSARCD, XSAVV, XSMXV, TPWD, XSAVDP, XSMXDP, IBWD, IBAVDP, IBMXDP, RVSFSL, N, OBNONT) " + + "ON target.STCD = source.STCD " + + " AND target.QOBNO = source.QOBNO " + + " AND target.MSQBGTM = source.MSQBGTM " + // 注意:原字段名需匹配 + " AND target.XSQLC = source.XSQLC " + + "WHEN MATCHED THEN " + + " UPDATE SET " + + " MSQEDTM = source.MSQEDTM, " + + " MSQMT = source.MSQMT, " + + " BSGGZ = source.BSGGZ, " + + " Q = source.Q, " + + " QRCD = source.QRCD, " + + " XSTTA = source.XSTTA, " + + " XSA = source.XSA, " + + " XSARCD = source.XSARCD, " + + " XSAVV = source.XSAVV, " + + " XSMXV = source.XSMXV, " + + " TPWD = source.TPWD, " + + " XSAVDP = source.XSAVDP, " + + " XSMXDP = source.XSMXDP, " + + " IBWD = source.IBWD, " + + " IBAVDP = source.IBAVDP, " + + " IBMXDP = source.IBMXDP, " + + " RVSFSL = source.RVSFSL, " + + " N = source.N, " + + " OBNONT = source.OBNONT " + + "WHEN NOT MATCHED THEN " + + " INSERT (STCD, QOBNO, MSQBGTM, XSQLC, MSQEDTM, MSQMT, BSGGZ, Q, QRCD, XSTTA, XSA, XSARCD, XSAVV, XSMXV, TPWD, XSAVDP, XSMXDP, IBWD, IBAVDP, IBMXDP, RVSFSL, N, OBNONT) " + + " VALUES (source.STCD, source.QOBNO, source.MSQBGTM, source.XSQLC, source.MSQEDTM, source.MSQMT, source.BSGGZ, source.Q, source.QRCD, source.XSTTA, source.XSA, source.XSARCD, source.XSAVV, source.XSMXV, source.TPWD, source.XSAVDP, source.XSMXDP, " + + "source.IBWD, source.IBAVDP, source.IBMXDP, source.RVSFSL, source.N, source.OBNONT) ;"; + + jdbcTemplate.batchUpdate(sql, hyObqGList, 50, (ps, hyObqG) -> { + // 字符串处理(位置1,4,6,9,12,23) + ps.setString(1, nonNull(hyObqG.getStcd())); + ps.setString(4, nonNull(hyObqG.getXsqlc())); + ps.setString(6, nonNull(hyObqG.getMsqmt())); + ps.setString(9, nonNull(hyObqG.getQrcd())); + ps.setString(12, nonNull(hyObqG.getXsarcd())); + ps.setString(23, nonNull(hyObqG.getObnont())); + + // 整数处理(位置2) + ps.setInt(2, hyObqG.getQobno()); // 基本类型int不可能为null + + // 时间戳处理(位置3,5) + ps.setTimestamp(3, toTimestamp(hyObqG.getMsqbgtm())); + ps.setTimestamp(5, toTimestamp(hyObqG.getMsqedtm())); + + // 数值处理(位置7,8,10,11,13-22) + setDoubleOrNull(ps, 7, hyObqG.getBsggz()); + setDoubleOrNull(ps, 8, hyObqG.getQ()); + setDoubleOrNull(ps, 10, hyObqG.getXstta()); + setDoubleOrNull(ps, 11, hyObqG.getXsa()); + setDoubleOrNull(ps, 13, hyObqG.getXsavv()); + setDoubleOrNull(ps, 14, hyObqG.getXsmxv()); + setDoubleOrNull(ps, 15, hyObqG.getTpwd()); + setDoubleOrNull(ps, 16, hyObqG.getXsavdp()); + setDoubleOrNull(ps, 17, hyObqG.getXsmxdp()); + setDoubleOrNull(ps, 18, hyObqG.getIbwd()); + setDoubleOrNull(ps, 19, hyObqG.getIbavdp()); + setDoubleOrNull(ps, 20, hyObqG.getIbmxdp()); + setDoubleOrNull(ps, 21, hyObqG.getRvsfsl()); + setDoubleOrNull(ps, 22, hyObqG.getN()); + }); + } else { + for (String s : stcdsList) { + FzTableId fzTableId = new FzTableId(); + fzTableId.setStcd(s); + fzTableId.setRtno("751"); + removeFzTableId.add(fzTableId); + } + } + } + + else if (tableName.equals(SWTableEnum.DP_XSMSRS.value())) { + List hyXsmsrsGList = hyXsmsrsGService.list(Wrappers.lambdaQuery(HyXsmsrsG.class) + .between(HyXsmsrsG::getObdt, startTimeDay, endTimeDay) + .in(HyXsmsrsG::getStcd, stcdsList)); + if (ObjectUtils.isNotEmpty(hyXsmsrsGList)) { + List stcdList = hyXsmsrsGList.stream().map(HyXsmsrsG::getStcd).distinct().collect(Collectors.toList()); + Set stcdSet = new HashSet<>(stcdList); // 将小集合转为HashSet + List missingList = stcdsList.stream() + .filter(stcd -> !stcdSet.contains(stcd)) // 过滤未出现在stcdList中的元素 + .collect(Collectors.toList()); + for (String s : missingList) { + FzTableId fzTableId = new FzTableId(); + fzTableId.setStcd(s); + fzTableId.setRtno("711"); + removeFzTableId.add(fzTableId); + } + String sql = "MERGE INTO " + tableName + " AS target " + + "USING (VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)) " + // 11个占位符 + "AS source (STCD, OBDT, OBNO, VTNO, DI, RVBDEL, RVBDELRCD, OBDRZ, OBDRZRCD, VTAZ) " + + "ON target.STCD = source.STCD " + + " AND target.OBDT = source.OBDT " + + " AND target.OBNO = source.OBNO " + + " AND target.DI = source.DI " + + " AND target.VTNO = source.VTNO " + // 主键字段全部匹配 + "WHEN MATCHED THEN " + + " UPDATE SET " + + " RVBDEL = source.RVBDEL, " + + " RVBDELRCD = source.RVBDELRCD, " + + " OBDRZ = source.OBDRZ, " + + " OBDRZRCD = source.OBDRZRCD, " + + " VTAZ = source.VTAZ " + // 更新非主键字段 + "WHEN NOT MATCHED THEN " + + " INSERT (STCD, OBDT, OBNO, VTNO, DI, RVBDEL, RVBDELRCD, OBDRZ, OBDRZRCD, VTAZ) " + + " VALUES (source.STCD, source.OBDT, source.OBNO, source.VTNO, source.DI, " + + " source.RVBDEL, source.RVBDELRCD, source.OBDRZ, source.OBDRZRCD, source.VTAZ);"; + + jdbcTemplate.batchUpdate(sql, hyXsmsrsGList, 50, (ps, hyXsmsrsG) -> { + ps.setString(1, nonNull(hyXsmsrsG.getStcd())); + ps.setTimestamp(2, toTimestamp(hyXsmsrsG.getObdt())); + ps.setInt(3, hyXsmsrsG.getObno()); + ps.setString(4, nonNull(hyXsmsrsG.getVtno())); + ps.setBigDecimal(5, hyXsmsrsG.getDi()); + ps.setBigDecimal( 6, hyXsmsrsG.getRvbbel()); + ps.setString(7, nonNull(hyXsmsrsG.getRvbbelrcd())); + ps.setBigDecimal(8, hyXsmsrsG.getOdbrz()); + ps.setString(9, nonNull(hyXsmsrsG.getOdbrzrcd())); + ps.setString(10, hyXsmsrsG.getVtaz()); + + }); + } else { + for (String s : stcdsList) { + FzTableId fzTableId = new FzTableId(); + fzTableId.setStcd(s); + fzTableId.setRtno("711"); + removeFzTableId.add(fzTableId); + } + } + } + } // 将 removeFzTableId 转为 HashSet 提升查询效率 @@ -2131,7 +2329,22 @@ public class HyStscAServiceImpl extends ServiceImpl impl } return years; } + // ---------- 工具方法(置于同一类中)----------- + private static String nonNull(String value) { + return value != null ? value : ""; + } + private static Timestamp toTimestamp(Date date) { + return date != null ? new Timestamp(date.getTime()) : null; + } + + private static void setDoubleOrNull(PreparedStatement ps, int index, Double value) throws SQLException { + if (value != null) { + ps.setDouble(index, value); + } else { + ps.setNull(index, Types.DOUBLE); // 显式指定类型[7](@ref) + } + } @Override @DataSource(DataSourceType.SHARDING) public List> testSqlServer() { @@ -2433,6 +2646,18 @@ public class HyStscAServiceImpl extends ServiceImpl impl "AND tm BETWEEN ? AND ?"; List hyWsfhexBList = jdbcTemplate.query(sql, new HyWsfhexBRowMapper(), startTimeDay, endTimeDay); timeTasksMapper.insertOrUpdateHyWsfhexBList(hyWsfhexBList, SWTableEnum.DP_WSFHEX.value()); + }else if (tableName.equals(SWTableEnum.DP_OBQ.value())){ + String sql = "SELECT * FROM " + tableName + + " WHERE stcd IN (" + String.join(",", stcdsList.stream().map(s -> "'" + s + "'").collect(Collectors.toList())) + ") " + + "AND msqedtm BETWEEN ? AND ?"; + List hyObqGList = jdbcTemplate.query(sql, new HyObqGRowMapper(), startTimeDay, endTimeDay); + timeTasksMapper.insertOrUpdateHyObqGList(hyObqGList, SWTableEnum.DP_OBQ.value()); + }else if (tableName.equals(SWTableEnum.DP_XSMSRS.value())){ + String sql = "SELECT * FROM " + tableName + + " WHERE stcd IN (" + String.join(",", stcdsList.stream().map(s -> "'" + s + "'").collect(Collectors.toList())) + ") " + + "AND obdt BETWEEN ? AND ?"; + List hyXsmsrsGList = jdbcTemplate.query(sql, new HyXsmsrsGRowMapper(), startTimeDay, endTimeDay); + timeTasksMapper.insertOrUpdateHyXsmsrsGList(hyXsmsrsGList, SWTableEnum.DP_XSMSRS.value()); } } } diff --git a/swlscx/src/main/java/com/ruoyi/swlscx/common/utils/SqlServerDataSourceUtil.java b/swlscx/src/main/java/com/ruoyi/swlscx/common/utils/SqlServerDataSourceUtil.java index 73a4d58..19c47b9 100644 --- a/swlscx/src/main/java/com/ruoyi/swlscx/common/utils/SqlServerDataSourceUtil.java +++ b/swlscx/src/main/java/com/ruoyi/swlscx/common/utils/SqlServerDataSourceUtil.java @@ -1,4 +1,5 @@ package com.ruoyi.swlscx.common.utils; + import com.alibaba.druid.pool.DruidDataSource; import com.ruoyi.swlscx.basic.domain.ro.FormDataRo; @@ -6,15 +7,23 @@ import javax.sql.DataSource; public class SqlServerDataSourceUtil { public static DataSource createDataSource(FormDataRo formDataRo) { -// formDataRo.setDataBase("hy_shdp"); -// formDataRo.setUserName("sa"); -// formDataRo.setPassword("admin"); -// formDataRo.setSqlseverIp("192.168.16.232"); + formDataRo.setDataBase("hy_shdp"); + formDataRo.setUserName("sa"); + formDataRo.setPassword("admin"); + formDataRo.setSqlseverIp("192.168.16.232"); + + DruidDataSource dataSource = new DruidDataSource(); // 基本连接配置 dataSource.setDriverClassName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); +// dataSource.setUrl(String.format( +// "jdbc:sqlserver://%s:14333;databaseName=%s;encrypt=false;", +// formDataRo.getSqlseverIp(), +// formDataRo.getDataBase() +// )); + dataSource.setUrl(String.format( - "jdbc:sqlserver://%s:14333;databaseName=%s;encrypt=false;", + "jdbc:sqlserver://%s:1433;databaseName=%s;encrypt=false;", formDataRo.getSqlseverIp(), formDataRo.getDataBase() )); diff --git a/swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/controller/TimeTasksController.java b/swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/controller/TimeTasksController.java index 75bffe9..2cb505d 100644 --- a/swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/controller/TimeTasksController.java +++ b/swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/controller/TimeTasksController.java @@ -268,6 +268,27 @@ public class TimeTasksController { return 1; } catch (Exception e) { return -1; } }); + CompletableFuture future8 = CompletableFuture.supplyAsync(() -> { + try { + timeTasksService.getDpXsmsrsGData(); + return 1; + } catch (Exception e) { return -1; } + }); + + CompletableFuture future9 = CompletableFuture.supplyAsync(() -> { + try { + timeTasksService.getHyObqGData(); + return 1; + } catch (Exception e) { return -1; } + }); + + + CompletableFuture future10 = CompletableFuture.supplyAsync(() -> { + try { + timeTasksService.getHyWfdzF(); + return 1; + } catch (Exception e) { return -1; } + }); return R.ok("测试成功"); } diff --git a/swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/dto/JHDayData.java b/swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/dto/JHDayData.java index d80c14c..afa6a8b 100644 --- a/swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/dto/JHDayData.java +++ b/swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/dto/JHDayData.java @@ -856,5 +856,51 @@ public class JHDayData { private String eslcch; + private String obdt; // 施测日期 + + private Integer obno; // 测次号 + + private String vtno; // 垂线号 + + private BigDecimal di; // 起点距(米) + private BigDecimal rvbbel; // 河底高程(米) + private String rvbbelrcd; // 河底高程注解码 + private BigDecimal odbrz; // 测时水位(米) + private String odbrzrcd; // 测时水位注解码 + private String vtaz; // 垂线方位 + private Integer nof; // 默认值1 + + + + + private Integer mnth; // 月份(整数类型) + private Integer qobno; // 流量施测号数 + + private String msqbgtm; // 测流起时间(使用LocalDateTime) + private String msqedtm; // 测流止时间 + + private String xsqlc; // 测流断面位置 + private String msqmt; // 测流方法 + private Double bsggz; // 基本水尺水位 + private String qrcd; // 流量注解码 + private Double xstta; // 断面总面积 + private Double xsa; // 断面过水面积 + private String xsarcd; // 断面面积注解码 + private Double xsavv; // 断面平均流速 + private Double xsmxv; // 断面最大流速 + private Double tpwd; // 水面宽 + private Double xsavdp; // 断面平均水深 + private Double xsmxdp; // 断面最大水深 + private Double ibwd; // 水浸冰底宽度 + private Double ibavdp; // 水浸冰底平均水深 + private Double ibmxdp; // 水浸冰底最大水深 + private Double rvsfsl; // 水面比降 + private Double n; // 糙率 + private String obnont; // 测次说明 + + + private BigDecimal wf; + private BigDecimal rfz; + private String rzrcd; } diff --git a/swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/enums/JhhkTableEnum.java b/swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/enums/JhhkTableEnum.java index e2e4910..6fc91dd 100644 --- a/swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/enums/JhhkTableEnum.java +++ b/swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/enums/JhhkTableEnum.java @@ -37,6 +37,7 @@ public enum JhhkTableEnum { MONTH_MTWE("月水面蒸发量表", "dp_mtwe_e"), MONTH_MTWT("月水温表", "dp_mtwt_e"), + DP_WFDZ("保证水位表", "dp_wfdz_f"), MONTH_Q("月流量表", "dp_mtq_e"), MONTH_MTZ("月水位表", "dp_mtz_e"), DP_OBQ("实测流量表", "dp_obq_r"), diff --git a/swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/enums/SWTableEnum.java b/swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/enums/SWTableEnum.java index 069c91f..776cc47 100644 --- a/swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/enums/SWTableEnum.java +++ b/swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/enums/SWTableEnum.java @@ -51,14 +51,14 @@ public enum SWTableEnum { MONTH_RIVER("月水位表", "hy_mtz_e"), MONTH_RSVR("月水库水位表", "yc_rpt_rsvr_month"), - DP_OBQ("实测流量表", "yc_rpt_hy_obq_g"), + DP_OBQ("实测流量表", "hy_obq_g"), DP_RVFHEX("水库洪水水文要素摘录表", "hy_rvfhex_b"), DP_WSFHEX("水闸洪水水文要素摘录表", "hy_wsfhex_b"), - DP_XSMSRS("实测大断面流量表", "yc_rpt_hy_xsmsrs_g"), + DP_XSMSRS("实测大断面流量表", "hy_xsmsrs_g"), YEAR_YRCS("年含沙量表", "hy_yrcs_f"), YEAR_Q("年流量表", "hy_yrq_f"), YEAR_RAIN("年降水量表", "hy_yrp_f"), @@ -72,6 +72,7 @@ public enum SWTableEnum { YEAR_YRWT("年水温表", "hy_yrwt_f"), + YEAR_YRWE("年水面蒸发量表", "hy_yrwe_f"); diff --git a/swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/mapper/TimeTasksMapper.java b/swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/mapper/TimeTasksMapper.java index 4fd4b69..e7e2fc6 100644 --- a/swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/mapper/TimeTasksMapper.java +++ b/swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/mapper/TimeTasksMapper.java @@ -1,5 +1,7 @@ package com.ruoyi.swlscx.synchronousData.mapper; +import com.ruoyi.swlscx.actualSurvey.domain.po.HyObqG; +import com.ruoyi.swlscx.actualSurvey.domain.po.HyXsmsrsG; import com.ruoyi.swlscx.basic.domain.po.HyWfdzF; import com.ruoyi.swlscx.day.domain.po.*; import com.ruoyi.swlscx.excerpt.domain.po.*; @@ -96,6 +98,14 @@ public interface TimeTasksMapper { void insertOrUpdateHyMttdzEList(@Param("list") List hyMttdzEList,@Param("tableName") String tableName); void insertOrUpdateHyWfdzF(@Param("list") List hyWfdzFList,@Param("tableName") String value); + + void insertOrUpdateHyObqGList(@Param("list")List hyObqGList, @Param("tableName") String value); + + void insertOrUpdateHyXsmsrsGList(List hyXsmsrsGList, String value); + + List getDataByOBdt(@Param("stcd")String stcd,@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("tableName") String tableName); + + void insertOrUpdateHyWfdzFList(@Param("list") List hyWfdzFList,@Param("tableName") String tableName); // // void deleteAll(@Param("tableName") String tableName); // diff --git a/swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/mapper/YcResTableInfoMapper.java b/swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/mapper/YcResTableInfoMapper.java index 7c150d2..0f2dd88 100644 --- a/swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/mapper/YcResTableInfoMapper.java +++ b/swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/mapper/YcResTableInfoMapper.java @@ -30,4 +30,10 @@ public interface YcResTableInfoMapper { List getResTableRainrexBList(@Param("tableName") String tableName); List getResTableTMList(@Param("tableName") String tableName); + + List getResTableRainXsList(@Param("tableName") String tableName); + + List getResTableRainrexBListByPage(@Param("tableName") String value, @Param("offset") int i, @Param("pageSize") int pageSize); + + List getResTableTMListByPage(@Param("tableName") String value, @Param("offset") int i, @Param("pageSize") int pageSize); } diff --git a/swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/service/TimeTasksService.java b/swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/service/TimeTasksService.java index 4df723f..f410273 100644 --- a/swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/service/TimeTasksService.java +++ b/swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/service/TimeTasksService.java @@ -13,10 +13,11 @@ public interface TimeTasksService { void getDayQData(); void getDayDqsData(); -// + + // void getDayDcsData(); - void getDayDweData(); + void getDayDweData(); void getDayDwtData(); @@ -25,7 +26,8 @@ public interface TimeTasksService { // void getDayRsverData(); void getDayDmxpData(); -// + + // void getDayImxfwData(); void getFdheexData(); @@ -79,5 +81,13 @@ public interface TimeTasksService { // void getMonthMttdzData(); + void setYcStaions(); + + void getDpXsmsrsGData(); + + void getHyObqGData(); + + + void getHyWfdzF(); } diff --git a/swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/service/YcResTableInfoService.java b/swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/service/YcResTableInfoService.java index 908cba9..0010801 100644 --- a/swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/service/YcResTableInfoService.java +++ b/swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/service/YcResTableInfoService.java @@ -11,5 +11,5 @@ import com.ruoyi.common.core.page.R; public interface YcResTableInfoService { R getYcResTableInfo(); - R getStatInfo(String stcds, String startTime, String endTime,Integer pageNum,Integer pageSize); + R getStatInfo(String stcds, String startTime, String endTime,Integer pageNum,Integer pageSize,String stationTypeValue,String type); } diff --git a/swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/service/impl/GetDateServiceImpl.java b/swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/service/impl/GetDateServiceImpl.java index c812f63..df15f36 100644 --- a/swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/service/impl/GetDateServiceImpl.java +++ b/swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/service/impl/GetDateServiceImpl.java @@ -3,6 +3,9 @@ package com.ruoyi.swlscx.synchronousData.service.impl; import com.alibaba.fastjson.JSON; import com.ruoyi.common.annotation.DataSource; import com.ruoyi.common.enums.DataSourceType; +import com.ruoyi.swlscx.actualSurvey.domain.po.HyObqG; +import com.ruoyi.swlscx.actualSurvey.domain.po.HyXsmsrsG; +import com.ruoyi.swlscx.basic.domain.po.HyWfdzF; import com.ruoyi.swlscx.day.domain.po.*; import com.ruoyi.swlscx.excerpt.domain.po.*; import com.ruoyi.swlscx.month.domain.po.*; @@ -198,8 +201,22 @@ public class GetDateServiceImpl implements GetDateService { List hyMttdzEList = JSON.parseArray(stringRedisTemplate.opsForValue().get(stcd), HyMttdzE.class); //更新新增操作 timeTasksMapper.insertOrUpdateHyMttdzEList(hyMttdzEList, tableName); + }else if (tableName.equals(SWTableEnum.DP_XSMSRS.value())){ + //从redis中查数据 + List hyXsmsrsGList = JSON.parseArray(stringRedisTemplate.opsForValue().get(stcd), HyXsmsrsG.class); + //更新新增操作 + timeTasksMapper.insertOrUpdateHyXsmsrsGList(hyXsmsrsGList, tableName); + }else if (tableName.equals(SWTableEnum.DP_OBQ.value())){ + //从redis中查数据 + List hyObqGList = JSON.parseArray(stringRedisTemplate.opsForValue().get(stcd), HyObqG.class); + //更新新增操作 + timeTasksMapper.insertOrUpdateHyObqGList(hyObqGList, tableName); + }else if (tableName.equals(SWTableEnum.HY_WFDZ_F.value())){ + //从redis中查数据 + List hyWfdzFList = JSON.parseArray(stringRedisTemplate.opsForValue().get(stcd), HyWfdzF.class); + //更新新增操作 + timeTasksMapper.insertOrUpdateHyWfdzFList(hyWfdzFList, tableName); } - } //清除redis缓存 for (String stcd : stcds) { diff --git a/swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/service/impl/TimeTasksServiceImpl.java b/swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/service/impl/TimeTasksServiceImpl.java index 406ed75..3bce486 100644 --- a/swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/service/impl/TimeTasksServiceImpl.java +++ b/swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/service/impl/TimeTasksServiceImpl.java @@ -5,7 +5,10 @@ import com.ruoyi.common.annotation.DataSource; import com.ruoyi.common.core.text.Convert; import com.ruoyi.common.enums.DataSourceType; import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.swlscx.actualSurvey.domain.po.HyObqG; +import com.ruoyi.swlscx.actualSurvey.domain.po.HyXsmsrsG; import com.ruoyi.swlscx.basic.domain.po.HyStscA; +import com.ruoyi.swlscx.basic.domain.po.HyWfdzF; import com.ruoyi.swlscx.basic.service.HyStscAService; import com.ruoyi.swlscx.day.domain.po.*; import com.ruoyi.swlscx.excerpt.domain.po.*; @@ -1309,6 +1312,110 @@ public class TimeTasksServiceImpl implements TimeTasksService { getDateService.insertRainData(stcds,SWTableEnum.YEAR_RIVER.value()); } + + /** + * 获取江河湖库实测大断面流量表 + */ + @Override + @Scheduled(cron = "0 15 5 13 * ?") + @DataSource(DataSourceType.SLAVE) + public void getDpXsmsrsGData() { + List ycStations = getYcStations(); + String[] startAndEndTime = getStartAndEndTime(); + String startTime = startAndEndTime[1]; + String endTime = startAndEndTime[0]; + String tableName = JhhkTableEnum.DP_XSMSRS.value(); + List stcds = new ArrayList<>(); + for (HyStscA ycStation : ycStations) { + List jhDayDataList = timeTasksMapper.getDataByOBdt(ycStation.getStcd(), startTime,endTime, tableName); + if (jhDayDataList == null || jhDayDataList.isEmpty()) { + continue; + } + //匹配数据 + List hyXsmsrsGList = new ArrayList<>(); + for (JHDayData jhDayData : jhDayDataList) { + HyXsmsrsG hyXsmsrsG = new HyXsmsrsG(); + BeanUtils.copyProperties(jhDayData, hyXsmsrsG); + hyXsmsrsG.setObdt(DateUtils.parseDate(jhDayData.getObdt())); + hyXsmsrsGList.add(hyXsmsrsG); + } + //插入数据到redis中 + String jsonData = JSON.toJSONString(hyXsmsrsGList); + stringRedisTemplate.opsForValue().set("DpXsmsrsG:"+ycStation.getStcd(), jsonData, 12, + TimeUnit.HOURS); + stcds.add("DpXsmsrsG:"+ycStation.getStcd()); + } + getDateService.insertRainData(stcds,SWTableEnum.DP_XSMSRS.value()); + } + + /** + * 获取江河湖库实测流量成果表 + */ + @Override + @Scheduled(cron = "0 30 5 13 * ?") + @DataSource(DataSourceType.SLAVE) + public void getHyObqGData() { + List ycStations = getYcStations(); + String year = getNowYear(); + String tableName = JhhkTableEnum.DP_OBQ.value(); + List stcds = new ArrayList<>(); + for (HyStscA ycStation : ycStations) { + List jhDayDataList = timeTasksMapper.getDataByYr(ycStation.getStcd(), year, tableName); + if (jhDayDataList == null || jhDayDataList.isEmpty()) { + continue; + } + //匹配数据 + List hyObqGList = new ArrayList<>(); + for (JHDayData jhDayData : jhDayDataList) { + HyObqG hyObqG = new HyObqG(); + BeanUtils.copyProperties(jhDayData, hyObqG); + hyObqG.setMsqbgtm(DateUtils.parseDate(jhDayData.getMsqbgtm())); + hyObqG.setMsqedtm(DateUtils.parseDate(jhDayData.getMsqedtm())); + hyObqGList.add(hyObqG); + } + //插入数据到redis中 + String jsonData = JSON.toJSONString(hyObqGList); + stringRedisTemplate.opsForValue().set("DpObqG:"+ycStation.getStcd(), jsonData, 12, + TimeUnit.HOURS); + stcds.add("DpObqG:"+ycStation.getStcd()); + } + getDateService.insertRainData(stcds,SWTableEnum.DP_OBQ.value()); + } + + + /** + * 获取江河湖库保证率水位表 + */ + @Override + @Scheduled(cron = "0 35 5 13 * ?") + @DataSource(DataSourceType.SLAVE) + public void getHyWfdzF() { + List ycStations = getYcStations(); + String year = getNowYear(); + String tableName = JhhkTableEnum.DP_WFDZ.value(); + List stcds = new ArrayList<>(); + for (HyStscA ycStation : ycStations) { + List jhDayDataList = timeTasksMapper.getDataByYr(ycStation.getStcd(), year, tableName); + if (jhDayDataList == null || jhDayDataList.isEmpty()) { + continue; + } + //匹配数据 + List hyWfdzFList = new ArrayList<>(); + for (JHDayData jhDayData : jhDayDataList) { + HyWfdzF hyWfdzF = new HyWfdzF(); + BeanUtils.copyProperties(jhDayData, hyWfdzF); + hyWfdzFList.add(hyWfdzF); + } + //插入数据到redis中 + String jsonData = JSON.toJSONString(hyWfdzFList); + stringRedisTemplate.opsForValue().set("DpWfdz:"+ycStation.getStcd(), jsonData, 12, + TimeUnit.HOURS); + stcds.add("DpWfdz:"+ycStation.getStcd()); + } + getDateService.insertRainData(stcds,SWTableEnum.HY_WFDZ_F.value()); + } + + private static String getNowYear() { return Convert.toStr(Year.now().getValue()); } @@ -1343,8 +1450,8 @@ public class TimeTasksServiceImpl implements TimeTasksService { LocalDateTime endDate = LocalDateTime.now(); return new String[]{ + endDate.format(formatter), // 当前时间 startDate.format(formatter), // 今年开始时间 - endDate.format(formatter) // 当前时间 }; } diff --git a/swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/service/impl/YcResTableInfoServiceImpl.java b/swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/service/impl/YcResTableInfoServiceImpl.java index f75c703..cedc3b6 100644 --- a/swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/service/impl/YcResTableInfoServiceImpl.java +++ b/swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/service/impl/YcResTableInfoServiceImpl.java @@ -3,13 +3,18 @@ package com.ruoyi.swlscx.synchronousData.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; import com.ruoyi.common.core.page.R; import com.ruoyi.common.core.text.Convert; +import com.ruoyi.swlscx.basic.domain.vo.HyStscASelectVo; import com.ruoyi.swlscx.basic.domain.vo.HyStscAVo; +import com.ruoyi.swlscx.basic.service.HyStscAService; import com.ruoyi.swlscx.common.utils.Query; import com.ruoyi.swlscx.synchronousData.dto.YcResStatInfo; import com.ruoyi.swlscx.synchronousData.enums.SWTableEnum; import com.ruoyi.swlscx.synchronousData.mapper.YcResTableInfoMapper; import com.ruoyi.swlscx.synchronousData.service.YcResTableInfoService; +import lombok.extern.log4j.Log4j; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -23,6 +28,7 @@ import java.util.stream.Collectors; * @Version */ @Service +@Slf4j public class YcResTableInfoServiceImpl implements YcResTableInfoService { @Autowired @@ -75,18 +81,57 @@ public class YcResTableInfoServiceImpl implements YcResTableInfoService { ycResTableInfoMapper.saveBatch(ycResStatInfoHMXPList); //降水量摘录表 - List ycResStatInfoPrexBList = ycResTableInfoMapper.getResTableRainrexBList(SWTableEnum.DP_HOUR.value()); - ycResStatInfoPrexBList.forEach(i -> { - i.setSType("P"); - i.setResType("雨量资料"); - i.setResTableId(4L); - String statYear = i.getStatYear(); - i.setStatYear(formatYears(statYear)); - i.setOldYear(statYear); - i.setResTable("降水量摘录表"); - } - ); - ycResTableInfoMapper.saveBatch(ycResStatInfoPrexBList); +// List ycResStatInfoPrexBList = ycResTableInfoMapper.getResTableRainrexBList(SWTableEnum.DP_HOUR.value()); +// ycResStatInfoPrexBList.forEach(i -> { +// i.setSType("P"); +// i.setResType("雨量资料"); +// i.setResTableId(4L); +// String statYear = i.getStatYear(); +// i.setStatYear(formatYears(statYear)); +// i.setOldYear(statYear); +// i.setResTable("降水量摘录表"); +// } +// ); +// ycResTableInfoMapper.saveBatch(ycResStatInfoPrexBList); + + + int pageSize = 50; // 每批处理1000条 + int pageNum = 0; + List batchResults; + + do { + // 分页查询 + batchResults = ycResTableInfoMapper.getResTableRainrexBListByPage( + SWTableEnum.DP_HOUR.value(), + pageNum * pageSize, + pageSize + ); + + if (batchResults.isEmpty()) break; + + // 处理数据 + batchResults.forEach(info -> { + info.setSType("P"); + info.setResType("雨量资料"); + info.setResTableId(4L); + String statYear = info.getStatYear(); + info.setStatYear(formatYears(statYear)); + info.setOldYear(statYear); + info.setResTable("降水量摘录表"); + }); + + // 批量保存 + ycResTableInfoMapper.saveBatch(batchResults); + + // 更新页码 + pageNum++; + log.info("已处理第 {} 批数据,共 {} 条", pageNum, batchResults.size()); + } while (true); + + + + + //逐日平均水位表 @@ -119,19 +164,53 @@ public class YcResTableInfoServiceImpl implements YcResTableInfoService { ycResTableInfoMapper.saveBatch(ycResStatInfoSZList2); + + + List batchResults1; + + do { + // 分页查询 + batchResults1 = ycResTableInfoMapper.getResTableTMListByPage( + SWTableEnum.DP_HLTDZ.value(), + pageNum * pageSize, + pageSize + ); + + if (batchResults1.isEmpty()) break; + + // 处理数据 + batchResults1.forEach(i -> { + i.setSType("Z"); + i.setResType("水位资料"); + i.setResTableId(7L); + String statYear = i.getStatYear(); + i.setStatYear(formatYears(statYear)); + i.setOldYear(statYear); + i.setResTable("逐潮高低潮位表"); + }); + + // 批量保存 + ycResTableInfoMapper.saveBatch(batchResults1); + + // 更新页码 + pageNum++; + log.info("已处理第 {} 批数据,共 {} 条", pageNum, batchResults1.size()); + } while (true); + + // 逐潮高低潮位表 - List ycResStatInfoZCList2 = ycResTableInfoMapper.getResTableTMList(SWTableEnum.DP_HLTDZ.value()); - ycResStatInfoZCList2.forEach(i -> { - i.setSType("Z"); - i.setResType("水位资料"); - i.setResTableId(7L); - String statYear = i.getStatYear(); - i.setStatYear(formatYears(statYear)); - i.setOldYear(statYear); - i.setResTable("逐潮高低潮位表"); - } - ); - ycResTableInfoMapper.saveBatch(ycResStatInfoZCList2); +// List ycResStatInfoZCList2 = ycResTableInfoMapper.getResTableTMList(SWTableEnum.DP_HLTDZ.value()); +// ycResStatInfoZCList2.forEach(i -> { +// i.setSType("Z"); +// i.setResType("水位资料"); +// i.setResTableId(7L); +// String statYear = i.getStatYear(); +// i.setStatYear(formatYears(statYear)); +// i.setOldYear(statYear); +// i.setResTable("逐潮高低潮位表"); +// } +// ); +// ycResTableInfoMapper.saveBatch(ycResStatInfoZCList2); @@ -150,9 +229,56 @@ public class YcResTableInfoServiceImpl implements YcResTableInfoService { ycResTableInfoMapper.saveBatch(ycResStatInfoCWList2); - return R.ok().put("data", ycResStatInfoSZList2); + // 逐日流量表 + List ycResStatInfoFlowDayList = ycResTableInfoMapper.getResTableRainXPList(SWTableEnum.MONTH_Q.value()); + ycResStatInfoFlowDayList.forEach(i -> { + i.setSType("Q"); + i.setResType("流量资料"); + i.setResTableId(9L); + String statYear = i.getStatYear(); + i.setStatYear(formatYears(statYear)); + i.setOldYear(statYear); + i.setResTable("逐日流量表"); + } + ); + ycResTableInfoMapper.saveBatch(ycResStatInfoFlowDayList); + + + // 实测流量成果表 + List ycResStatInfoScFlowDayList = ycResTableInfoMapper.getResTableRainXPList(SWTableEnum.DP_OBQ.value()); + ycResStatInfoScFlowDayList.forEach(i -> { + i.setSType("Q"); + i.setResType("流量资料"); + i.setResTableId(10L); + String statYear = i.getStatYear(); + i.setStatYear(formatYears(statYear)); + i.setOldYear(statYear); + i.setResTable("实测流量成果表"); + } + ); + ycResTableInfoMapper.saveBatch(ycResStatInfoScFlowDayList); + + + // 实测大断面成果表 + List ycResStatInfoScDFlowDayList = ycResTableInfoMapper.getResTableRainXsList(SWTableEnum.DP_XSMSRS.value()); + ycResStatInfoScDFlowDayList.forEach(i -> { + i.setSType("Q"); + i.setResType("流量资料"); + i.setResTableId(11L); + String statYear = i.getStatYear(); + i.setStatYear(formatYears(statYear)); + i.setOldYear(statYear); + i.setResTable("实测大断面成果表"); + } + ); + ycResTableInfoMapper.saveBatch(ycResStatInfoScDFlowDayList); + + + return R.ok(); } + + public static String formatYears(String yearStr) { if (yearStr == null || yearStr.isEmpty()) { return ""; @@ -200,22 +326,34 @@ public class YcResTableInfoServiceImpl implements YcResTableInfoService { } } + @Autowired + @Lazy + private HyStscAService hyStscAService; + @Override - public R getStatInfo(String stcds, String startTime, String endTime, Integer pageNum, Integer pageSize) { + public R getStatInfo(String stcds, String startTime, String endTime, Integer pageNum, Integer pageSize,String stationTypeValue,String type) { Map map = new HashMap<>(); + if ("P".equals(stationTypeValue)){ + map.put("resType", "雨量资料"); + } else if ("Z".equals(stationTypeValue)) { + map.put("resType", "水位资料"); + }else if ("Q".equals(stationTypeValue)) { + map.put("resType", "流量资料"); + } map.put("page", Convert.toStr(pageNum)); map.put("limit", Convert.toStr(pageSize)); List filteredList = Collections.emptyList(); if (stcds != null) { if (stcds.contains("all")) { - stcds = ""; + HyStscASelectVo stationListByType = hyStscAService.getList(startTime, endTime, type); + filteredList = stationListByType.getChildren().stream().map(HyStscASelectVo::getValue).collect(Collectors.toList()); + }else { + filteredList = Arrays.stream(stcds.split(",")) + .filter(s -> s != null && !s.trim().isEmpty()) + .map(String::trim) + .collect(Collectors.toList()); } - filteredList = Arrays.stream(stcds.split(",")) - .filter(s -> s != null && !s.trim().isEmpty()) - .map(String::trim) - .collect(Collectors.toList()); } - System.out.println("stcds: "+stcds); map.put("stcds", filteredList.isEmpty() ? null : filteredList); IPage ycResStatInfoIPage = ycResTableInfoMapper.getPageList(new Query().getPage(map), map); diff --git a/swlscx/src/main/resources/mapper/actualSurvey/HyXsmsrsGMapper.xml b/swlscx/src/main/resources/mapper/actualSurvey/HyXsmsrsGMapper.xml index 4785bb7..fbba76a 100644 --- a/swlscx/src/main/resources/mapper/actualSurvey/HyXsmsrsGMapper.xml +++ b/swlscx/src/main/resources/mapper/actualSurvey/HyXsmsrsGMapper.xml @@ -23,7 +23,7 @@ - order by hme.stcd,hme.OBDT,hme.obno + order by hme.stcd,hme.OBDT,hme.obno,hme.VTNO @@ -48,7 +48,7 @@ - order by hme.stcd,hme.OBDT,hme.obno + order by hme.stcd,hme.OBDT,hme.obno,hme.VTNO \ No newline at end of file diff --git a/swlscx/src/main/resources/mapper/synchronousData/TimeTasksMapper.xml b/swlscx/src/main/resources/mapper/synchronousData/TimeTasksMapper.xml index a3b46bd..28322c9 100644 --- a/swlscx/src/main/resources/mapper/synchronousData/TimeTasksMapper.xml +++ b/swlscx/src/main/resources/mapper/synchronousData/TimeTasksMapper.xml @@ -5,7 +5,19 @@ + + - + INSERT INTO ${tableName} (stcd, dt, p, prcd) @@ -388,7 +408,7 @@ - INSERT INTO ${tableName} (stcd, eetp, yr,mth, wsfe,wsfercd ,mxdye,mxdyercd,mndye,mndyercd) + INSERT INTO ${tableName} (stcd, eetp, yr,mth, wsfe,wsfercd ,mxdye,mxdyercd,mndye,mndyercd) VALUES ( @@ -415,7 +435,7 @@ - INSERT INTO ${tableName} (stcd, yr,mth, avwtmp,avwtmprcd ,mxwtmp,mxwtmprcd,mxwtmpdt,mnwtmp,mnwtmprcd,mnwtmpdt) + INSERT INTO ${tableName} (stcd, yr,mth, avwtmp,avwtmprcd ,mxwtmp,mxwtmprcd,mxwtmpdt,mnwtmp,mnwtmprcd,mnwtmpdt) VALUES ( @@ -445,7 +465,7 @@ - INSERT INTO ${tableName} (stcd, yr,mth, avz,avzrcd ,htz,htzrcd,htzdt,mnz,mnzrcd,mnzdt) + INSERT INTO ${tableName} (stcd, yr,mth, avz,avzrcd ,htz,htzrcd,htzdt,mnz,mnzrcd,mnzdt) VALUES ( @@ -639,7 +659,7 @@ - INSERT INTO ${tableName} ( stcd, yr, avhtdz, avhtdzrcd, hthtdz, hthtdzrcd, hthtdzotm, + INSERT INTO ${tableName} ( stcd, yr, avhtdz, avhtdzrcd, hthtdz, hthtdzrcd, hthtdzotm, lthtdz, lthtdzrcd, lthtdzotm, avltdz, avltdzrcd, htltdz, htltdzrcd, htltdzotm, ltltdz, ltltdzrcd, ltltdzotm, avftdr, avftdrrcd, mxfltdr, mxfltdrrcd, mxfltdrhtm, mnfltdr, mnfltdrrcd, mnfltdrhtm, aver, @@ -774,7 +794,6 @@ - INSERT INTO ${tableName} (stcd, eetp, @@ -829,7 +848,8 @@ - INSERT INTO ${tableName} (stcd, yr, avwtmp, avwtmprcd, mxwtmp, mxwtmprcd, mxwtmpdt, mnwtmp, mnwtmprcd, mnwtmpdt ) + INSERT INTO ${tableName} (stcd, yr, avwtmp, avwtmprcd, mxwtmp, mxwtmprcd, mxwtmpdt, mnwtmp, mnwtmprcd, mnwtmpdt + ) VALUES ( @@ -886,8 +906,9 @@ - - insert into ${tableName} (stcd, yr, wf, rfz, rzrcd) values + + insert into ${tableName} (stcd, yr, wf, rfz, rzrcd) values + (#{item.stcd}, #{item.yr}, #{item.wf}, #{item.rfz}, #{item.rzrcd}) ON DUPLICATE KEY UPDATE @@ -895,10 +916,74 @@ rfz = VALUES(rfz), rzrcd = VALUES(rzrcd) - + + + + INSERT INTO ${tableName} ( + STCD, YR, MNTH, QOBNO, MSQBGTM, XSQLC, + Q, QRCD, + MSQEDTM, MSQMT, BSGGZ, XSTTA, XSA, XSARCD, XSAVV, XSMXV, TPWD, XSAVDP, XSMXDP, IBWD, IBAVDP, IBMXDP, RVSFSL, N, + OBNONT -- 可选字段 + ) + VALUES + + ( + #{item.stcd}, + #{item.yr}, + #{item.mnth}, + #{item.qobno}, + #{item.msqbgtm}, + #{item.xsqlc}, + #{item.q}, + #{item.qrcd}, + #{item.msqedtm}, + #{item.msqmt}, + #{item.bsggz}, + #{item.xstta}, + #{item.xsa}, + #{item.xsarcd}, + #{item.xsavv}, + #{item.xsmxv}, + #{item.tpwd}, + #{item.xsavdp}, + #{item.xsmxdp}, + #{item.ibwd}, + #{item.ibavdp}, + #{item.ibmxdp}, + #{item.rvsfsl}, + #{item.n}, + #{item.obnont} + + ) + + ON DUPLICATE KEY UPDATE + QOBNO = VALUES(QOBNO), + MSQBGTM = VALUES(MSQBGTM), + XSQLC = VALUES(XSQLC), + Q = VALUES(Q), + QRCD = VALUES(QRCD), + MSQEDTM = VALUES(MSQEDTM), + MSQMT = VALUES(MSQMT), + BSGGZ = VALUES(BSGGZ), + XSTTA = VALUES(XSTTA), + XSA = VALUES(XSA), + XSARCD = VALUES(XSARCD), + XSAVV = VALUES(XSAVV), + XSMXV = VALUES(XSMXV), + TPWD = VALUES(TPWD), + XSAVDP = VALUES(XSAVDP), + XSMXDP = VALUES(XSMXDP), + IBWD = VALUES(IBWD), + IBAVDP = VALUES(IBAVDP), + IBMXDP = VALUES(IBMXDP), + RVSFSL = VALUES(RVSFSL), + N = VALUES(N), + OBNONT = VALUES(OBNONT) + + - INSERT INTO ${tableName} ( stcd, yr,mth, avhtdz, avhtdzrcd, hthtdz, hthtdzrcd, hthtdzotm, + INSERT INTO ${tableName} ( stcd, yr,mth, avhtdz, avhtdzrcd, hthtdz, hthtdzrcd, hthtdzotm, lthtdz, lthtdzrcd, lthtdzotm, avltdz, avltdzrcd, htltdz, htltdzrcd, htltdzotm, ltltdz, ltltdzrcd, ltltdzotm, avftdr, avftdrrcd, mxfltdr, mxfltdrrcd, mxfltdrhtm, mnfltdr, mnfltdrrcd, mnfltdrhtm, aver, @@ -1033,5 +1118,54 @@ + + INSERT INTO ${tableName} ( + STCD, OBDT, OBNO, VTNO, DI, RVBBEL, + RVBBELRCD, ODBRZ, ODBRZRCD, VTAZ, NOF + ) + VALUES + + ( + #{item.stcd}, + #{item.obdt}, + #{item.obno}, + #{item.vtno}, + #{item.di}, + #{item.rvbbel}, + #{item.rvbbelrcd}, + #{item.odbrz}, + #{item.odbrzrcd}, + #{item.vtaz}, + #{item.nof} + + ) + + ON DUPLICATE KEY UPDATE + OBDT = VALUES(OBDT), + + OBNO = VALUES(OBNO), + VTNO = VALUES(VTNO), + DI = VALUES(DI), + RVBBEL = VALUES(RVBBEL), + RVBBELRCD = VALUES(RVBBELRCD), + ODBRZ = VALUES(ODBRZ), + ODBRZRCD = VALUES(ODBRZRCD), + VTAZ = VALUES(VTAZ), + NOF = VALUES(NOF) + + + + + + insert into ${tableName} (stcd, yr, wf, rfz, rzrcd) values + + (#{item.stcd}, #{item.yr}, #{item.wf}, #{item.rfz}, #{item.rzrcd}) + + ON DUPLICATE KEY UPDATE + wf = VALUES(wf), + rfz = VALUES(rfz), + rzrcd = VALUES(rzrcd) + + diff --git a/swlscx/src/main/resources/mapper/synchronousData/YcResTableInfoMapper.xml b/swlscx/src/main/resources/mapper/synchronousData/YcResTableInfoMapper.xml index 53a2925..ced8e85 100644 --- a/swlscx/src/main/resources/mapper/synchronousData/YcResTableInfoMapper.xml +++ b/swlscx/src/main/resources/mapper/synchronousData/YcResTableInfoMapper.xml @@ -49,9 +49,12 @@ #{stcd} + + and a.res_type =#{param.resType} + - order by a.stcd + order by a.stcd,a.res_table_id , a.res_type @@ -81,4 +84,34 @@ WHERE EXISTS (SELECT 1 FROM hy_stsc_a b WHERE a.stcd = b.stcd) GROUP BY stcd + + + + + + + + + +