Browse Source

feat: ....

master
LeoAnn 2 weeks ago
parent
commit
a1172e5c4a
  1. 86
      ruoyi-admin/src/test/java/com/ruoyi/swlscx/day/service/impl/HyDpCServiceImplTest.java
  2. 1
      swlscx/src/main/java/com/ruoyi/swlscx/actualSurvey/service/impl/HyXsmsrsGServiceImpl.java
  3. 6
      swlscx/src/main/java/com/ruoyi/swlscx/basic/controller/BaseInfoController.java
  4. 75
      swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyObqGRowMapper.java
  5. 68
      swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyXsmsrsGRowMapper.java
  6. 225
      swlscx/src/main/java/com/ruoyi/swlscx/basic/service/impl/HyStscAServiceImpl.java
  7. 19
      swlscx/src/main/java/com/ruoyi/swlscx/common/utils/SqlServerDataSourceUtil.java
  8. 21
      swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/controller/TimeTasksController.java
  9. 46
      swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/dto/JHDayData.java
  10. 1
      swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/enums/JhhkTableEnum.java
  11. 5
      swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/enums/SWTableEnum.java
  12. 10
      swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/mapper/TimeTasksMapper.java
  13. 6
      swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/mapper/YcResTableInfoMapper.java
  14. 14
      swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/service/TimeTasksService.java
  15. 2
      swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/service/YcResTableInfoService.java
  16. 19
      swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/service/impl/GetDateServiceImpl.java
  17. 109
      swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/service/impl/TimeTasksServiceImpl.java
  18. 182
      swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/service/impl/YcResTableInfoServiceImpl.java
  19. 4
      swlscx/src/main/resources/mapper/actualSurvey/HyXsmsrsGMapper.xml
  20. 146
      swlscx/src/main/resources/mapper/synchronousData/TimeTasksMapper.xml
  21. 35
      swlscx/src/main/resources/mapper/synchronousData/YcResTableInfoMapper.xml

86
ruoyi-admin/src/test/java/com/ruoyi/swlscx/day/service/impl/HyDpCServiceImplTest.java

@ -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<String> stringList = Arrays.asList("逐潮高低潮位表200501-200801"
// , "逐潮高低潮位表200801-201001",
// "逐潮高低潮位表201001-201301"
// , "逐潮高低潮位表201301-201501",
// "逐潮高低潮位表201501-201701",
// "逐潮高低潮位表201701-202001"
// ,"逐潮高低潮位表202001-");
List<String> 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());
}
}

1
swlscx/src/main/java/com/ruoyi/swlscx/actualSurvey/service/impl/HyXsmsrsGServiceImpl.java

@ -176,7 +176,6 @@ public class HyXsmsrsGServiceImpl extends ServiceImpl<HyXsmsrsGMapper, HyXsmsrsG
ExcelUtils.formatCell(row, 10, vo.getOdbrz() != null ? vo.getOdbrz().toString() : "", style); ExcelUtils.formatCell(row, 10, vo.getOdbrz() != null ? vo.getOdbrz().toString() : "", style);
ExcelUtils.formatCell(row, 11, vo.getOdbrzrcd() != null ? vo.getOdbrzrcd() : "", style); ExcelUtils.formatCell(row, 11, vo.getOdbrzrcd() != null ? vo.getOdbrzrcd() : "", style);
ExcelUtils.formatCell(row, 12, vo.getVtaz() != null ? vo.getVtaz() : "", style); ExcelUtils.formatCell(row, 12, vo.getVtaz() != null ? vo.getVtaz() : "", style);
ExcelUtils.formatCell(row, 13, vo.getNof() != null ? vo.getNof() .toString(): "", style);
// 增加行号和全局序号 // 增加行号和全局序号
rowIndex++; rowIndex++;
globalIndex++; globalIndex++;

6
swlscx/src/main/java/com/ruoyi/swlscx/basic/controller/BaseInfoController.java

@ -220,7 +220,9 @@ public class BaseInfoController {
@RequestParam(value = "startTime",defaultValue = "") String startTime, @RequestParam(value = "startTime",defaultValue = "") String startTime,
@RequestParam(value = "endTime",defaultValue = "")String endTime, @RequestParam(value = "endTime",defaultValue = "")String endTime,
@RequestParam(value = "page") Integer pageNum, @RequestParam(value = "page") Integer pageNum,
@RequestParam(value = "limit") Integer pageSize) { @RequestParam(value = "stationTypeValue",defaultValue = "") String stationTypeValue,
return ycResTableInfoService.getStatInfo(stcds,startTime,endTime,pageNum,pageSize); @RequestParam(value = "limit") Integer pageSize,
@RequestParam(value = "type",defaultValue = "") String type) {
return ycResTableInfoService.getStatInfo(stcds,startTime,endTime,pageNum,pageSize,stationTypeValue,type);
} }
} }

75
swlscx/src/main/java/com/ruoyi/swlscx/basic/domain/rowMapper/HyObqGRowMapper.java

