diff --git a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/controller/EngEqDataController.java b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/controller/EngEqDataController.java
index ea68c002..85651c10 100644
--- a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/controller/EngEqDataController.java
+++ b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/controller/EngEqDataController.java
@@ -1,9 +1,11 @@
package com.yfd.platform.qgc_eng.eq.controller;
+import com.yfd.platform.annotation.Log;
import com.yfd.platform.common.DataSourceLoadOptionsBase;
import com.yfd.platform.common.DataSourceRequest;
import com.yfd.platform.common.DataSourceResult;
import com.yfd.platform.config.ResponseResult;
+import com.yfd.platform.qgc_base.entity.vo.BatchDeleteAo;
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqBaseMsstbprptVo;
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqBaseVmsstbprptVo;
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqDrtpDataVo;
@@ -193,4 +195,12 @@ public class EngEqDataController {
public ResponseResult getMsEngKendoListCust(@RequestBody DataSourceRequest dataSourceRequest) {
return ResponseResult.successData(engEqDataService.getMsEngKendoList(dataSourceRequest));
}
+
+ @Log(module = "生态流量监测数据管理", value = "删除生态流量小时/日/月数据")
+ @PostMapping("/data/removeKendoByIds")
+ @Operation(summary = "删除生态流量小时/日/月数据")
+ public ResponseResult removeKendoByIds(@RequestBody BatchDeleteAo batchDeleteAo) {
+ engEqDataService.removeKendoByIds(batchDeleteAo);
+ return ResponseResult.success();
+ }
}
diff --git a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/EngEqDataService.java b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/EngEqDataService.java
index 54caab7b..16cd71d5 100644
--- a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/EngEqDataService.java
+++ b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/EngEqDataService.java
@@ -2,6 +2,7 @@ package com.yfd.platform.qgc_eng.eq.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_eng.eq.entity.vo.*;
import java.util.List;
@@ -76,4 +77,12 @@ public interface EngEqDataService {
*
对应旧系统 EngEqController.getKendoListCust
*/
DataSourceResult getMsEngKendoList(DataSourceRequest dataSourceRequest);
+
+ /**
+ * 批量删除生态流量小时/日/月数据
+ * 删除小时数据后会按受影响站点重新聚合日表(SD_QECDAY_S)和月表(SD_QECDRTP_S)
+ *
+ * @param batchDeleteAo dataType: TIME=小时 DATE=日 MON=月;dataList: 删除数据列表
+ */
+ boolean removeKendoByIds(BatchDeleteAo batchDeleteAo);
}
diff --git a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/impl/EngEqDataServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/impl/EngEqDataServiceImpl.java
index b7676e03..c75d6542 100644
--- a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/impl/EngEqDataServiceImpl.java
+++ b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/service/impl/EngEqDataServiceImpl.java
@@ -1,6 +1,7 @@
package com.yfd.platform.qgc_eng.eq.service.impl;
import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yfd.platform.common.DataSourceLoadOptionsBase;
@@ -37,15 +38,26 @@ import com.yfd.platform.qgc_eng.eq.entity.vo.WbsbVo;
import com.yfd.platform.qgc_eng.eq.entity.vo.StBaseInfo;
import com.yfd.platform.qgc_eng.eq.entity.vo.StcdInfoVo;
import com.yfd.platform.qgc_eng.eq.service.EngEqDataService;
+import com.yfd.platform.qgc_base.domain.MsOperationLog;
+import com.yfd.platform.qgc_base.domain.MsOperationLogDetail;
+import com.yfd.platform.qgc_base.entity.vo.BatchDeleteAo;
+import com.yfd.platform.qgc_base.entity.vo.DataParam;
+import com.yfd.platform.qgc_base.mapper.MsOperationLogDetailMapper;
+import com.yfd.platform.qgc_base.mapper.MsOperationLogMapper;
import com.yfd.platform.qgc_env.wq.entity.vo.MsWarnRuleDetailBVo;
import com.yfd.platform.qgc_env.wt.utils.SiteAvoidanceUtils;
import com.yfd.platform.utils.QgcQueryWrapperUtil;
+import com.yfd.platform.utils.SecurityUtils;
import jakarta.annotation.Resource;
+import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Calendar;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
@@ -67,6 +79,39 @@ public class EngEqDataServiceImpl implements EngEqDataService {
@Resource
private MicroservicDynamicSQLMapper microservicDynamicSQLMapper;
+ @Resource
+ private JdbcTemplate jdbcTemplate;
+
+ private static final String QEC_HOUR_TABLE_NAME = "SD_QEC_R";
+ private static final String QEC_DAY_TABLE_NAME = "SD_QECDAY_S";
+ private static final String QEC_DRTP_TABLE_NAME = "SD_QECDRTP_S";
+
+ @Resource
+ private MsOperationLogMapper msOperationLogMapper;
+
+ @Resource
+ private MsOperationLogDetailMapper msOperationLogDetailMapper;
+
+ private static final LinkedHashMap QEC_FIELD_MEANING_MAP = new LinkedHashMap<>();
+
+ static {
+ QEC_FIELD_MEANING_MAP.put("QEC", "生态流量");
+ QEC_FIELD_MEANING_MAP.put("WATERFLOW", "AI识别生态流量值");
+ QEC_FIELD_MEANING_MAP.put("TPQEC", "生态流量泄放方式");
+ QEC_FIELD_MEANING_MAP.put("SFDB", "生态流量是否达标");
+ QEC_FIELD_MEANING_MAP.put("MWR_SFDB", "生态流量是否达标(水利部)");
+ QEC_FIELD_MEANING_MAP.put("AVQ_SFDB", "生态流量是否达标(多年平均)");
+ QEC_FIELD_MEANING_MAP.put("QEC_LIMIT", "生态流量限值(环保部)");
+ QEC_FIELD_MEANING_MAP.put("MWR_LIMIT", "生态流量限值(水利部)");
+ QEC_FIELD_MEANING_MAP.put("AVQ_LIMIT", "生态流量限值(多年平均)");
+ QEC_FIELD_MEANING_MAP.put("QEC_C", "生态流量限值系数(环保部)");
+ QEC_FIELD_MEANING_MAP.put("MWR_C", "生态流量限值系数(水利部)");
+ QEC_FIELD_MEANING_MAP.put("AVQ_C", "生态流量系数(多年平均)");
+ QEC_FIELD_MEANING_MAP.put("QEC_RULE_DID", "环保部生态流量告警规则详情ID");
+ QEC_FIELD_MEANING_MAP.put("QEC_MWRRULE_DID", "水利部生态流量告警规则详情ID");
+ QEC_FIELD_MEANING_MAP.put("SHOW_FLAG", "数据显示类型");
+ }
+
@Override
public DataSourceResult getKendoListCust(DataSourceRequest dataSourceRequest) {
DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest();
@@ -6671,4 +6716,529 @@ public class EngEqDataServiceImpl implements EngEqDataService {
return "tm".equalsIgnoreCase(field);
}
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public boolean removeKendoByIds(BatchDeleteAo batchDeleteAo) {
+ List dataList = batchDeleteAo == null ? null : batchDeleteAo.getDataList();
+ if (CollUtil.isEmpty(dataList)) {
+ return true;
+ }
+ String dataType = StrUtil.blankToDefault(batchDeleteAo.getDataType(), "").toUpperCase();
+ String source = batchDeleteAo == null ? null : batchDeleteAo.getSource();
+ int batchSize = 500;
+ for (int i = 0; i < dataList.size(); i += batchSize) {
+ List subList = dataList.subList(i, Math.min(i + batchSize, dataList.size()));
+ if ("MON".equals(dataType)) {
+ List