feat: 保存修正后的河道水温日数据

This commit is contained in:
tangwei 2026-06-26 11:35:07 +08:00
parent 8e3fa72fd1
commit de480e3e19
4 changed files with 108 additions and 0 deletions

View File

@ -9,6 +9,7 @@ import com.yfd.platform.common.exception.BizException;
import com.yfd.platform.config.ResponseResult; import com.yfd.platform.config.ResponseResult;
import com.yfd.platform.qgc_base.entity.vo.BatchDeleteAo; import com.yfd.platform.qgc_base.entity.vo.BatchDeleteAo;
import com.yfd.platform.qgc_env.wt.entity.vo.WtrvInfo; import com.yfd.platform.qgc_env.wt.entity.vo.WtrvInfo;
import com.yfd.platform.qgc_env.wt.entity.vo.WtrvAmendSaveVo;
import com.yfd.platform.qgc_env.wt.service.*; import com.yfd.platform.qgc_env.wt.service.*;
import com.yfd.platform.utils.QgcQueryWrapperUtil; import com.yfd.platform.utils.QgcQueryWrapperUtil;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
@ -17,6 +18,7 @@ import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map; import java.util.Map;
@RestController @RestController
@ -209,6 +211,13 @@ public class SdWTMonitorController {
return ResponseResult.successData(sdWtMonitorService.getWtrvAmendDayList(dataSourceRequest)); return ResponseResult.successData(sdWtMonitorService.getWtrvAmendDayList(dataSourceRequest));
} }
@PostMapping("/wtrvAmend/dayAmend/saveAmendData")
@Operation(summary = "保存修正后的河道水温日数据")
public ResponseResult saveWtrvAmendData(@RequestBody List<WtrvAmendSaveVo> amendDataList) {
sdWtMonitorService.saveWtrvAmendData(amendDataList);
return ResponseResult.success();
}
@GetMapping("/msstbprpt/getStcdInfo") @GetMapping("/msstbprpt/getStcdInfo")
@Operation(summary = "根据站码查询单条水温基础数据") @Operation(summary = "根据站码查询单条水温基础数据")
public ResponseResult getStcdInfo(@RequestParam String stcd) { public ResponseResult getStcdInfo(@RequestParam String stcd) {

View File

@ -0,0 +1,20 @@
package com.yfd.platform.qgc_env.wt.entity.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
@Data
@Schema(description = "河道水温日修正保存入参")
public class WtrvAmendSaveVo {
@Schema(description = "站点编码")
private String stcd;
@Schema(description = "日期,支持 yyyy-MM-dd 或 yyyy-MM-dd HH:mm:ss")
private String dt;
@Schema(description = "修正后水温")
private BigDecimal wt;
}

View File

@ -10,6 +10,7 @@ import com.yfd.platform.qgc_env.wt.entity.vo.SdYearDetailVO;
import com.yfd.platform.qgc_env.wt.entity.vo.SttpInfoVo; import com.yfd.platform.qgc_env.wt.entity.vo.SttpInfoVo;
import com.yfd.platform.qgc_env.wt.entity.vo.WbsbVo; import com.yfd.platform.qgc_env.wt.entity.vo.WbsbVo;
import com.yfd.platform.qgc_env.wt.entity.vo.WtBaseInfoVo; import com.yfd.platform.qgc_env.wt.entity.vo.WtBaseInfoVo;
import com.yfd.platform.qgc_env.wt.entity.vo.WtrvAmendSaveVo;
import com.yfd.platform.qgc_env.wt.entity.vo.WtrvVo; import com.yfd.platform.qgc_env.wt.entity.vo.WtrvVo;
import com.yfd.platform.qgc_env.wt.entity.vo.WtrvAmendResultVo; import com.yfd.platform.qgc_env.wt.entity.vo.WtrvAmendResultVo;
@ -27,6 +28,8 @@ public interface SdWtMonitorService {
DataSourceResult<WtrvAmendResultVo> getWtrvAmendDayList(DataSourceRequest dataSourceRequest); DataSourceResult<WtrvAmendResultVo> getWtrvAmendDayList(DataSourceRequest dataSourceRequest);
void saveWtrvAmendData(List<WtrvAmendSaveVo> amendDataList);
WtBaseInfoVo getStcdInfo(String stcd); WtBaseInfoVo getStcdInfo(String stcd);
DataSourceResult getCxDetailList(DataSourceRequest dataSourceRequest); DataSourceResult getCxDetailList(DataSourceRequest dataSourceRequest);

View File

@ -1,5 +1,6 @@
package com.yfd.platform.qgc_env.wt.service.impl; package com.yfd.platform.qgc_env.wt.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yfd.platform.common.*; import com.yfd.platform.common.*;
@ -17,13 +18,16 @@ import com.yfd.platform.qgc_env.wt.entity.vo.WtBaseInfoVo;
import com.yfd.platform.qgc_env.wt.entity.vo.WtFishVo; import com.yfd.platform.qgc_env.wt.entity.vo.WtFishVo;
import com.yfd.platform.qgc_env.wt.entity.vo.WtTreeStcdVo; import com.yfd.platform.qgc_env.wt.entity.vo.WtTreeStcdVo;
import com.yfd.platform.qgc_env.wt.entity.vo.WtrvAmendResultVo; import com.yfd.platform.qgc_env.wt.entity.vo.WtrvAmendResultVo;
import com.yfd.platform.qgc_env.wt.entity.vo.WtrvAmendSaveVo;
import com.yfd.platform.qgc_env.wt.entity.vo.WtrvVo; import com.yfd.platform.qgc_env.wt.entity.vo.WtrvVo;
import com.yfd.platform.qgc_env.wt.mapper.SdWtMonitorMapper; import com.yfd.platform.qgc_env.wt.mapper.SdWtMonitorMapper;
import com.yfd.platform.qgc_env.wt.service.SdWtMonitorService; import com.yfd.platform.qgc_env.wt.service.SdWtMonitorService;
import com.yfd.platform.utils.QgcQueryWrapperUtil; import com.yfd.platform.utils.QgcQueryWrapperUtil;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import lombok.Data; import lombok.Data;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
@ -47,6 +51,9 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService {
@Resource @Resource
private MicroservicDynamicSQLMapper microservicDynamicSQLMapper; private MicroservicDynamicSQLMapper microservicDynamicSQLMapper;
@Resource
private JdbcTemplate jdbcTemplate;
@Override @Override
public DataSourceResult getEvnmAutoMonitorList(DataSourceRequest dataSourceRequest) { public DataSourceResult getEvnmAutoMonitorList(DataSourceRequest dataSourceRequest) {
DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest(); DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest();
@ -929,6 +936,19 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService {
return result; return result;
} }
@Override
@Transactional(rollbackFor = Exception.class)
public void saveWtrvAmendData(List<WtrvAmendSaveVo> amendDataList) {
if (amendDataList == null || amendDataList.isEmpty()) {
throw new BizException("数据不能为空");
}
int batchSize = 500;
for (int i = 0; i < amendDataList.size(); i += batchSize) {
List<WtrvAmendSaveVo> subList = amendDataList.subList(i, Math.min(i + batchSize, amendDataList.size()));
mergeWtrvAmendDataBatch(subList, i);
}
}
@Override @Override
public DataSourceResult getCxDetailList(DataSourceRequest dataSourceRequest) { public DataSourceResult getCxDetailList(DataSourceRequest dataSourceRequest) {
List<DataSourceRequest.FilterDescriptor> filters = new ArrayList<>(); List<DataSourceRequest.FilterDescriptor> filters = new ArrayList<>();
@ -2089,6 +2109,62 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService {
return Collections.singletonList(value); return Collections.singletonList(value);
} }
private void mergeWtrvAmendDataBatch(List<WtrvAmendSaveVo> amendDataList, int startIndex) {
StringBuilder sql = new StringBuilder("MERGE INTO SD_WTRVAMEND_S target USING (");
List<Object> params = new ArrayList<>();
for (int i = 0; i < amendDataList.size(); i++) {
WtrvAmendSaveVo item = amendDataList.get(i);
int rowNo = startIndex + i + 1;
String stcd = item == null ? null : StrUtil.trimToNull(item.getStcd());
if (StrUtil.isBlank(stcd)) {
throw new BizException("" + rowNo + "条数据站点编码不能为空");
}
String dt = normalizeWtrvAmendDate(item.getDt());
if (StrUtil.isBlank(dt)) {
throw new BizException("" + rowNo + "条数据日期格式不正确");
}
if (i > 0) {
sql.append(" UNION ALL ");
}
sql.append("SELECT ? AS STCD, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AS DT, ? AS WT FROM DUAL");
params.add(stcd);
params.add(dt);
params.add(item.getWt());
}
sql.append(") source ON (target.STCD = source.STCD AND target.DT = source.DT) ")
.append("WHEN MATCHED THEN UPDATE SET ")
.append("target.WT = source.WT, ")
.append("target.IS_DELETED = 0, ")
.append("target.DELETE_USER = NULL, ")
.append("target.DELETE_TIME = NULL, ")
.append("target.MODIFY_TIME = SYSDATE ")
.append("WHEN NOT MATCHED THEN INSERT (ID, STCD, DT, WT, RECORD_TIME, IS_DELETED) ")
.append("VALUES (SYS_GUID(), source.STCD, source.DT, source.WT, SYSDATE, 0)");
jdbcTemplate.update(sql.toString(), params.toArray());
}
private String normalizeWtrvAmendDate(String value) {
if (StrUtil.isBlank(value)) {
return null;
}
String text = value.trim().replace('T', ' ');
try {
if (text.length() <= 10) {
return DateUtil.formatDateTime(DateUtil.parse(text.substring(0, 10), "yyyy-MM-dd").toJdkDate());
}
if (text.length() >= 19) {
return DateUtil.formatDateTime(DateUtil.parse(text.substring(0, 19), "yyyy-MM-dd HH:mm:ss").toJdkDate());
}
return DateUtil.formatDateTime(DateUtil.parse(text, "yyyy-MM-dd HH:mm").toJdkDate());
} catch (Exception ex) {
try {
return DateUtil.formatDateTime(DateUtil.parse(value.trim()).toJdkDate());
} catch (Exception ignore) {
return null;
}
}
}
private String buildSttpInfoFilterCondition(DataSourceRequest.FilterDescriptor filter, private String buildSttpInfoFilterCondition(DataSourceRequest.FilterDescriptor filter,
Map<String, Object> paramMap, Map<String, Object> paramMap,
int[] indexHolder) { int[] indexHolder) {