@ -0,0 +1,75 @@
package com.ruoyi.swlscx.basic.domain.rowMapper;
import com.ruoyi.swlscx.actualSurvey.domain.po.HyObqG;
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/7/13 14:37
* @Description: TODO
* @Version
*/
public class HyObqGRowMapper implements RowMapper<HyObqG> {
@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<Double> setter)
throws SQLException {
double value = rs.getDouble(columnName);
if (!rs.wasNull()) { // 关键:检查实际值是否为NULL
setter.accept(value);
}
}
}

68
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<HyXsmsrsG> {
@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<BigDecimal> setter)
throws SQLException {
BigDecimal value = rs.getBigDecimal(columnName);
if (value != null) { // 直接检查BigDecimal是否为NULL
setter.accept(value);
}
}
}

225
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.DateUtils;
import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.bean.BeanUtils; 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.bo.HyStscABo;
import com.ruoyi.swlscx.basic.domain.po.*; import com.ruoyi.swlscx.basic.domain.po.*;
import com.ruoyi.swlscx.basic.domain.ro.FormDataRo; 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.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Lazy;
import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -57,6 +62,8 @@ import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.File; import java.io.File;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Timestamp; import java.sql.Timestamp;
import java.sql.Types; import java.sql.Types;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
@ -269,6 +276,13 @@ public class HyStscAServiceImpl extends ServiceImpl<HyStscAMapper, HyStscA> impl
private HyStscAService hyStscAService; private HyStscAService hyStscAService;
@Autowired
@Lazy
private HyObqGService hyObqGService;
@Autowired
@Lazy
private HyXsmsrsGService hyXsmsrsGService;
@Override @Override
public HyStscASelectVo getList(String startTime, String endTime, String type) { public HyStscASelectVo getList(String startTime, String endTime, String type) {
@ -761,6 +775,39 @@ public class HyStscAServiceImpl extends ServiceImpl<HyStscAMapper, HyStscA> impl
if (!stcds.isEmpty()) { if (!stcds.isEmpty()) {
list = this.list(Wrappers.lambdaQuery(HyStscA.class).in(HyStscA::getStcd, stcds)); 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<HyObqG> queryWrapper = Wrappers.lambdaQuery(HyObqG.class);
if (ObjectUtils.isNotEmpty(startYear)) {
queryWrapper.ge(HyObqG::getYr, startYear);
}
if (ObjectUtils.isNotEmpty(endYear)) {
queryWrapper.le(HyObqG::getYr, endYear);
}
List<String> 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<HyXsmsrsG> queryWrapper = new QueryWrapper<>();
queryWrapper.select("DISTINCT stcd"); // 指定查询字段
if (ObjectUtils.isNotEmpty(startTime)) {
queryWrapper.ge("OBDT", startTime);
}
if (ObjectUtils.isNotEmpty(endTime)) {
queryWrapper.le("OBDT", endTime);
}
List<String> 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<HyStscAMapper, HyStscA> impl
} }
} }
} }
else if (tableName.equals(SWTableEnum.DP_OBQ.value())) {
List<HyObqG> hyObqGList = hyObqGService.list(Wrappers.lambdaQuery(HyObqG.class)
.between(HyObqG::getYr, startYear, endYear)
.in(HyObqG::getStcd, stcdsList));
if (ObjectUtils.isNotEmpty(hyObqGList)) {
List<String> stcdList = hyObqGList.stream().map(HyObqG::getStcd).distinct().collect(Collectors.toList());
Set<String> stcdSet = new HashSet<>(stcdList); // 将小集合转为HashSet
List<String> 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<HyXsmsrsG> hyXsmsrsGList = hyXsmsrsGService.list(Wrappers.lambdaQuery(HyXsmsrsG.class)
.between(HyXsmsrsG::getObdt, startTimeDay, endTimeDay)
.in(HyXsmsrsG::getStcd, stcdsList));
if (ObjectUtils.isNotEmpty(hyXsmsrsGList)) {
List<String> stcdList = hyXsmsrsGList.stream().map(HyXsmsrsG::getStcd).distinct().collect(Collectors.toList());
Set<String> stcdSet = new HashSet<>(stcdList); // 将小集合转为HashSet
List<String> 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 提升查询效率 // 将 removeFzTableId 转为 HashSet 提升查询效率
@ -2131,7 +2329,22 @@ public class HyStscAServiceImpl extends ServiceImpl<HyStscAMapper, HyStscA> impl
} }
return years; 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 @Override
@DataSource(DataSourceType.SHARDING) @DataSource(DataSourceType.SHARDING)
public List<Map<String, Object>> testSqlServer() { public List<Map<String, Object>> testSqlServer() {
@ -2433,6 +2646,18 @@ public class HyStscAServiceImpl extends ServiceImpl<HyStscAMapper, HyStscA> impl
"AND tm BETWEEN ? AND ?"; "AND tm BETWEEN ? AND ?";
List<HyWsfhexB> hyWsfhexBList = jdbcTemplate.query(sql, new HyWsfhexBRowMapper(), startTimeDay, endTimeDay); List<HyWsfhexB> hyWsfhexBList = jdbcTemplate.query(sql, new HyWsfhexBRowMapper(), startTimeDay, endTimeDay);
timeTasksMapper.insertOrUpdateHyWsfhexBList(hyWsfhexBList, SWTableEnum.DP_WSFHEX.value()); 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<HyObqG> 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<HyXsmsrsG> hyXsmsrsGList = jdbcTemplate.query(sql, new HyXsmsrsGRowMapper(), startTimeDay, endTimeDay);
timeTasksMapper.insertOrUpdateHyXsmsrsGList(hyXsmsrsGList, SWTableEnum.DP_XSMSRS.value());
} }
} }
} }

