feat: 修改水质小时数据&删除水质小时/日/月数据

This commit is contained in:
tangwei 2026-06-12 17:37:09 +08:00
parent afc6935822
commit 90a074ff93
3 changed files with 547 additions and 0 deletions

View File

@ -2,6 +2,7 @@ package com.yfd.platform.qgc_env.wq.controller;
import com.yfd.platform.common.DataSourceRequest;
import com.yfd.platform.config.ResponseResult;
import com.yfd.platform.qgc_base.entity.vo.BatchDeleteAo;
import com.yfd.platform.qgc_env.wq.service.EnvWqDataService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
@ -14,6 +15,8 @@ import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
@RestController
@RequestMapping("/wq")
@Tag(name = "水质统计分析")
@ -54,6 +57,20 @@ public class EnvWqDataController {
return ResponseResult.successData(envWqDataService.getDrtpKendoListCust(dataSourceRequest));
}
@PostMapping("/updateWqRsData")
@Operation(summary = "修改水质小时数据")
public ResponseResult updateWqRsData(@RequestBody Map<String, Object> updateData) {
envWqDataService.updateWqRsData(updateData);
return ResponseResult.success();
}
@PostMapping("/removeKendoByIds")
@Operation(summary = "删除水质小时/日/月数据")
public ResponseResult removeKendoByIds(@RequestBody BatchDeleteAo batchDeleteAo) {
envWqDataService.removeKendoByIds(batchDeleteAo);
return ResponseResult.success();
}
@PostMapping("/GetStbprpYsByStcd")
@Operation(summary = "水质监测数据查询")
public ResponseResult GetStbprpYsByStcd(@RequestBody DataSourceRequest dataSourceRequest) {

View File

@ -2,8 +2,11 @@ package com.yfd.platform.qgc_env.wq.service;
import com.yfd.platform.common.DataSourceRequest;
import com.yfd.platform.common.DataSourceResult;
import com.yfd.platform.qgc_base.entity.vo.BatchDeleteAo;
import com.yfd.platform.qgc_env.wq.entity.vo.WqBaseInfoVo;
import java.util.Map;
public interface EnvWqDataService {
DataSourceResult processKendoList(DataSourceRequest dataSourceRequest);
@ -35,4 +38,8 @@ public interface EnvWqDataService {
DataSourceResult getStTbYsBVoKendoListCust(String stcd, String tbCode, String startTime, String endTime);
DataSourceResult getStTbYsBVoKendoListCust(DataSourceRequest dataSourceRequest);
boolean updateWqRsData(Map<String, Object> updateData);
boolean removeKendoByIds(BatchDeleteAo batchDeleteAo);
}

View File

@ -13,6 +13,8 @@ import com.yfd.platform.common.GroupingInfo;
import com.yfd.platform.common.MicroservicDynamicSQLMapper;
import com.yfd.platform.common.PageInfo;
import com.yfd.platform.common.exception.BizException;
import com.yfd.platform.qgc_base.entity.vo.BatchDeleteAo;
import com.yfd.platform.qgc_base.entity.vo.DataParam;
import com.yfd.platform.qgc_env.wq.entity.vo.*;
import com.yfd.platform.qgc_env.wq.service.EnvWqDataService;
import com.yfd.platform.qgc_env.wt.entity.vo.WbsbVo;
@ -22,13 +24,17 @@ import com.yfd.platform.utils.RequestHolder;
import com.yfd.platform.utils.SecurityUtils;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.jdbc.core.JdbcTemplate;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@ -41,6 +47,9 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
@Resource
private MicroservicDynamicSQLMapper microservicDynamicSQLMapper;
@Resource
private JdbcTemplate jdbcTemplate;
@Override
public DataSourceResult processKendoList(DataSourceRequest dataSourceRequest) {
boolean calculated = CommonConstant.CALCULATE_SUCCESS.equals(
@ -3637,4 +3646,518 @@ public class EnvWqDataServiceImpl implements EnvWqDataService {
}
return " ORDER BY " + String.join(", ", orders);
}
@Override
@Transactional(rollbackFor = Exception.class)
public boolean updateWqRsData(Map<String, Object> updateData) {
if (updateData == null || updateData.isEmpty()) {
return true;
}
updateWqHourData(updateData);
updateWqTargetIfNeeded(updateData);
String stcd = asString(updateData.get("stcd"));
String tm = asString(updateData.get("tm"));
if (StrUtil.isNotBlank(stcd) && StrUtil.isNotBlank(tm) && tm.length() >= 10) {
String dateStr = tm.substring(0, 10);
statisticsDayDataFromHour(stcd, dateStr, dateStr);
String[] ym = dateStr.substring(0, 7).split("-");
if (ym.length == 2) {
Integer year = Integer.parseInt(ym[0]);
Integer month = Integer.parseInt(ym[1]);
String startDate = year + "-" + String.format("%02d", month) + "-01";
String endDate = getMonthEndDate(year, month);
statisticsMonthDataFromDay(stcd, startDate, endDate);
}
}
return true;
}
@Override
@Transactional(rollbackFor = Exception.class)
public boolean removeKendoByIds(BatchDeleteAo batchDeleteAo) {
List<DataParam> dataList = batchDeleteAo == null ? null : batchDeleteAo.getDataList();
if (CollUtil.isEmpty(dataList)) {
return true;
}
String dataType = StrUtil.blankToDefault(batchDeleteAo.getDataType(), "").toUpperCase();
int batchSize = 500;
for (int i = 0; i < dataList.size(); i += batchSize) {
List<DataParam> subList = dataList.subList(i, Math.min(i + batchSize, dataList.size()));
if ("MON".equals(dataType)) {
softDeleteWqMonthData(subList);
}
if ("DATE".equals(dataType)) {
softDeleteWqDayData(subList);
}
if ("TIME".equals(dataType)) {
deleteWqHourData(subList);
Map<String, String[]> dateRangeMap = new HashMap<>();
Map<String, String[]> monthRangeMap = new HashMap<>();
for (DataParam param : subList) {
String stcd = param == null ? null : param.getId();
String tm = param == null ? null : param.getTm();
if (StrUtil.isBlank(stcd) || StrUtil.isBlank(tm) || tm.length() < 10) {
continue;
}
String dateStr = tm.substring(0, 10);
dateRangeMap.compute(stcd, (key, range) -> {
if (range == null) {
return new String[]{dateStr, dateStr};
}
if (dateStr.compareTo(range[0]) < 0) {
range[0] = dateStr;
}
if (dateStr.compareTo(range[1]) > 0) {
range[1] = dateStr;
}
return range;
});
String[] ym = tm.substring(0, 7).split("-");
if (ym.length == 2) {
Integer year = Integer.parseInt(ym[0]);
Integer month = Integer.parseInt(ym[1]);
String monthStart = year + "-" + String.format("%02d", month) + "-01";
String monthEnd = getMonthEndDate(year, month);
monthRangeMap.putIfAbsent(stcd + "_" + year + "_" + month,
new String[]{stcd, monthStart, monthEnd});
}
}
for (Map.Entry<String, String[]> entry : dateRangeMap.entrySet()) {
statisticsDayDataFromHour(entry.getKey(), entry.getValue()[0], entry.getValue()[1]);
}
Set<String> processedMonths = new HashSet<>();
for (String[] values : monthRangeMap.values()) {
String monthKey = values[0] + "_" + values[1];
if (processedMonths.add(monthKey)) {
statisticsMonthDataFromDay(values[0], values[1], values[2]);
}
}
}
}
return true;
}
private void updateWqHourData(Map<String, Object> updateData) {
LinkedHashMap<String, String> columnMap = new LinkedHashMap<>();
columnMap.put("wtmp", "WTMP");
columnMap.put("ph", "PH");
columnMap.put("dox", "DOX");
columnMap.put("codmn", "CODMN");
columnMap.put("codcr", "CODCR");
columnMap.put("bod5", "BOD5");
columnMap.put("nh3n", "NH3N");
columnMap.put("tp", "TP");
columnMap.put("tn", "TN");
columnMap.put("cu", "CU");
columnMap.put("zn", "ZN");
columnMap.put("f", "F");
columnMap.put("se", "SE");
columnMap.put("ars", "ARS");
columnMap.put("hg", "HG");
columnMap.put("cd", "CD");
columnMap.put("cr6", "CR6");
columnMap.put("pb", "PB");
columnMap.put("cn", "CN");
columnMap.put("vlph", "VLPH");
columnMap.put("oil", "OIL");
columnMap.put("las", "LAS");
columnMap.put("s2", "S2");
columnMap.put("fcg", "FCG");
columnMap.put("cl", "CL");
columnMap.put("so4", "SO4");
columnMap.put("no3", "NO3");
columnMap.put("thrd", "THRD");
columnMap.put("cond", "COND");
columnMap.put("fe", "FE");
columnMap.put("mn", "MN");
columnMap.put("al", "AL");
columnMap.put("chla", "CHLA");
columnMap.put("clarity", "CLARITY");
columnMap.put("tu", "TU");
columnMap.put("cyano", "CYANO");
columnMap.put("wqgrd", "WQGRD");
columnMap.put("sfdb", "SFDB");
columnMap.put("wqSfdbhnYs", "WQ_SFDBHN_YS");
List<String> setClauses = new ArrayList<>();
List<Object> params = new ArrayList<>();
for (Map.Entry<String, String> entry : columnMap.entrySet()) {
if (updateData.containsKey(entry.getKey())) {
setClauses.add(entry.getValue() + " = ?");
params.add(updateData.get(entry.getKey()));
}
}
if (setClauses.isEmpty()) {
return;
}
String stcd = asString(updateData.get("stcd"));
String tm = asString(updateData.get("tm"));
if (StrUtil.isBlank(stcd) || StrUtil.isBlank(tm)) {
throw new BizException("站点编码和时间不能为空");
}
String sql = "UPDATE SD_WQ_R SET " + String.join(", ", setClauses)
+ " WHERE STCD = ? AND TM = TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')";
params.add(stcd);
params.add(tm);
jdbcTemplate.update(sql, params.toArray());
}
private void updateWqTargetIfNeeded(Map<String, Object> updateData) {
if (!updateData.containsKey("wwqtg")) {
return;
}
String stcd = asString(updateData.get("stcd"));
if (StrUtil.isBlank(stcd)) {
return;
}
jdbcTemplate.update(
"UPDATE SD_WQ_B_H SET WWQTG = ?, MODIFY_USER = ?, MODIFY_TIME = SYSDATE " +
"WHERE STCD = ? AND NVL(IS_DELETED, 0) = 0",
updateData.get("wwqtg"),
SecurityUtils.getUserId(),
stcd
);
}
private void softDeleteWqMonthData(List<DataParam> dataParamList) {
if (CollUtil.isEmpty(dataParamList)) {
return;
}
StringBuilder sql = new StringBuilder("MERGE INTO SD_WQDRTP_S target USING (");
List<Object> params = new ArrayList<>();
for (int i = 0; i < dataParamList.size(); i++) {
if (i > 0) {
sql.append(" UNION ALL ");
}
sql.append("SELECT ? AS STCD, ? AS DRTP, ? AS YEAR, ? AS MONTH FROM DUAL");
DataParam item = dataParamList.get(i);
params.add(item == null ? null : item.getId());
params.add(item == null ? null : item.getDrtp());
params.add(item == null ? null : item.getYear());
params.add(item == null ? null : item.getMonth());
}
sql.append(") source ON (target.STCD = source.STCD AND target.DRTP = source.DRTP ")
.append("AND target.YEAR = source.YEAR AND target.MONTH = source.MONTH) ")
.append("WHEN MATCHED THEN UPDATE SET target.IS_DELETED = 1, target.DELETE_TIME = SYSDATE");
jdbcTemplate.update(sql.toString(), params.toArray());
}
private void softDeleteWqDayData(List<DataParam> dataParamList) {
if (CollUtil.isEmpty(dataParamList)) {
return;
}
StringBuilder sql = new StringBuilder("MERGE INTO SD_WQDAY_S target USING (");
List<Object> params = new ArrayList<>();
for (int i = 0; i < dataParamList.size(); i++) {
if (i > 0) {
sql.append(" UNION ALL ");
}
sql.append("SELECT ? AS STCD, TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS') AS DT FROM DUAL");
DataParam item = dataParamList.get(i);
params.add(item == null ? null : item.getId());
params.add(item == null ? null : item.getDt());
}
sql.append(") source ON (target.STCD = source.STCD AND target.DT = source.DT) ")
.append("WHEN MATCHED THEN UPDATE SET target.IS_DELETED = 1, target.DELETE_TIME = SYSDATE");
jdbcTemplate.update(sql.toString(), params.toArray());
}
private void deleteWqHourData(List<DataParam> dataParamList) {
if (CollUtil.isEmpty(dataParamList)) {
return;
}
StringBuilder sql = new StringBuilder("DELETE FROM SD_WQ_R WHERE ");
List<Object> params = new ArrayList<>();
for (int i = 0; i < dataParamList.size(); i++) {
if (i > 0) {
sql.append(" OR ");
}
sql.append("(STCD = ? AND TM = TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS'))");
DataParam item = dataParamList.get(i);
params.add(item == null ? null : item.getId());
params.add(item == null ? null : item.getTm());
}
jdbcTemplate.update(sql.toString(), params.toArray());
}
private String getMonthEndDate(Integer year, Integer month) {
Calendar calendar = Calendar.getInstance();
calendar.set(year, month - 1, 1);
int lastDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
return year + "-" + String.format("%02d", month) + "-" + String.format("%02d", lastDay);
}
private void statisticsDayDataFromHour(String stcd, String startDate, String endDate) {
String deleteSql = "DELETE FROM SD_WQDAY_S T " +
"WHERE T.STCD = ? " +
"AND T.DT BETWEEN TO_DATE(?, 'YYYY-MM-DD') " +
"AND TO_DATE(?, 'YYYY-MM-DD') " +
"AND NOT EXISTS ( " +
"SELECT 1 FROM SD_WQ_R S " +
"WHERE S.STCD = T.STCD " +
"AND TRUNC(S.TM) = T.DT " +
"AND S.TM >= TO_DATE(? || ' 00:00:00', 'YYYY-MM-DD HH24:MI:SS') " +
"AND S.TM <= TO_DATE(? || ' 23:59:59', 'YYYY-MM-DD HH24:MI:SS') " +
"AND S.IS_DELETED = 0)";
jdbcTemplate.update(deleteSql, stcd, startDate, endDate, startDate, endDate);
String mergeSql = "MERGE INTO SD_WQDAY_S T " +
"USING ( " +
" SELECT " +
" STCD, " +
" TRUNC(TM) AS DT, " +
" AVG(WTMP) AS WTMP, " +
" AVG(PH) AS PH, " +
" AVG(DOX) AS DOX, " +
" AVG(CODMN) AS CODMN, " +
" AVG(CODCR) AS CODCR, " +
" AVG(BOD5) AS BOD5, " +
" AVG(NH3N) AS NH3N, " +
" AVG(TP) AS TP, " +
" AVG(TN) AS TN, " +
" AVG(CU) AS CU, " +
" AVG(ZN) AS ZN, " +
" AVG(F) AS F, " +
" AVG(SE) AS SE, " +
" AVG(ARS) AS ARS, " +
" AVG(HG) AS HG, " +
" AVG(CD) AS CD, " +
" AVG(CR6) AS CR6, " +
" AVG(PB) AS PB, " +
" AVG(CN) AS CN, " +
" AVG(VLPH) AS VLPH, " +
" AVG(OIL) AS OIL, " +
" AVG(LAS) AS LAS, " +
" AVG(S2) AS S2, " +
" AVG(FCG) AS FCG, " +
" AVG(CL) AS CL, " +
" AVG(SO4) AS SO4, " +
" AVG(NO3) AS NO3, " +
" AVG(THRD) AS THRD, " +
" AVG(COND) AS COND, " +
" AVG(FE) AS FE, " +
" AVG(MN) AS MN, " +
" AVG(AL) AS AL, " +
" AVG(CHLA) AS CHLA, " +
" AVG(CLARITY) AS CLARITY, " +
" AVG(TU) AS TU, " +
" AVG(CYANO) AS CYANO, " +
" AVG(SS) AS SS, " +
" AVG(NO2) AS NO2, " +
" MIN(WQGRD) AS WQGRD, " +
" MIN(SFDB) AS SFDB " +
" FROM SD_WQ_R " +
" WHERE STCD = ? " +
" AND TM >= TO_DATE(? || ' 00:00:00', 'YYYY-MM-DD HH24:MI:SS') " +
" AND TM <= TO_DATE(? || ' 23:59:59', 'YYYY-MM-DD HH24:MI:SS') " +
" AND IS_DELETED = 0 " +
" GROUP BY STCD, TRUNC(TM) " +
") S " +
"ON (T.STCD = S.STCD AND T.DT = S.DT) " +
"WHEN MATCHED THEN UPDATE SET " +
" T.WTMP = S.WTMP, " +
" T.PH = S.PH, " +
" T.DOX = S.DOX, " +
" T.CODMN = S.CODMN, " +
" T.CODCR = S.CODCR, " +
" T.BOD5 = S.BOD5, " +
" T.NH3N = S.NH3N, " +
" T.TP = S.TP, " +
" T.TN = S.TN, " +
" T.CU = S.CU, " +
" T.ZN = S.ZN, " +
" T.F = S.F, " +
" T.SE = S.SE, " +
" T.ARS = S.ARS, " +
" T.HG = S.HG, " +
" T.CD = S.CD, " +
" T.CR6 = S.CR6, " +
" T.PB = S.PB, " +
" T.CN = S.CN, " +
" T.VLPH = S.VLPH, " +
" T.OIL = S.OIL, " +
" T.LAS = S.LAS, " +
" T.S2 = S.S2, " +
" T.FCG = S.FCG, " +
" T.CL = S.CL, " +
" T.SO4 = S.SO4, " +
" T.NO3 = S.NO3, " +
" T.THRD = S.THRD, " +
" T.COND = S.COND, " +
" T.FE = S.FE, " +
" T.MN = S.MN, " +
" T.AL = S.AL, " +
" T.CHLA = S.CHLA, " +
" T.CLARITY = S.CLARITY, " +
" T.TU = S.TU, " +
" T.CYANO = S.CYANO, " +
" T.SS = S.SS, " +
" T.NO2 = S.NO2, " +
" T.WQGRD = S.WQGRD, " +
" T.SFDB = S.SFDB, " +
" T.IS_DELETED = 0, " +
" T.DELETE_USER = NULL, " +
" T.DELETE_TIME = NULL, " +
" T.MODIFY_USER = NULL, " +
" T.MODIFY_TIME = SYSDATE " +
"WHEN NOT MATCHED THEN INSERT ( " +
" ID, STCD, DT, WQGRD, WTMP, PH, DOX, CODMN, CODCR, BOD5, " +
" NH3N, TP, TN, CU, ZN, F, SE, ARS, HG, CD, CR6, PB, CN, VLPH, " +
" OIL, LAS, S2, FCG, CL, SO4, NO3, THRD, COND, FE, MN, AL, CHLA, " +
" CLARITY, TU, CYANO, SFDB, SS, NO2, " +
" RECORD_TIME, IS_DELETED " +
") VALUES ( " +
" SYS_GUID(), S.STCD, S.DT, S.WQGRD, S.WTMP, S.PH, S.DOX, S.CODMN, S.CODCR, S.BOD5, " +
" S.NH3N, S.TP, S.TN, S.CU, S.ZN, S.F, S.SE, S.ARS, S.HG, S.CD, S.CR6, S.PB, S.CN, S.VLPH, " +
" S.OIL, S.LAS, S.S2, S.FCG, S.CL, S.SO4, S.NO3, S.THRD, S.COND, S.FE, S.MN, S.AL, S.CHLA, " +
" S.CLARITY, S.TU, S.CYANO, S.SFDB, S.SS, S.NO2, " +
" SYSDATE, 0 " +
")";
jdbcTemplate.update(mergeSql, stcd, startDate, endDate);
}
private void statisticsMonthDataFromDay(String stcd, String startDate, String endDate) {
Integer startYearInt = Integer.parseInt(startDate.substring(0, 4));
Integer startMonthInt = Integer.parseInt(startDate.substring(5, 7));
Integer endMonthInt = Integer.parseInt(endDate.substring(5, 7));
String deleteSql = "DELETE FROM SD_WQDRTP_S T " +
"WHERE T.DRTP = 'MON' " +
"AND T.STCD = ? " +
"AND T.YEAR = ? " +
"AND T.MONTH BETWEEN ? AND ? " +
"AND NOT EXISTS ( " +
" SELECT 1 FROM SD_WQDAY_S D " +
" WHERE D.STCD = T.STCD " +
" AND D.IS_DELETED = 0 " +
" AND EXTRACT(YEAR FROM D.DT) = T.YEAR " +
" AND EXTRACT(MONTH FROM D.DT) = T.MONTH " +
" AND D.DT >= TO_DATE(?, 'YYYY-MM-DD') " +
" AND D.DT < TO_DATE(?, 'YYYY-MM-DD') + 1)";
jdbcTemplate.update(deleteSql, stcd, startYearInt, startMonthInt, endMonthInt, startDate, endDate);
String mergeSql = "MERGE INTO SD_WQDRTP_S T " +
"USING ( " +
" SELECT " +
" STCD, " +
" EXTRACT(YEAR FROM DT) AS YEAR, " +
" EXTRACT(MONTH FROM DT) AS MONTH, " +
" 'MON' AS DRTP, " +
" AVG(WTMP) AS WTMP, " +
" AVG(PH) AS PH, " +
" AVG(DOX) AS DOX, " +
" AVG(CODMN) AS CODMN, " +
" AVG(CODCR) AS CODCR, " +
" AVG(BOD5) AS BOD5, " +
" AVG(NH3N) AS NH3N, " +
" AVG(TP) AS TP, " +
" AVG(TN) AS TN, " +
" AVG(CU) AS CU, " +
" AVG(ZN) AS ZN, " +
" AVG(F) AS F, " +
" AVG(SE) AS SE, " +
" AVG(ARS) AS ARS, " +
" AVG(HG) AS HG, " +
" AVG(CD) AS CD, " +
" AVG(CR6) AS CR6, " +
" AVG(PB) AS PB, " +
" AVG(CN) AS CN, " +
" AVG(VLPH) AS VLPH, " +
" AVG(OIL) AS OIL, " +
" AVG(LAS) AS LAS, " +
" AVG(S2) AS S2, " +
" AVG(FCG) AS FCG, " +
" AVG(CL) AS CL, " +
" AVG(SO4) AS SO4, " +
" AVG(NO3) AS NO3, " +
" AVG(THRD) AS THRD, " +
" AVG(COND) AS COND, " +
" AVG(FE) AS FE, " +
" AVG(MN) AS MN, " +
" AVG(AL) AS AL, " +
" AVG(CHLA) AS CHLA, " +
" AVG(CLARITY) AS CLARITY, " +
" AVG(TU) AS TU, " +
" AVG(CYANO) AS CYANO, " +
" AVG(SFDB) AS SFDB, " +
" AVG(SS) AS SS, " +
" AVG(NO2) AS NO2, " +
" MIN(WQGRD) AS WQGRD " +
" FROM SD_WQDAY_S " +
" WHERE STCD = ? " +
" AND DT >= TO_DATE(?, 'YYYY-MM-DD') " +
" AND DT < TO_DATE(?, 'YYYY-MM-DD') + 1 " +
" AND IS_DELETED = 0 " +
" GROUP BY STCD, EXTRACT(YEAR FROM DT), EXTRACT(MONTH FROM DT) " +
") S " +
"ON (T.STCD = S.STCD AND T.DRTP = 'MON' AND T.YEAR = S.YEAR AND T.MONTH = S.MONTH) " +
"WHEN MATCHED THEN UPDATE SET " +
" T.WQGRD = S.WQGRD, " +
" T.WTMP = S.WTMP, " +
" T.PH = S.PH, " +
" T.DOX = S.DOX, " +
" T.CODMN = S.CODMN, " +
" T.CODCR = S.CODCR, " +
" T.BOD5 = S.BOD5, " +
" T.NH3N = S.NH3N, " +
" T.TP = S.TP, " +
" T.TN = S.TN, " +
" T.CU = S.CU, " +
" T.ZN = S.ZN, " +
" T.F = S.F, " +
" T.SE = S.SE, " +
" T.ARS = S.ARS, " +
" T.HG = S.HG, " +
" T.CD = S.CD, " +
" T.CR6 = S.CR6, " +
" T.PB = S.PB, " +
" T.CN = S.CN, " +
" T.VLPH = S.VLPH, " +
" T.OIL = S.OIL, " +
" T.LAS = S.LAS, " +
" T.S2 = S.S2, " +
" T.FCG = S.FCG, " +
" T.CL = S.CL, " +
" T.SO4 = S.SO4, " +
" T.NO3 = S.NO3, " +
" T.THRD = S.THRD, " +
" T.COND = S.COND, " +
" T.FE = S.FE, " +
" T.MN = S.MN, " +
" T.AL = S.AL, " +
" T.CHLA = S.CHLA, " +
" T.CLARITY = S.CLARITY, " +
" T.TU = S.TU, " +
" T.CYANO = S.CYANO, " +
" T.SFDB = S.SFDB, " +
" T.SS = S.SS, " +
" T.NO2 = S.NO2, " +
" T.IS_DELETED = 0, " +
" T.DELETE_TIME = NULL, " +
" T.MODIFY_TIME = SYSDATE, " +
" T.TM = SYSDATE " +
"WHEN NOT MATCHED THEN INSERT ( " +
" ID, STCD, DRTP, YEAR, MONTH, WQGRD, " +
" WTMP, PH, DOX, CODMN, CODCR, BOD5, NH3N, TP, TN, " +
" CU, ZN, F, SE, ARS, HG, CD, CR6, PB, CN, VLPH, " +
" OIL, LAS, S2, FCG, CL, SO4, NO3, THRD, COND, " +
" FE, MN, AL, CHLA, CLARITY, TU, CYANO, SFDB, SS, NO2, " +
" RECORD_TIME, IS_DELETED, TM " +
") VALUES ( " +
" SYS_GUID(), S.STCD, 'MON', S.YEAR, S.MONTH, S.WQGRD, " +
" S.WTMP, S.PH, S.DOX, S.CODMN, S.CODCR, S.BOD5, S.NH3N, S.TP, S.TN, " +
" S.CU, S.ZN, S.F, S.SE, S.ARS, S.HG, S.CD, S.CR6, S.PB, S.CN, S.VLPH, " +
" S.OIL, S.LAS, S.S2, S.FCG, S.CL, S.SO4, S.NO3, S.THRD, S.COND, " +
" S.FE, S.MN, S.AL, S.CHLA, S.CLARITY, S.TU, S.CYANO, S.SFDB, S.SS, S.NO2, " +
" SYSDATE, 0, SYSDATE " +
")";
jdbcTemplate.update(mergeSql, stcd, startDate, endDate);
}
}