feat: 修改水质小时数据&删除水质小时/日/月数据
This commit is contained in:
parent
afc6935822
commit
90a074ff93
@ -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) {
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user