19
swlscx/src/main/java/com/ruoyi/swlscx/common/utils/SqlServerDataSourceUtil.java

@ -1,4 +1,5 @@
package com.ruoyi.swlscx.common.utils; package com.ruoyi.swlscx.common.utils;
import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.pool.DruidDataSource;
import com.ruoyi.swlscx.basic.domain.ro.FormDataRo; import com.ruoyi.swlscx.basic.domain.ro.FormDataRo;
@ -6,15 +7,23 @@ import javax.sql.DataSource;
public class SqlServerDataSourceUtil { public class SqlServerDataSourceUtil {
public static DataSource createDataSource(FormDataRo formDataRo) { public static DataSource createDataSource(FormDataRo formDataRo) {
// formDataRo.setDataBase("hy_shdp"); formDataRo.setDataBase("hy_shdp");
// formDataRo.setUserName("sa"); formDataRo.setUserName("sa");
// formDataRo.setPassword("admin"); formDataRo.setPassword("admin");
// formDataRo.setSqlseverIp("192.168.16.232"); formDataRo.setSqlseverIp("192.168.16.232");
DruidDataSource dataSource = new DruidDataSource(); DruidDataSource dataSource = new DruidDataSource();
// 基本连接配置 // 基本连接配置
dataSource.setDriverClassName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 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( dataSource.setUrl(String.format(
"jdbc:sqlserver://%s:14333;databaseName=%s;encrypt=false;", "jdbc:sqlserver://%s:1433;databaseName=%s;encrypt=false;",
formDataRo.getSqlseverIp(), formDataRo.getSqlseverIp(),
formDataRo.getDataBase() formDataRo.getDataBase()
)); ));

21
swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/controller/TimeTasksController.java

@ -268,6 +268,27 @@ public class TimeTasksController {
return 1; return 1;
} catch (Exception e) { return -1; } } catch (Exception e) { return -1; }
}); });
CompletableFuture<Integer> future8 = CompletableFuture.supplyAsync(() -> {
try {
timeTasksService.getDpXsmsrsGData();
return 1;
} catch (Exception e) { return -1; }
});
CompletableFuture<Integer> future9 = CompletableFuture.supplyAsync(() -> {
try {
timeTasksService.getHyObqGData();
return 1;
} catch (Exception e) { return -1; }
});
CompletableFuture<Integer> future10 = CompletableFuture.supplyAsync(() -> {
try {
timeTasksService.getHyWfdzF();
return 1;
} catch (Exception e) { return -1; }
});
return R.ok("测试成功"); return R.ok("测试成功");
} }

46
swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/dto/JHDayData.java

@ -856,5 +856,51 @@ public class JHDayData {
private String eslcch; 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;
} }

1
swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/enums/JhhkTableEnum.java

