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 85651c10..99c4a929 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
@@ -16,6 +16,7 @@ import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqMsstbprptVo;
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqRuleVo;
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqVmsstbprptVo;
import com.yfd.platform.qgc_eng.eq.entity.vo.EngEqRateCountVo;
+import com.yfd.platform.qgc_eng.eq.entity.vo.EqOperateRequest;
import com.yfd.platform.qgc_eng.eq.service.EngEqDataService;
import com.yfd.platform.qgc_eng.eq.entity.vo.QgcQecStaticVo;
import com.yfd.platform.qgc_eng.eq.entity.vo.StcdInfoVo;
@@ -203,4 +204,15 @@ public class EngEqDataController {
engEqDataService.removeKendoByIds(batchDeleteAo);
return ResponseResult.success();
}
+
+ @Log(module = "生态流量监测数据管理", value = "修改生态流量小时数据")
+ @PostMapping("/data/updateEqRsData")
+ @Operation(summary = "修改生态流量小时数据")
+ public ResponseResult updateEqRsData(@RequestBody EqOperateRequest eqOperateRequest) {
+ engEqDataService.updateQecRsData(
+ eqOperateRequest == null ? null : eqOperateRequest.getUpdateData(),
+ eqOperateRequest == null ? null : eqOperateRequest.getSource()
+ );
+ return ResponseResult.success();
+ }
}
diff --git a/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/EqOperateRequest.java b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/EqOperateRequest.java
new file mode 100644
index 00000000..7214d776
--- /dev/null
+++ b/backend/src/main/java/com/yfd/platform/qgc_eng/eq/entity/vo/EqOperateRequest.java
@@ -0,0 +1,24 @@
+package com.yfd.platform.qgc_eng.eq.entity.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Map;
+
+/**
+ * 生态流量数据操作请求
+ *
updateData: 修改数据,其中 stcd/tm 为定位条件,其余 key 对应小时表可修改字段
+ */
+@Data
+@Schema(description = "生态流量数据操作请求")
+public class EqOperateRequest implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @Schema(description = "数据来源")
+ private String source;
+
+ @Schema(description = "修改数据")
+ private Map updateData;
+}
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 16cd71d5..958e85e5 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
@@ -85,4 +85,13 @@ public interface EngEqDataService {
* @param batchDeleteAo dataType: TIME=小时 DATE=日 MON=月;dataList: 删除数据列表
*/
boolean removeKendoByIds(BatchDeleteAo batchDeleteAo);
+
+ /**
+ * 修改生态流量小时数据
+ * 修改后会按受影响站点重新聚合日表(SD_QECDAY_S)和月表(SD_QECDRTP_S)
+ *
+ * @param updateData 修改数据,stcd/tm 为定位条件,其余 key 对应小时表可修改字段
+ * @param source 数据来源
+ */
+ boolean updateQecRsData(Map updateData, String source);
}
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 c75d6542..3a1b174b 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
@@ -3,6 +3,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.yfd.platform.common.exception.BizException;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yfd.platform.common.DataSourceLoadOptionsBase;
import com.yfd.platform.common.DataSourceRequest;
@@ -112,6 +113,26 @@ public class EngEqDataServiceImpl implements EngEqDataService {
QEC_FIELD_MEANING_MAP.put("SHOW_FLAG", "数据显示类型");
}
+ private static final LinkedHashMap QEC_UPDATE_COLUMN_MAP = new LinkedHashMap<>();
+
+ static {
+ QEC_UPDATE_COLUMN_MAP.put("qec", "QEC");
+ QEC_UPDATE_COLUMN_MAP.put("waterflow", "WATERFLOW");
+ QEC_UPDATE_COLUMN_MAP.put("tpqec", "TPQEC");
+ QEC_UPDATE_COLUMN_MAP.put("sfdb", "SFDB");
+ QEC_UPDATE_COLUMN_MAP.put("mwrSfdb", "MWR_SFDB");
+ QEC_UPDATE_COLUMN_MAP.put("avqSfdb", "AVQ_SFDB");
+ QEC_UPDATE_COLUMN_MAP.put("qecLimit", "QEC_LIMIT");
+ QEC_UPDATE_COLUMN_MAP.put("mwrLimit", "MWR_LIMIT");
+ QEC_UPDATE_COLUMN_MAP.put("avqLimit", "AVQ_LIMIT");
+ QEC_UPDATE_COLUMN_MAP.put("qecC", "QEC_C");
+ QEC_UPDATE_COLUMN_MAP.put("mwrC", "MWR_C");
+ QEC_UPDATE_COLUMN_MAP.put("avqC", "AVQ_C");
+ QEC_UPDATE_COLUMN_MAP.put("qecRuleDid", "QEC_RULE_DID");
+ QEC_UPDATE_COLUMN_MAP.put("qecMwrruleDid", "QEC_MWRRULE_DID");
+ QEC_UPDATE_COLUMN_MAP.put("showFlag", "SHOW_FLAG");
+ }
+
@Override
public DataSourceResult getKendoListCust(DataSourceRequest dataSourceRequest) {
DataSourceLoadOptionsBase loadOptions = dataSourceRequest == null ? null : dataSourceRequest.toDevRequest();
@@ -6716,6 +6737,103 @@ public class EngEqDataServiceImpl implements EngEqDataService {
return "tm".equalsIgnoreCase(field);
}
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public boolean updateQecRsData(Map updateData, String source) {
+ if (updateData == null || updateData.isEmpty()) {
+ return true;
+ }
+ String stcd = asString(updateData.get("stcd"));
+ String tm = asString(updateData.get("tm"));
+ Map beforeHour = queryQecHourRow(stcd, tm);
+ updateQecHourData(updateData);
+ recordQecUpdateLog(beforeHour, updateData, source);
+
+ if (StrUtil.isNotBlank(stcd) && StrUtil.isNotBlank(tm) && tm.length() >= 10) {
+ String dateStr = tm.substring(0, 10);
+ statisticsQecDayDataFromHour(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);
+ statisticsQecMonthDataFromDay(stcd, startDate, endDate);
+ }
+ }
+ return true;
+ }
+
+ private void updateQecHourData(Map updateData) {
+ List setClauses = new ArrayList<>();
+ List