From 5188d526ec4da19892bfdeedf45758f7c8ec0e51 Mon Sep 17 00:00:00 2001 From: tangwei Date: Wed, 19 Aug 2026 19:11:25 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/MsOperationLogServiceImpl.java | 1 + .../eq/service/impl/EngEqDataServiceImpl.java | 57 +++++++++++++++++-- 2 files changed, 54 insertions(+), 4 deletions(-) diff --git a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/MsOperationLogServiceImpl.java b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/MsOperationLogServiceImpl.java index 10b0858b..3f19b30e 100644 --- a/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/MsOperationLogServiceImpl.java +++ b/backend/src/main/java/com/yfd/platform/qgc_base/service/impl/MsOperationLogServiceImpl.java @@ -54,6 +54,7 @@ public class MsOperationLogServiceImpl extends ServiceImpl ENG_FIELD_MEANING_MAP = new LinkedHashMap<>(); 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 3a1b174b..4df52a05 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 @@ -6796,7 +6796,36 @@ public class EngEqDataServiceImpl implements EngEqDataService { String sql = "SELECT " + buildQecHourLogSelectColumns() + " FROM SD_QEC_R WHERE STCD = ? AND TM = TO_DATE(?, 'YYYY-MM-DD HH24:MI:SS')"; List> rows = jdbcTemplate.queryForList(sql, stcd, tm); - return rows.isEmpty() ? new HashMap<>() : normalizeLogRow(rows.get(0)); + if (rows.isEmpty()) { + return new HashMap<>(); + } + // 数据库返回的列名默认全大写,转成驼峰 key 与前端参数保持一致 + return convertKeysToCamel(rows.get(0)); + } + + private Map convertKeysToCamel(Map row) { + Map camel = new LinkedHashMap<>(); + if (row == null || row.isEmpty()) { + return camel; + } + for (Map.Entry entry : row.entrySet()) { + camel.put(toCamelCase(entry.getKey()), entry.getValue()); + } + return camel; + } + + private String toCamelCase(String columnName) { + if (StrUtil.isBlank(columnName)) { + return columnName; + } + String[] parts = columnName.toLowerCase().split("_"); + StringBuilder sb = new StringBuilder(parts[0]); + for (int i = 1; i < parts.length; i++) { + if (!parts[i].isEmpty()) { + sb.append(Character.toUpperCase(parts[i].charAt(0))).append(parts[i].substring(1)); + } + } + return sb.toString(); } private void recordQecUpdateLog(Map beforeHour, @@ -6812,9 +6841,11 @@ public class EngEqDataServiceImpl implements EngEqDataService { continue; } String column = entry.getValue(); - Object oldValue = beforeHour == null ? null : beforeHour.get(column); + // beforeHour 已转为驼峰 key,与前端参数统一按驼峰取旧值 + Object oldValue = beforeHour == null ? null : beforeHour.get(entry.getKey()); Object newValue = updateData.get(entry.getKey()); - if (StrUtil.equals(formatLogValue(oldValue), formatLogValue(newValue))) { + // 数值类型按数值大小比较,忽略精度差异(133.0000 == 133.00) + if (sameLogValue(oldValue, newValue)) { continue; } details.add(buildQecDetail(null, QEC_HOUR_TABLE_NAME, stcd, column, @@ -6825,7 +6856,7 @@ public class EngEqDataServiceImpl implements EngEqDataService { return; } String recordId = beforeHour != null && !beforeHour.isEmpty() - && beforeHour.get("ID") != null ? beforeHour.get("ID").toString() : null; + && beforeHour.get("id") != null ? beforeHour.get("id").toString() : null; MsOperationLog mainLog = buildQecMainLog(recordId, "修改生态流量小时数据", source,"02"); msOperationLogMapper.insert(mainLog); for (MsOperationLogDetail detail : details) { @@ -6834,6 +6865,24 @@ public class EngEqDataServiceImpl implements EngEqDataService { batchInsertQecLogDetails(details); } + private boolean sameLogValue(Object oldValue, Object newValue) { + if (oldValue == null && newValue == null) { + return true; + } + if (oldValue == null || newValue == null) { + return false; + } + // BigDecimal/Double 等数值类型按数值大小比较,忽略精度差异(133.0000 == 133.00) + if (oldValue instanceof Number && newValue instanceof Number) { + try { + return new BigDecimal(oldValue.toString()).compareTo(new BigDecimal(newValue.toString())) == 0; + } catch (NumberFormatException e) { + return false; + } + } + return StrUtil.equals(formatLogValue(oldValue), formatLogValue(newValue)); + } + @Override @Transactional(rollbackFor = Exception.class) public boolean removeKendoByIds(BatchDeleteAo batchDeleteAo) {