@ -37,6 +37,7 @@ public enum JhhkTableEnum {
MONTH_MTWE("月水面蒸发量表", "dp_mtwe_e"), MONTH_MTWE("月水面蒸发量表", "dp_mtwe_e"),
MONTH_MTWT("月水温表", "dp_mtwt_e"), MONTH_MTWT("月水温表", "dp_mtwt_e"),
DP_WFDZ("保证水位表", "dp_wfdz_f"),
MONTH_Q("月流量表", "dp_mtq_e"), MONTH_Q("月流量表", "dp_mtq_e"),
MONTH_MTZ("月水位表", "dp_mtz_e"), MONTH_MTZ("月水位表", "dp_mtz_e"),
DP_OBQ("实测流量表", "dp_obq_r"), DP_OBQ("实测流量表", "dp_obq_r"),

5
swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/enums/SWTableEnum.java

@ -51,14 +51,14 @@ public enum SWTableEnum {
MONTH_RIVER("月水位表", "hy_mtz_e"), MONTH_RIVER("月水位表", "hy_mtz_e"),
MONTH_RSVR("月水库水位表", "yc_rpt_rsvr_month"), MONTH_RSVR("月水库水位表", "yc_rpt_rsvr_month"),
DP_OBQ("实测流量表", "yc_rpt_hy_obq_g"), DP_OBQ("实测流量表", "hy_obq_g"),
DP_RVFHEX("水库洪水水文要素摘录表", "hy_rvfhex_b"), DP_RVFHEX("水库洪水水文要素摘录表", "hy_rvfhex_b"),
DP_WSFHEX("水闸洪水水文要素摘录表", "hy_wsfhex_b"), DP_WSFHEX("水闸洪水水文要素摘录表", "hy_wsfhex_b"),
DP_XSMSRS("实测大断面流量表", "yc_rpt_hy_xsmsrs_g"), DP_XSMSRS("实测大断面流量表", "hy_xsmsrs_g"),
YEAR_YRCS("年含沙量表", "hy_yrcs_f"), YEAR_YRCS("年含沙量表", "hy_yrcs_f"),
YEAR_Q("年流量表", "hy_yrq_f"), YEAR_Q("年流量表", "hy_yrq_f"),
YEAR_RAIN("年降水量表", "hy_yrp_f"), YEAR_RAIN("年降水量表", "hy_yrp_f"),
@ -72,6 +72,7 @@ public enum SWTableEnum {
YEAR_YRWT("年水温表", "hy_yrwt_f"), YEAR_YRWT("年水温表", "hy_yrwt_f"),
YEAR_YRWE("年水面蒸发量表", "hy_yrwe_f"); YEAR_YRWE("年水面蒸发量表", "hy_yrwe_f");

10
swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/mapper/TimeTasksMapper.java

@ -1,5 +1,7 @@
package com.ruoyi.swlscx.synchronousData.mapper; 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.basic.domain.po.HyWfdzF;
import com.ruoyi.swlscx.day.domain.po.*; import com.ruoyi.swlscx.day.domain.po.*;
import com.ruoyi.swlscx.excerpt.domain.po.*; import com.ruoyi.swlscx.excerpt.domain.po.*;
@ -96,6 +98,14 @@ public interface TimeTasksMapper {
void insertOrUpdateHyMttdzEList(@Param("list") List<HyMttdzE> hyMttdzEList,@Param("tableName") String tableName); void insertOrUpdateHyMttdzEList(@Param("list") List<HyMttdzE> hyMttdzEList,@Param("tableName") String tableName);
void insertOrUpdateHyWfdzF(@Param("list") List<HyWfdzF> hyWfdzFList,@Param("tableName") String value); void insertOrUpdateHyWfdzF(@Param("list") List<HyWfdzF> hyWfdzFList,@Param("tableName") String value);
void insertOrUpdateHyObqGList(@Param("list")List<HyObqG> hyObqGList, @Param("tableName") String value);
void insertOrUpdateHyXsmsrsGList(List<HyXsmsrsG> hyXsmsrsGList, String value);
List<JHDayData> getDataByOBdt(@Param("stcd")String stcd,@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("tableName") String tableName);
void insertOrUpdateHyWfdzFList(@Param("list") List<HyWfdzF> hyWfdzFList,@Param("tableName") String tableName);
// //
// void deleteAll(@Param("tableName") String tableName); // void deleteAll(@Param("tableName") String tableName);
// //

6
swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/mapper/YcResTableInfoMapper.java

@ -30,4 +30,10 @@ public interface YcResTableInfoMapper {
List<YcResStatInfo> getResTableRainrexBList(@Param("tableName") String tableName); List<YcResStatInfo> getResTableRainrexBList(@Param("tableName") String tableName);
List<YcResStatInfo> getResTableTMList(@Param("tableName") String tableName); List<YcResStatInfo> getResTableTMList(@Param("tableName") String tableName);
List<YcResStatInfo> getResTableRainXsList(@Param("tableName") String tableName);
List<YcResStatInfo> getResTableRainrexBListByPage(@Param("tableName") String value, @Param("offset") int i, @Param("pageSize") int pageSize);
List<YcResStatInfo> getResTableTMListByPage(@Param("tableName") String value, @Param("offset") int i, @Param("pageSize") int pageSize);
} }

14
swlscx/src/main/java/com/ruoyi/swlscx/synchronousData/service/TimeTasksService.java

@ -13,7 +13,8 @@ public interface TimeTasksService {
void getDayQData(); void getDayQData();
void getDayDqsData(); void getDayDqsData();
//
//
void getDayDcsData(); void getDayDcsData();
void getDayDweData(); void getDayDweData();
@ -25,7 +26,8 @@ public interface TimeTasksService {
// void getDayRsverData(); // void getDayRsverData();
void getDayDmxpData(); void getDayDmxpData();
//
//
void getDayImxfwData(); void getDayImxfwData();
void getFdheexData(); void getFdheexData();
@ -79,5 +81,13 @@ public interface TimeTasksService {
// //
void getMonthMttdzData(); void getMonthMttdzData();
void setYcStaions(); void setYcStaions();
void getDpXsmsrsGData();
void getHyObqGData();
void getHyWfdzF();
} }

2
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 { public interface YcResTableInfoService {
R getYcResTableInfo(); 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);
} }

19
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.alibaba.fastjson.JSON;
import com.ruoyi.common.annotation.DataSource; import com.ruoyi.common.annotation.DataSource;
import com.ruoyi.common.enums.DataSourceType; 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.day.domain.po.*;
import com.ruoyi.swlscx.excerpt.domain.po.*; import com.ruoyi.swlscx.excerpt.domain.po.*;
import com.ruoyi.swlscx.month.domain.po.*; import com.ruoyi.swlscx.month.domain.po.*;
@ -198,8 +201,22 @@ public class GetDateServiceImpl implements GetDateService {
List<HyMttdzE> hyMttdzEList = JSON.parseArray(stringRedisTemplate.opsForValue().get(stcd), HyMttdzE.class); List<HyMttdzE> hyMttdzEList = JSON.parseArray(stringRedisTemplate.opsForValue().get(stcd), HyMttdzE.class);
//更新新增操作 //更新新增操作
timeTasksMapper.insertOrUpdateHyMttdzEList(hyMttdzEList, tableName); timeTasksMapper.insertOrUpdateHyMttdzEList(hyMttdzEList, tableName);
}else if (tableName.equals(SWTableEnum.DP_XSMSRS.value())){
//从redis中查数据
List<HyXsmsrsG> hyXsmsrsGList = JSON.parseArray(stringRedisTemplate.opsForValue().get(stcd), HyXsmsrsG.class);
//更新新增操作
timeTasksMapper.insertOrUpdateHyXsmsrsGList(hyXsmsrsGList, tableName);
}else if (tableName.equals(SWTableEnum.DP_OBQ.value())){
//从redis中查数据
List<HyObqG> hyObqGList = JSON.parseArray(stringRedisTemplate.opsForValue().get(stcd), HyObqG.class);
//更新新增操作
timeTasksMapper.insertOrUpdateHyObqGList(hyObqGList, tableName);
}else if (tableName.equals(SWTableEnum.HY_WFDZ_F.value())){
//从redis中查数据
List<HyWfdzF> hyWfdzFList = JSON.parseArray(stringRedisTemplate.opsForValue().get(stcd), HyWfdzF.class);
//更新新增操作
timeTasksMapper.insertOrUpdateHyWfdzFList(hyWfdzFList, tableName);
} }
} }
//清除redis缓存 //清除redis缓存
for (String stcd : stcds) { for (String stcd : stcds) {

109
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.core.text.Convert;
import com.ruoyi.common.enums.DataSourceType; import com.ruoyi.common.enums.DataSourceType;
import com.ruoyi.common.utils.DateUtils; 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.HyStscA;
import com.ruoyi.swlscx.basic.domain.po.HyWfdzF;
import com.ruoyi.swlscx.basic.service.HyStscAService; import com.ruoyi.swlscx.basic.service.HyStscAService;
import com.ruoyi.swlscx.day.domain.po.*; import com.ruoyi.swlscx.day.domain.po.*;
import com.ruoyi.swlscx.excerpt.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()); getDateService.insertRainData(stcds,SWTableEnum.YEAR_RIVER.value());
} }
/**
* 获取江河湖库实测大断面流量表
*/
@Override
@Scheduled(cron = "0 15 5 13 * ?")
@DataSource(DataSourceType.SLAVE)
public void getDpXsmsrsGData() {
List<HyStscA> ycStations = getYcStations();
String[] startAndEndTime = getStartAndEndTime();
String startTime = startAndEndTime[1];
String endTime = startAndEndTime[0];
String tableName = JhhkTableEnum.DP_XSMSRS.value();
List<String> stcds = new ArrayList<>();
for (HyStscA ycStation : ycStations) {
List<JHDayData> jhDayDataList = timeTasksMapper.getDataByOBdt(ycStation.getStcd(), startTime,endTime, tableName);
if (jhDayDataList == null || jhDayDataList.isEmpty()) {
continue;
}
//匹配数据
List<HyXsmsrsG> 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<HyStscA> ycStations = getYcStations();
String year = getNowYear();
String tableName = JhhkTableEnum.DP_OBQ.value();
List<String> stcds = new ArrayList<>();
for (HyStscA ycStation : ycStations) {
List<JHDayData> jhDayDataList = timeTasksMapper.getDataByYr(ycStation.getStcd(), year, tableName);
if (jhDayDataList == null || jhDayDataList.isEmpty()) {
continue;
}
//匹配数据
List<HyObqG> 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<HyStscA> ycStations = getYcStations();
String year = getNowYear();
String tableName = JhhkTableEnum.DP_WFDZ.value();
List<String> stcds = new ArrayList<>();
for (HyStscA ycStation : ycStations) {
List<JHDayData> jhDayDataList = timeTasksMapper.getDataByYr(ycStation.getStcd(), year, tableName);
if (jhDayDataList == null || jhDayDataList.isEmpty()) {
continue;
}
//匹配数据
List<HyWfdzF> 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() { private static String getNowYear() {
return Convert.toStr(Year.now().getValue()); return Convert.toStr(Year.now().getValue());
} }
@ -1343,8 +1450,8 @@ public class TimeTasksServiceImpl implements TimeTasksService {
LocalDateTime endDate = LocalDateTime.now(); LocalDateTime endDate = LocalDateTime.now();
return new String[]{ return new String[]{
endDate.format(formatter), // 当前时间
startDate.format(formatter), // 今年开始时间 startDate.format(formatter), // 今年开始时间
endDate.format(formatter) // 当前时间
}; };
} }

182
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.baomidou.mybatisplus.core.metadata.IPage;
import com.ruoyi.common.core.page.R; import com.ruoyi.common.core.page.R;
import com.ruoyi.common.core.text.Convert; 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.domain.vo.HyStscAVo;
import com.ruoyi.swlscx.basic.service.HyStscAService;
import com.ruoyi.swlscx.common.utils.Query; import com.ruoyi.swlscx.common.utils.Query;
import com.ruoyi.swlscx.synchronousData.dto.YcResStatInfo; import com.ruoyi.swlscx.synchronousData.dto.YcResStatInfo;
import com.ruoyi.swlscx.synchronousData.enums.SWTableEnum; import com.ruoyi.swlscx.synchronousData.enums.SWTableEnum;
import com.ruoyi.swlscx.synchronousData.mapper.YcResTableInfoMapper; import com.ruoyi.swlscx.synchronousData.mapper.YcResTableInfoMapper;
import com.ruoyi.swlscx.synchronousData.service.YcResTableInfoService; 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.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -23,6 +28,7 @@ import java.util.stream.Collectors;
* @Version * @Version
*/ */
@Service @Service
@Slf4j
public class YcResTableInfoServiceImpl implements YcResTableInfoService { public class YcResTableInfoServiceImpl implements YcResTableInfoService {
@Autowired @Autowired
@ -75,18 +81,57 @@ public class YcResTableInfoServiceImpl implements YcResTableInfoService {
ycResTableInfoMapper.saveBatch(ycResStatInfoHMXPList); ycResTableInfoMapper.saveBatch(ycResStatInfoHMXPList);
//降水量摘录表 //降水量摘录表
List<YcResStatInfo> ycResStatInfoPrexBList = ycResTableInfoMapper.getResTableRainrexBList(SWTableEnum.DP_HOUR.value()); // List<YcResStatInfo> ycResStatInfoPrexBList = ycResTableInfoMapper.getResTableRainrexBList(SWTableEnum.DP_HOUR.value());
ycResStatInfoPrexBList.forEach(i -> { // ycResStatInfoPrexBList.forEach(i -> {
i.setSType("P"); // i.setSType("P");
i.setResType("雨量资料"); // i.setResType("雨量资料");
i.setResTableId(4L); // i.setResTableId(4L);
String statYear = i.getStatYear(); // String statYear = i.getStatYear();
i.setStatYear(formatYears(statYear)); // i.setStatYear(formatYears(statYear));
i.setOldYear(statYear); // i.setOldYear(statYear);
i.setResTable("降水量摘录表"); // i.setResTable("降水量摘录表");
} // }
// );
// ycResTableInfoMapper.saveBatch(ycResStatInfoPrexBList);
int pageSize = 50; // 每批处理1000条
int pageNum = 0;
List<YcResStatInfo> batchResults;
do {
// 分页查询
batchResults = ycResTableInfoMapper.getResTableRainrexBListByPage(
SWTableEnum.DP_HOUR.value(),
pageNum * pageSize,
pageSize
); );
ycResTableInfoMapper.saveBatch(ycResStatInfoPrexBList);
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,9 +164,22 @@ public class YcResTableInfoServiceImpl implements YcResTableInfoService {
ycResTableInfoMapper.saveBatch(ycResStatInfoSZList2); ycResTableInfoMapper.saveBatch(ycResStatInfoSZList2);
// 逐潮高低潮位表
List<YcResStatInfo> ycResStatInfoZCList2 = ycResTableInfoMapper.getResTableTMList(SWTableEnum.DP_HLTDZ.value());
ycResStatInfoZCList2.forEach(i -> { List<YcResStatInfo> batchResults1;
do {
// 分页查询
batchResults1 = ycResTableInfoMapper.getResTableTMListByPage(
SWTableEnum.DP_HLTDZ.value(),
pageNum * pageSize,
pageSize
);
if (batchResults1.isEmpty()) break;
// 处理数据
batchResults1.forEach(i -> {
i.setSType("Z"); i.setSType("Z");
i.setResType("水位资料"); i.setResType("水位资料");
i.setResTableId(7L); i.setResTableId(7L);
@ -129,9 +187,30 @@ public class YcResTableInfoServiceImpl implements YcResTableInfoService {
i.setStatYear(formatYears(statYear)); i.setStatYear(formatYears(statYear));
i.setOldYear(statYear); i.setOldYear(statYear);
i.setResTable("逐潮高低潮位表"); i.setResTable("逐潮高低潮位表");
} });
);
ycResTableInfoMapper.saveBatch(ycResStatInfoZCList2); // 批量保存
ycResTableInfoMapper.saveBatch(batchResults1);
// 更新页码
pageNum++;
log.info("已处理第 {} 批数据,共 {} 条", pageNum, batchResults1.size());
} while (true);
// 逐潮高低潮位表
// List<YcResStatInfo> 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); ycResTableInfoMapper.saveBatch(ycResStatInfoCWList2);
return R.ok().put("data", ycResStatInfoSZList2); // 逐日流量表
List<YcResStatInfo> 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<YcResStatInfo> 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<YcResStatInfo> 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) { public static String formatYears(String yearStr) {
if (yearStr == null || yearStr.isEmpty()) { if (yearStr == null || yearStr.isEmpty()) {
return ""; return "";
@ -200,22 +326,34 @@ public class YcResTableInfoServiceImpl implements YcResTableInfoService {
} }
} }
@Autowired
@Lazy
private HyStscAService hyStscAService;
@Override @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<String, Object> map = new HashMap<>(); Map<String, Object> 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("page", Convert.toStr(pageNum));
map.put("limit", Convert.toStr(pageSize)); map.put("limit", Convert.toStr(pageSize));
List<String> filteredList = Collections.emptyList(); List<String> filteredList = Collections.emptyList();
if (stcds != null) { if (stcds != null) {
if (stcds.contains("all")) { 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(",")) filteredList = Arrays.stream(stcds.split(","))
.filter(s -> s != null && !s.trim().isEmpty()) .filter(s -> s != null && !s.trim().isEmpty())
.map(String::trim) .map(String::trim)
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
System.out.println("stcds: "+stcds); }
map.put("stcds", filteredList.isEmpty() ? null : filteredList); map.put("stcds", filteredList.isEmpty() ? null : filteredList);
IPage<YcResStatInfo> ycResStatInfoIPage = ycResTableInfoMapper.getPageList(new Query<HyStscAVo>().getPage(map), map); IPage<YcResStatInfo> ycResStatInfoIPage = ycResTableInfoMapper.getPageList(new Query<HyStscAVo>().getPage(map), map);

4
swlscx/src/main/resources/mapper/actualSurvey/HyXsmsrsGMapper.xml

@ -23,7 +23,7 @@
</if> </if>
</trim> </trim>
</where> </where>
order by hme.stcd,hme.OBDT,hme.obno order by hme.stcd,hme.OBDT,hme.obno,hme.VTNO
</select> </select>
@ -48,7 +48,7 @@
</if> </if>
</trim> </trim>
</where> </where>
order by hme.stcd,hme.OBDT,hme.obno order by hme.stcd,hme.OBDT,hme.obno,hme.VTNO
</select> </select>
</mapper> </mapper>

146
swlscx/src/main/resources/mapper/synchronousData/TimeTasksMapper.xml

@ -5,7 +5,19 @@
<mapper namespace="com.ruoyi.swlscx.synchronousData.mapper.TimeTasksMapper"> <mapper namespace="com.ruoyi.swlscx.synchronousData.mapper.TimeTasksMapper">
<select id="getDayData" resultType="com.ruoyi.swlscx.synchronousData.dto.JHDayData"> <select id="getDayData" resultType="com.ruoyi.swlscx.synchronousData.dto.JHDayData">
select * from ${tableName} where stcd = #{stcd} and dt >= #{startTime} and dt &lt;= #{endTime} select *
from ${tableName}
where stcd = #{stcd}
and dt >= #{startTime}
and dt &lt;= #{endTime}
</select>
<select id="getDataByOBdt" resultType="com.ruoyi.swlscx.synchronousData.dto.JHDayData">
select *
from ${tableName}
where stcd = #{stcd}
and obdt >= #{startTime}
and obdt &lt;= #{endTime}
</select> </select>
<select id="getDataByDgdt" resultType="com.ruoyi.swlscx.synchronousData.dto.JHDayData"> <select id="getDataByDgdt" resultType="com.ruoyi.swlscx.synchronousData.dto.JHDayData">
@ -24,11 +36,19 @@
</select> </select>
<select id="getDataByTm" resultType="com.ruoyi.swlscx.synchronousData.dto.JHDayData"> <select id="getDataByTm" resultType="com.ruoyi.swlscx.synchronousData.dto.JHDayData">
select * from ${tableName} where stcd = #{stcd} and tm >= #{startTime} and tm &lt;= #{endTime} select *
from ${tableName}
where stcd = #{stcd}
and tm >= #{startTime}
and tm &lt;= #{endTime}
</select> </select>
<select id="getDataByBgtm" resultType="com.ruoyi.swlscx.synchronousData.dto.JHDayData"> <select id="getDataByBgtm" resultType="com.ruoyi.swlscx.synchronousData.dto.JHDayData">
select * from ${tableName} where stcd = #{stcd} and bgtm >= #{startTime} and bgtm &lt;= #{endTime} select *
from ${tableName}
where stcd = #{stcd}
and bgtm >= #{startTime}
and bgtm &lt;= #{endTime}
</select> </select>
<insert id="insertOrUpdateHyDpc"> <insert id="insertOrUpdateHyDpc">
@ -774,7 +794,6 @@
</insert> </insert>
<insert id="insertOrUpdateHyYrweFList"> <insert id="insertOrUpdateHyYrweFList">
INSERT INTO ${tableName} (stcd, INSERT INTO ${tableName} (stcd,
eetp, eetp,
@ -829,7 +848,8 @@
<insert id="insertOrUpdateHyYrwtFList"> <insert id="insertOrUpdateHyYrwtFList">
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 VALUES
<foreach collection="list" item="item" separator=","> <foreach collection="list" item="item" separator=",">
( (
@ -887,7 +907,8 @@
</insert> </insert>
<insert id="insertOrUpdateHyWfdzF"> <insert id="insertOrUpdateHyWfdzF">
insert into ${tableName} (stcd, yr, wf, rfz, rzrcd) values <foreach collection="list" item="item" separator=","> insert into ${tableName} (stcd, yr, wf, rfz, rzrcd) values
<foreach collection="list" item="item" separator=",">
(#{item.stcd}, #{item.yr}, #{item.wf}, #{item.rfz}, #{item.rzrcd}) (#{item.stcd}, #{item.yr}, #{item.wf}, #{item.rfz}, #{item.rzrcd})
</foreach> </foreach>
ON DUPLICATE KEY UPDATE ON DUPLICATE KEY UPDATE
@ -897,6 +918,70 @@
</insert> </insert>
<insert id="insertOrUpdateHyObqGList">
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
<foreach collection="list" item="item" separator=",">
(
#{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}
)
</foreach>
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>
<insert id="insertOrUpdateHyMttdzEList"> <insert id="insertOrUpdateHyMttdzEList">
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, lthtdz, lthtdzrcd, lthtdzotm, avltdz, avltdzrcd, htltdz, htltdzrcd,
@ -1033,5 +1118,54 @@
</insert> </insert>
<insert id="insertOrUpdateHyXsmsrsGList">
INSERT INTO ${tableName} (
STCD, OBDT, OBNO, VTNO, DI, RVBBEL,
RVBBELRCD, ODBRZ, ODBRZRCD, VTAZ, NOF
)
VALUES
<foreach collection="list" item="item" separator=",">
(
#{item.stcd},
#{item.obdt},
#{item.obno},
#{item.vtno},
#{item.di},
#{item.rvbbel},
#{item.rvbbelrcd},
#{item.odbrz},
#{item.odbrzrcd},
#{item.vtaz},
#{item.nof}
)
</foreach>
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>
<insert id="insertOrUpdateHyWfdzFList">
insert into ${tableName} (stcd, yr, wf, rfz, rzrcd) values
<foreach collection="list" item="item" separator=",">
(#{item.stcd}, #{item.yr}, #{item.wf}, #{item.rfz}, #{item.rzrcd})
</foreach>
ON DUPLICATE KEY UPDATE
wf = VALUES(wf),
rfz = VALUES(rfz),
rzrcd = VALUES(rzrcd)
</insert>
</mapper> </mapper>

35
swlscx/src/main/resources/mapper/synchronousData/YcResTableInfoMapper.xml

@ -49,9 +49,12 @@
#{stcd} #{stcd}
</foreach> </foreach>
</if> </if>
<if test="param.resType != null and param.resType != ''">
and a.res_type =#{param.resType}
</if>
</trim> </trim>
</where> </where>
order by a.stcd order by a.stcd,a.res_table_id , a.res_type
</select> </select>
@ -81,4 +84,34 @@
WHERE EXISTS (SELECT 1 FROM hy_stsc_a b WHERE a.stcd = b.stcd) WHERE EXISTS (SELECT 1 FROM hy_stsc_a b WHERE a.stcd = b.stcd)
GROUP BY stcd GROUP BY stcd
</select> </select>
<select id="getResTableRainXsList" resultType="com.ruoyi.swlscx.synchronousData.dto.YcResStatInfo">
SELECT stcd, GROUP_CONCAT(DISTINCT LEFT(OBDT, 4)) AS statYear
FROM ${tableName} a
WHERE EXISTS (SELECT 1 FROM hy_stsc_a b WHERE a.stcd = b.stcd)
GROUP BY stcd
</select>
<!-- 新增分页查询方法 -->
<select id="getResTableRainrexBListByPage" resultType="com.ruoyi.swlscx.synchronousData.dto.YcResStatInfo">
SELECT stcd, GROUP_CONCAT(DISTINCT LEFT(bgtm, 4)) AS statYear
FROM ${tableName}
WHERE EXISTS (SELECT 1 FROM hy_stsc_a b WHERE a.stcd = b.stcd)
GROUP BY stcd
ORDER BY stcd <!-- 确保分页顺序稳定 -->
LIMIT #{offset}, #{pageSize}
</select>
<select id="getResTableTMListByPage" resultType="com.ruoyi.swlscx.synchronousData.dto.YcResStatInfo">
SELECT stcd, GROUP_CONCAT(DISTINCT LEFT(tm, 4)) AS statYear
FROM ${tableName}
WHERE EXISTS (SELECT 1 FROM hy_stsc_a b WHERE a.stcd = b.stcd)
GROUP BY stcd
ORDER BY stcd <!-- 确保分页顺序稳定 -->
LIMIT #{offset}, #{pageSize}
</select>
</mapper> </mapper>

Loading…
Cancel
Save