feat: 删除流量站小时/日/月数据&修改流量站小时数据

This commit is contained in:
tangwei 2026-06-15 14:18:48 +08:00
parent 45467b37d6
commit fa7b9b8e69
8 changed files with 379 additions and 15 deletions

View File

@ -141,8 +141,9 @@ public class FpBuildServiceImpl implements FpBuildService {
.append("fp.DTIN_TM AS dtinTm, ") .append("fp.DTIN_TM AS dtinTm, ")
.append("fp.BLDSTT_CODE AS bldsttCcode, ") .append("fp.BLDSTT_CODE AS bldsttCcode, ")
.append("CASE ") .append("CASE ")
.append("WHEN fp.BLDSTT_CODE IN (1, 10, 11) THEN '已建' ") .append("WHEN fp.BLDSTT_CODE = 0 THEN '未建/规划' ")
.append("WHEN fp.BLDSTT_CODE IN (2, 7, 8) THEN '在建' ") .append("WHEN fp.BLDSTT_CODE = 1 THEN '在建' ")
.append("WHEN fp.BLDSTT_CODE = 2 THEN '已建' ")
.append("ELSE '未建/规划' END AS bldsttCcodeName, ") .append("ELSE '未建/规划' END AS bldsttCcodeName, ")
.append("fp.STDSDT AS stdsdt, ") .append("fp.STDSDT AS stdsdt, ")
.append("fp.PSTSTDT AS pststdt, ") .append("fp.PSTSTDT AS pststdt, ")
@ -462,7 +463,12 @@ public class FpBuildServiceImpl implements FpBuildService {
columnMap.put("dtinName", "CASE WHEN NVL(fp.DTIN, 0) = 1 THEN '已接入' ELSE '未接入' END"); columnMap.put("dtinName", "CASE WHEN NVL(fp.DTIN, 0) = 1 THEN '已接入' ELSE '未接入' END");
columnMap.put("dtinTm", "fp.DTIN_TM"); columnMap.put("dtinTm", "fp.DTIN_TM");
columnMap.put("bldsttCcode", "fp.BLDSTT_CODE"); columnMap.put("bldsttCcode", "fp.BLDSTT_CODE");
columnMap.put("bldsttCcodeName", "CASE WHEN fp.BLDSTT_CODE IN (1, 10, 11) THEN '已建' WHEN fp.BLDSTT_CODE IN (2, 7, 8) THEN '在建' ELSE '未建/规划' END"); columnMap.put("bldsttCcodeName",
"CASE WHEN fp.BLDSTT_CODE = 0 THEN '未建/规划' " +
"WHEN fp.BLDSTT_CODE = 1 THEN '在建' " +
"WHEN fp.BLDSTT_CODE = 2 THEN '已建' " +
"ELSE '未知' END");
// columnMap.put("bldsttCcodeName", "CASE WHEN fp.BLDSTT_CODE IN (1, 10, 11) THEN '已建' WHEN fp.BLDSTT_CODE IN (2, 7, 8) THEN '在建' ELSE '未建/规划' END");
columnMap.put("stdsdt", "fp.STDSDT"); columnMap.put("stdsdt", "fp.STDSDT");
columnMap.put("pststdt", "fp.PSTSTDT"); columnMap.put("pststdt", "fp.PSTSTDT");
columnMap.put("pesstdt", "fp.PESSTDT"); columnMap.put("pesstdt", "fp.PESSTDT");

View File

@ -787,8 +787,10 @@ public class VpConstructionServiceImpl implements VpConstructionService {
"vb.HBRVCD AS hbrvcd, " + "vb.HBRVCD AS hbrvcd, " +
"hbrv.HBRVNM AS hbrvcdName, " + "hbrv.HBRVNM AS hbrvcdName, " +
"TO_CHAR(vb.BLDSTT_CODE) AS bldsttCcode, " + "TO_CHAR(vb.BLDSTT_CODE) AS bldsttCcode, " +
"CASE WHEN vb.BLDSTT_CODE IN (1, 10, 11) THEN '已建' " + "CASE WHEN vb.BLDSTT_CODE = 1 THEN '在建' " +
"WHEN vb.BLDSTT_CODE IN (2, 7, 8) THEN '在建' ELSE '未建/规划' END AS bldsttCcodeName, " + "WHEN vb.BLDSTT_CODE = 2 THEN '已建' ELSE '未建/规划' END AS bldsttCcodeName, " +
// "CASE WHEN vb.BLDSTT_CODE IN (1, 10, 11) THEN '已建' " +
// "WHEN vb.BLDSTT_CODE IN (2, 7, 8) THEN '在建' ELSE '未建/规划' END AS bldsttCcodeName, " +
"va.TETP AS tetp, " + "va.TETP AS tetp, " +
"va.TECNT AS tecnt, " + "va.TECNT AS tecnt, " +
"va.STLC AS stlc, " + "va.STLC AS stlc, " +
@ -989,7 +991,12 @@ public class VpConstructionServiceImpl implements VpConstructionService {
columnMap.put("hbrvcdName", "hbrv.HBRVNM"); columnMap.put("hbrvcdName", "hbrv.HBRVNM");
columnMap.put("bldsttCcode", "vb.BLDSTT_CODE"); columnMap.put("bldsttCcode", "vb.BLDSTT_CODE");
columnMap.put("bldsttCcodeName", columnMap.put("bldsttCcodeName",
"CASE WHEN vb.BLDSTT_CODE IN (1, 10, 11) THEN '已建' WHEN vb.BLDSTT_CODE IN (2, 7, 8) THEN '在建' ELSE '未建/规划' END"); "CASE WHEN vb.BLDSTT_CODE = 0 THEN '未建/规划' " +
"WHEN vb.BLDSTT_CODE = 1 THEN '在建' " +
"WHEN vb.BLDSTT_CODE = 2 THEN '已建' " +
"ELSE '未知' END");
// columnMap.put("bldsttCcodeName",
// "CASE WHEN vb.BLDSTT_CODE IN (1, 10, 11) THEN '已建' WHEN vb.BLDSTT_CODE IN (2, 7, 8) THEN '在建' ELSE '未建/规划' END");
columnMap.put("tetp", "va.TETP"); columnMap.put("tetp", "va.TETP");
columnMap.put("tecnt", "va.TECNT"); columnMap.put("tecnt", "va.TECNT");
columnMap.put("stlc", "va.STLC"); columnMap.put("stlc", "va.STLC");
@ -1717,7 +1724,12 @@ public class VpConstructionServiceImpl implements VpConstructionService {
columnMap.put("bldstt", "vp.BLPRD"); columnMap.put("bldstt", "vp.BLPRD");
columnMap.put("bldsttCcode", "vp.BLDSTT_CODE"); columnMap.put("bldsttCcode", "vp.BLDSTT_CODE");
columnMap.put("bldsttName", "CASE WHEN vp.BLDSTT_CODE IN (1, 10, 11) THEN '已建' WHEN vp.BLDSTT_CODE IN (2, 7, 8) THEN '在建' ELSE '未建/规划' END"); columnMap.put("bldsttName", "CASE WHEN vp.BLDSTT_CODE IN (1, 10, 11) THEN '已建' WHEN vp.BLDSTT_CODE IN (2, 7, 8) THEN '在建' ELSE '未建/规划' END");
columnMap.put("bldsttCcodeName", "CASE WHEN vp.BLDSTT_CODE IN (1, 10, 11) THEN '已建' WHEN vp.BLDSTT_CODE IN (2, 7, 8) THEN '在建' ELSE '未建/规划' END"); // columnMap.put("bldsttCcodeName", "CASE WHEN vp.BLDSTT_CODE IN (1, 10, 11) THEN '已建' WHEN vp.BLDSTT_CODE IN (2, 7, 8) THEN '在建' ELSE '未建/规划' END");
columnMap.put("bldsttCcodeName",
"CASE WHEN vp.BLDSTT_CODE = 0 THEN '未建/规划' " +
"WHEN vp.BLDSTT_CODE = 1 THEN '在建' " +
"WHEN vp.BLDSTT_CODE = 2 THEN '已建' " +
"ELSE '未知' END");
columnMap.put("stdsdt", "vp.STDSDT"); columnMap.put("stdsdt", "vp.STDSDT");
columnMap.put("ststdt", "vp.STDSDT"); columnMap.put("ststdt", "vp.STDSDT");
columnMap.put("pststdt", "vp.PSTSTDT"); columnMap.put("pststdt", "vp.PSTSTDT");

View File

@ -211,7 +211,12 @@ public class VdMonitorServiceImpl implements VdMonitorService {
selectMap.put("dtinName", "CASE WHEN NVL(t.dtin, 0) = 1 THEN '已接入' ELSE '未接入' END AS dtinName"); selectMap.put("dtinName", "CASE WHEN NVL(t.dtin, 0) = 1 THEN '已接入' ELSE '未接入' END AS dtinName");
selectMap.put("usfl", "t.usfl AS usfl"); selectMap.put("usfl", "t.usfl AS usfl");
selectMap.put("bldsttCcode", "t.bldsttCcode AS bldsttCcode"); selectMap.put("bldsttCcode", "t.bldsttCcode AS bldsttCcode");
selectMap.put("bldsttCcodeName", "CASE WHEN t.bldsttCcode IN (1, 10, 11) THEN '已建' WHEN t.bldsttCcode IN (2, 7, 8) THEN '在建' ELSE '未建/规划' END AS bldsttCcodeName"); selectMap.put("bldsttCcodeName",
"CASE WHEN t.bldsttCcode = 0 THEN '未建/规划' " +
"WHEN t.bldsttCcode = 1 THEN '在建' " +
"WHEN t.bldsttCcode = 2 THEN '已建' " +
"ELSE '未知' END");
// selectMap.put("bldsttCcodeName", "CASE WHEN t.bldsttCcode IN (1, 10, 11) THEN '已建' WHEN t.bldsttCcode IN (2, 7, 8) THEN '在建' ELSE '未建/规划' END AS bldsttCcodeName");
selectMap.put("stindx", "t.stindx AS stindx"); selectMap.put("stindx", "t.stindx AS stindx");
selectMap.put("introduce", "t.introduce AS introduce"); selectMap.put("introduce", "t.introduce AS introduce");
selectMap.put("logo", "t.logo AS logo"); selectMap.put("logo", "t.logo AS logo");

View File

@ -104,7 +104,7 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService {
"t.JCDT AS jcdt, " + "t.JCDT AS jcdt, " +
"t.WDDT AS wddt, " + "t.WDDT AS wddt, " +
"t.BLDSTT_CODE AS bldsttCode, " + "t.BLDSTT_CODE AS bldsttCode, " +
"CASE WHEN t.BLDSTT_CODE IN ('1', '10', '11') THEN '已建' WHEN t.BLDSTT_CODE IN ('2', '7', '8') THEN '在建' ELSE '未建/规划' END AS bldsttCcodeName, "+ "CASE WHEN t.BLDSTT_CODE =2 THEN '已建' WHEN t.BLDSTT_CODE =1 THEN '在建' ELSE '未建/规划' END AS bldsttCcodeName, "+
"t.INV AS inv, " + "t.INV AS inv, " +
"t.INVINMN AS invinmn, " + "t.INVINMN AS invinmn, " +
"t.INTRODUCE AS introduce, " + "t.INTRODUCE AS introduce, " +
@ -2003,7 +2003,12 @@ public class SdWtMonitorServiceImpl implements SdWtMonitorService {
columnMap.put("stcd", "wt.STCD AS stcd"); columnMap.put("stcd", "wt.STCD AS stcd");
columnMap.put("fhstcd", "wt.FHSTCD AS fhstcd"); columnMap.put("fhstcd", "wt.FHSTCD AS fhstcd");
columnMap.put("rstcd", "wt.RSTCD AS rstcd"); columnMap.put("rstcd", "wt.RSTCD AS rstcd");
columnMap.put("bldsttCcodeName", "CASE WHEN wt.BLDSTT_CODE IN ('1', '10', '11') THEN '已建' WHEN wt.BLDSTT_CODE IN ('2', '7', '8') THEN '在建' ELSE '未建/规划' END AS bldsttCcodeName"); // columnMap.put("bldsttCcodeName", "CASE WHEN wt.BLDSTT_CODE IN ('1', '10', '11') THEN '已建' WHEN wt.BLDSTT_CODE IN ('2', '7', '8') THEN '在建' ELSE '未建/规划' END AS bldsttCcodeName");
columnMap.put("bldsttCcodeName",
"CASE WHEN wt.BLDSTT_CODE = 0 THEN '未建/规划' " +
"WHEN wt.BLDSTT_CODE = 1 THEN '在建' " +
"WHEN wt.BLDSTT_CODE = 2 THEN '已建' " +
"ELSE '未知' END");
columnMap.put("bldsttCcode", "wt.BLDSTT_CODE AS bldsttCcode"); columnMap.put("bldsttCcode", "wt.BLDSTT_CODE AS bldsttCcode");
columnMap.put("stCode", "NULL AS stCode"); columnMap.put("stCode", "NULL AS stCode");
columnMap.put("stName", "NULL AS stName"); columnMap.put("stName", "NULL AS stName");

View File

@ -189,8 +189,8 @@ public class SdWtvtRServiceImpl extends ServiceImpl<SdWtvtRMapper, SdWtvtYearVo>
item.put("tm", dt); item.put("tm", dt);
item.put("wthg", parseBigDecimal(wthgStr)); item.put("wthg", parseBigDecimal(wthgStr));
item.put("vwt", parseBigDecimal(vwtStr)); item.put("vwt", parseBigDecimal(vwtStr));
item.put("recordUser", "admin"); // item.put("recordUser", "admin");
// item.put("recordUser", SecurityUtils.getUserId()); item.put("recordUser", SecurityUtils.getUserId());
dataList.add(item); dataList.add(item);
}); });

View File

@ -2,6 +2,7 @@ package com.yfd.platform.qgc_env.zq.controller;
import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.common.DataSourceRequest;
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_env.zq.service.ZqMonitorService; import com.yfd.platform.qgc_env.zq.service.ZqMonitorService;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
@ -14,6 +15,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
@RestController @RestController
@RequestMapping("/zq") @RequestMapping("/zq")
@Tag(name = "水文流量站监测") @Tag(name = "水文流量站监测")
@ -53,6 +56,20 @@ public class ZqMonitorController {
return ResponseResult.successData(zqMonitorService.getRiverDrtpKendoListCust(dataSourceRequest)); return ResponseResult.successData(zqMonitorService.getRiverDrtpKendoListCust(dataSourceRequest));
} }
@PostMapping("/river/removeKendoByIds")
@Operation(summary = "删除流量站小时/日/月数据")
public ResponseResult removeKendoByIds(@RequestBody BatchDeleteAo batchDeleteAo) {
zqMonitorService.removeKendoByIds(batchDeleteAo);
return ResponseResult.success();
}
@PostMapping("/river/updateRiverRData")
@Operation(summary = "修改流量站小时数据")
public ResponseResult updateRiverRData(@RequestBody Map<String, Object> updateData) {
zqMonitorService.updateRiverRData(updateData);
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

@ -2,6 +2,7 @@ package com.yfd.platform.qgc_env.zq.service;
import com.yfd.platform.common.DataSourceRequest; import com.yfd.platform.common.DataSourceRequest;
import com.yfd.platform.common.DataSourceResult; import com.yfd.platform.common.DataSourceResult;
import com.yfd.platform.qgc_base.entity.vo.BatchDeleteAo;
import com.yfd.platform.qgc_env.zq.entity.vo.ZqBaseInfoVo; import com.yfd.platform.qgc_env.zq.entity.vo.ZqBaseInfoVo;
import com.yfd.platform.qgc_env.zq.entity.vo.ZqRiverDayDataVo; import com.yfd.platform.qgc_env.zq.entity.vo.ZqRiverDayDataVo;
import com.yfd.platform.qgc_env.zq.entity.vo.ZqRiverDrtpDataVo; import com.yfd.platform.qgc_env.zq.entity.vo.ZqRiverDrtpDataVo;
@ -19,5 +20,9 @@ public interface ZqMonitorService {
DataSourceResult<ZqRiverDrtpDataVo> getRiverDrtpKendoListCust(DataSourceRequest dataSourceRequest); DataSourceResult<ZqRiverDrtpDataVo> getRiverDrtpKendoListCust(DataSourceRequest dataSourceRequest);
boolean removeKendoByIds(BatchDeleteAo batchDeleteAo);
boolean updateRiverRData(java.util.Map<String, Object> updateData);
ZqBaseInfoVo getStcdInfo(String stcd); ZqBaseInfoVo getStcdInfo(String stcd);
} }

View File

@ -10,6 +10,8 @@ import com.yfd.platform.common.GroupHelper;
import com.yfd.platform.common.GroupingInfo; import com.yfd.platform.common.GroupingInfo;
import com.yfd.platform.common.MicroservicDynamicSQLMapper; import com.yfd.platform.common.MicroservicDynamicSQLMapper;
import com.yfd.platform.common.exception.BizException; 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.fh.entity.vo.HabitatVo; import com.yfd.platform.qgc_env.fh.entity.vo.HabitatVo;
import com.yfd.platform.qgc_env.zq.entity.vo.ZqBaseInfoVo; import com.yfd.platform.qgc_env.zq.entity.vo.ZqBaseInfoVo;
import com.yfd.platform.qgc_env.zq.entity.vo.ZqRiverDayDataVo; import com.yfd.platform.qgc_env.zq.entity.vo.ZqRiverDayDataVo;
@ -19,13 +21,18 @@ import com.yfd.platform.qgc_env.zq.service.ZqMonitorService;
import com.yfd.platform.utils.QgcQueryWrapperUtil; import com.yfd.platform.utils.QgcQueryWrapperUtil;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.jdbc.core.JdbcTemplate;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Calendar;
import java.util.HashSet;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set;
@Service @Service
public class ZqMonitorServiceImpl implements ZqMonitorService { public class ZqMonitorServiceImpl implements ZqMonitorService {
@ -33,6 +40,9 @@ public class ZqMonitorServiceImpl implements ZqMonitorService {
@Resource @Resource
private MicroservicDynamicSQLMapper microservicDynamicSQLMapper; private MicroservicDynamicSQLMapper microservicDynamicSQLMapper;
@Resource
private JdbcTemplate jdbcTemplate;
@Override @Override
public DataSourceResult getMsstbprptList(DataSourceRequest dataSourceRequest) { public DataSourceResult getMsstbprptList(DataSourceRequest dataSourceRequest) {
return getMsstbprptListInternal(dataSourceRequest, false); return getMsstbprptListInternal(dataSourceRequest, false);
@ -152,6 +162,81 @@ public class ZqMonitorServiceImpl implements ZqMonitorService {
return queryRiverDrtpGroupList(dataSourceRequest, loadOptions); return queryRiverDrtpGroupList(dataSourceRequest, loadOptions);
} }
@Override
@Transactional(rollbackFor = Exception.class)
public boolean removeKendoByIds(BatchDeleteAo batchDeleteAo) {
if (batchDeleteAo == null || CollUtil.isEmpty(batchDeleteAo.getDataList())) {
return true;
}
String dataType = batchDeleteAo.getDataType();
List<DataParam> dataList = batchDeleteAo.getDataList();
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 ("TIME".equals(dataType)) {
deleteRiverRData(subList);
Map<String, String[]> dateRangeMap = new HashMap<>();
Map<String, String[]> monthRangeMap = new HashMap<>();
for (DataParam param : subList) {
if (param == null || StrUtil.isBlank(param.getId()) || StrUtil.isBlank(param.getTm()) || param.getTm().length() < 10) {
continue;
}
String stcd = param.getId();
String tm = param.getTm();
String dateStr = tm.substring(0, 10);
dateRangeMap.compute(stcd, (k, range) -> mergeDateRange(range, dateStr));
String yearMonth = tm.substring(0, 7);
String[] ym = yearMonth.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);
String monthKey = stcd + "_" + year + "_" + month;
monthRangeMap.putIfAbsent(monthKey, 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]);
}
}
}
if ("DATE".equals(dataType)) {
deleteRiverDayData(subList);
}
if ("MON".equals(dataType)) {
deleteRiverMonthData(subList);
}
}
return true;
}
@Override
@Transactional(rollbackFor = Exception.class)
public boolean updateRiverRData(Map<String, Object> updateData) {
updateRiverHourData(updateData);
String stcd = updateData == null ? null : asString(updateData.get("stcd"));
String tm = updateData == null ? null : 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]);
statisticsMonthDataFromDay(stcd, year + "-" + String.format("%02d", month) + "-01", getMonthEndDate(year, month));
}
}
return true;
}
@Override @Override
public ZqBaseInfoVo getStcdInfo(String stcd) { public ZqBaseInfoVo getStcdInfo(String stcd) {
if (StrUtil.isBlank(stcd)) { if (StrUtil.isBlank(stcd)) {
@ -169,7 +254,7 @@ public class ZqMonitorServiceImpl implements ZqMonitorService {
"t.JCDT AS jcdt, " + "t.JCDT AS jcdt, " +
"t.WDDT AS wddt, " + "t.WDDT AS wddt, " +
"t.BLDSTT_CODE AS bldsttCode, " + "t.BLDSTT_CODE AS bldsttCode, " +
"CASE WHEN t.BLDSTT_CODE IN ('1', '10', '11') THEN '已建' WHEN t.BLDSTT_CODE IN ('2', '7', '8') THEN '在建' ELSE '未建/规划' END AS bldsttCcodeName, " + "CASE WHEN t.BLDSTT_CODE = 2 THEN '已建' WHEN t.BLDSTT_CODE =1 THEN '在建' ELSE '未建/规划' END AS bldsttCcodeName, " +
"t.INTRODUCE AS introduce, " + "t.INTRODUCE AS introduce, " +
"t.LOGO AS logo, " + "t.LOGO AS logo, " +
"t.INFFILE AS inffile, " + "t.INFFILE AS inffile, " +
@ -1402,6 +1487,235 @@ public class ZqMonitorServiceImpl implements ZqMonitorService {
return orders.isEmpty() ? "" : " ORDER BY " + String.join(", ", orders); return orders.isEmpty() ? "" : " ORDER BY " + String.join(", ", orders);
} }
private void deleteRiverRData(List<DataParam> list) {
if (CollUtil.isEmpty(list)) {
return;
}
StringBuilder sql = new StringBuilder("DELETE FROM SD_RIVER_R WHERE ");
List<Object> args = new ArrayList<>();
appendRiverDeleteConditions(sql, args, list, false, false);
if (!args.isEmpty()) {
jdbcTemplate.update(sql.toString(), args.toArray());
}
}
private void deleteRiverDayData(List<DataParam> list) {
if (CollUtil.isEmpty(list)) {
return;
}
StringBuilder sql = new StringBuilder("DELETE FROM SD_RIVERDAY_S WHERE ");
List<Object> args = new ArrayList<>();
appendRiverDeleteConditions(sql, args, list, true, false);
if (!args.isEmpty()) {
jdbcTemplate.update(sql.toString(), args.toArray());
}
}
private void deleteRiverMonthData(List<DataParam> list) {
if (CollUtil.isEmpty(list)) {
return;
}
StringBuilder sql = new StringBuilder("DELETE FROM SD_RIVERDRTP_S WHERE ");
List<String> conditions = new ArrayList<>();
List<Object> args = new ArrayList<>();
for (DataParam item : list) {
if (item == null || StrUtil.isBlank(item.getId()) || StrUtil.isBlank(item.getDrtp())
|| StrUtil.isBlank(item.getYear()) || StrUtil.isBlank(item.getMonth())) {
continue;
}
conditions.add("(STCD = ? AND DRTP = ? AND YEAR = ? AND MONTH = ?)");
args.add(item.getId());
args.add(item.getDrtp());
args.add(Integer.parseInt(item.getYear()));
args.add(Integer.parseInt(item.getMonth()));
}
if (!conditions.isEmpty()) {
sql.append(String.join(" OR ", conditions));
jdbcTemplate.update(sql.toString(), args.toArray());
}
}
private void appendRiverDeleteConditions(StringBuilder sql,
List<Object> args,
List<DataParam> list,
boolean dayTable,
boolean includeSeconds) {
List<String> conditions = new ArrayList<>();
for (DataParam item : list) {
if (item == null || StrUtil.isBlank(item.getId())) {
continue;
}
String timeValue = dayTable ? item.getDt() : item.getTm();
if (StrUtil.isBlank(timeValue)) {
continue;
}
String pattern = dayTable ? "yyyy-MM-dd HH24:mi:ss" : "yyyy-MM-dd HH24:mi:ss";
String column = dayTable ? "DT" : "TM";
conditions.add("(STCD = ? AND " + column + " = TO_DATE(?, '" + pattern + "'))");
args.add(item.getId());
args.add(timeValue);
}
if (!conditions.isEmpty()) {
sql.append(String.join(" OR ", conditions));
}
}
private void updateRiverHourData(Map<String, Object> updateData) {
if (updateData == null || StrUtil.isBlank(asString(updateData.get("stcd"))) || StrUtil.isBlank(asString(updateData.get("tm")))) {
return;
}
List<String> setParts = new ArrayList<>();
List<Object> args = new ArrayList<>();
if (updateData.containsKey("z")) {
setParts.add("Z = ?");
args.add(updateData.get("z"));
}
if (updateData.containsKey("q")) {
setParts.add("Q = ?");
args.add(updateData.get("q"));
}
if (updateData.containsKey("v")) {
setParts.add("V = ?");
args.add(updateData.get("v"));
}
if (setParts.isEmpty()) {
return;
}
String sql = "UPDATE SD_RIVER_R SET " + String.join(", ", setParts)
+ " WHERE STCD = ? AND TM = TO_DATE(?, 'yyyy-MM-dd HH24:mi:ss')";
args.add(asString(updateData.get("stcd")));
args.add(asString(updateData.get("tm")));
jdbcTemplate.update(sql, args.toArray());
}
private String[] mergeDateRange(String[] range, String dateStr) {
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;
}
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 String asString(Object value) {
return value == null ? null : String.valueOf(value);
}
private void statisticsDayDataFromHour(String stcd, String startDate, String endDate) {
String deleteSql = "DELETE FROM SD_RIVERDAY_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_RIVER_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 NVL(S.IS_DELETED, 0) = 0)";
jdbcTemplate.update(deleteSql, stcd, startDate, endDate, startDate, endDate);
String mergeSql = "MERGE INTO SD_RIVERDAY_S T " +
"USING ( " +
" SELECT STCD, " +
" TRUNC(TM) AS DT, " +
" AVG(Z) AS Z, " +
" AVG(Q) AS Q, " +
" AVG(V) AS V, " +
" MIN(MSQMT) AS MSQMT " +
" FROM SD_RIVER_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 NVL(IS_DELETED, 0) = 0 " +
" GROUP BY STCD, TRUNC(TM) " +
") S " +
"ON (T.STCD = S.STCD AND T.DT = S.DT) " +
"WHEN MATCHED THEN UPDATE SET " +
" T.Z = S.Z, " +
" T.Q = S.Q, " +
" T.V = S.V, " +
" T.MSQMT = S.MSQMT, " +
" 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, Z, Q, V, MSQMT, RECORD_TIME, IS_DELETED " +
") VALUES ( " +
" SYS_GUID(), S.STCD, S.DT, S.Z, S.Q, S.V, S.MSQMT, 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_RIVERDRTP_S T " +
"WHERE T.DRTP = 'MON' " +
"AND T.STCD = ? " +
"AND T.YEAR = ? " +
"AND T.MONTH BETWEEN ? AND ? " +
"AND NOT EXISTS ( " +
" SELECT 1 FROM SD_RIVERDAY_S D " +
" WHERE D.STCD = T.STCD " +
" AND NVL(D.IS_DELETED, 0) = 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_RIVERDRTP_S T " +
"USING ( " +
" SELECT STCD, " +
" EXTRACT(YEAR FROM DT) AS YEAR, " +
" EXTRACT(MONTH FROM DT) AS MONTH, " +
" 'MON' AS DRTP, " +
" AVG(Z) AS Z, " +
" AVG(Q) AS Q, " +
" AVG(V) AS V, " +
" MIN(MSQMT) AS MSQMT " +
" FROM SD_RIVERDAY_S " +
" WHERE STCD = ? " +
" AND DT >= TO_DATE(?, 'YYYY-MM-DD') " +
" AND DT < TO_DATE(?, 'YYYY-MM-DD') + 1 " +
" AND NVL(IS_DELETED, 0) = 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.Z = S.Z, " +
" T.Q = S.Q, " +
" T.V = S.V, " +
" T.MSQMT = S.MSQMT, " +
" T.IS_DELETED = 0, " +
" T.DELETE_TIME = NULL, " +
" T.MODIFY_TIME = SYSDATE, " +
" T.TM = TO_DATE(S.YEAR || '-' || LPAD(S.MONTH, 2, '0') || '-01', 'YYYY-MM-DD') " +
"WHEN NOT MATCHED THEN INSERT ( " +
" ID, STCD, DRTP, YEAR, MONTH, Z, Q, V, MSQMT, RECORD_TIME, IS_DELETED, TM " +
") VALUES ( " +
" SYS_GUID(), S.STCD, 'MON', S.YEAR, S.MONTH, S.Z, S.Q, S.V, S.MSQMT, SYSDATE, 0, " +
" TO_DATE(S.YEAR || '-' || LPAD(S.MONTH, 2, '0') || '-01', 'YYYY-MM-DD') " +
")";
jdbcTemplate.update(mergeSql, stcd, startDate, endDate);
}
private String buildRiverAggregateSql(String aggregate, String column, String field) { private String buildRiverAggregateSql(String aggregate, String column, String field) {
String normalized = aggregate == null ? "" : aggregate.toLowerCase(); String normalized = aggregate == null ? "" : aggregate.toLowerCase();
return switch (normalized) { return switch (normalized) {
@ -1559,7 +1873,7 @@ public class ZqMonitorServiceImpl implements ZqMonitorService {
selectMap.put("jcdt", "t.JCDT AS jcdt"); selectMap.put("jcdt", "t.JCDT AS jcdt");
selectMap.put("wddt", "t.WDDT AS wddt"); selectMap.put("wddt", "t.WDDT AS wddt");
selectMap.put("bldsttCode", "t.BLDSTT_CODE AS bldsttCode"); selectMap.put("bldsttCode", "t.BLDSTT_CODE AS bldsttCode");
selectMap.put("bldsttCcodeName", "CASE WHEN t.BLDSTT_CODE IN ('1', '10', '11') THEN '已建' WHEN t.BLDSTT_CODE IN ('2', '7', '8') THEN '在建' ELSE '未建/规划' END AS bldsttCcodeName"); selectMap.put("bldsttCcodeName", "CASE WHEN t.BLDSTT_CODE =2 THEN '已建' WHEN t.BLDSTT_CODE =1 THEN '在建' ELSE '未建/规划' END AS bldsttCcodeName");
selectMap.put("introduce", "t.INTRODUCE AS introduce"); selectMap.put("introduce", "t.INTRODUCE AS introduce");
selectMap.put("logo", "t.LOGO AS logo"); selectMap.put("logo", "t.LOGO AS logo");
selectMap.put("inffile", "t.INFFILE AS inffile"); selectMap.put("inffile", "t.INFFILE AS inffile");
@ -1681,7 +1995,7 @@ public class ZqMonitorServiceImpl implements ZqMonitorService {
case "jcdt" -> "t.JCDT"; case "jcdt" -> "t.JCDT";
case "wddt" -> "t.WDDT"; case "wddt" -> "t.WDDT";
case "bldsttCode", "bldsttCcode" -> "t.BLDSTT_CODE"; case "bldsttCode", "bldsttCcode" -> "t.BLDSTT_CODE";
case "bldsttCcodeName" -> "CASE WHEN t.BLDSTT_CODE IN ('1', '10', '11') THEN '已建' WHEN t.BLDSTT_CODE IN ('2', '7', '8') THEN '在建' ELSE '未建/规划' END"; case "bldsttCcodeName" -> "CASE WHEN t.BLDSTT_CODE =2 THEN '已建' WHEN t.BLDSTT_CODE =1 THEN '在建' ELSE '未建/规划' END";
case "introduce" -> "t.INTRODUCE"; case "introduce" -> "t.INTRODUCE";
case "logo" -> "t.LOGO"; case "logo" -> "t.LOGO";
case "inffile" -> "t.INFFILE"; case "inffile" -> "t.INFFILE";