From d465482a314ea4f5703aba7ca5cc33a682fc2f5c Mon Sep 17 00:00:00 2001
From: yeg <1347747024@qq.com>
Date: 星期日, 30 八月 2026 17:48:55 +0800
Subject: [PATCH] 修正采集器测量编码大小写冲突
---
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TTestServiceImpl.java | 10 +++++++++-
ruoyi-admin/src/test/java/com/ruoyi/system/service/impl/TTestServiceImplTest.java | 14 ++++++++++++++
2 files changed, 23 insertions(+), 1 deletions(-)
diff --git a/ruoyi-admin/src/test/java/com/ruoyi/system/service/impl/TTestServiceImplTest.java b/ruoyi-admin/src/test/java/com/ruoyi/system/service/impl/TTestServiceImplTest.java
index b9a153a..3538aec 100644
--- a/ruoyi-admin/src/test/java/com/ruoyi/system/service/impl/TTestServiceImplTest.java
+++ b/ruoyi-admin/src/test/java/com/ruoyi/system/service/impl/TTestServiceImplTest.java
@@ -226,6 +226,20 @@
}
@Test
+ void createShouldRejectCaseInsensitiveDuplicateCollectorMeasurement()
+ {
+ TTest test = validTest();
+ test.getBatteries().get(0).getCollectorChannels()
+ .add(collectorChannel("primary_temperature", "主温度重复", "S-04"));
+ mockEnabledOptions();
+
+ ServiceException exception = assertThrows(ServiceException.class, () -> testService.createTest(test));
+
+ assertEquals("同一电池号的采集器测量项不可重复", exception.getMessage());
+ verify(testMapper, never()).insertTest(any(TTest.class));
+ }
+
+ @Test
void createShouldRejectBatteriesFromDifferentGroups()
{
TTest test = validTest();
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TTestServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TTestServiceImpl.java
index faafbc3..73623bf 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TTestServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TTestServiceImpl.java
@@ -5,6 +5,7 @@
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
+import java.util.Locale;
import java.util.Map;
import java.util.Set;
import com.alibaba.fastjson2.JSON;
@@ -443,7 +444,7 @@
for (TTestCollectorChannel mapping : mappings)
{
if (mapping == null) throw new ServiceException("采集器通道映射不完整");
- mapping.setMeasurementCode(trimToNull(mapping.getMeasurementCode()));
+ mapping.setMeasurementCode(normalizeMeasurementCode(mapping.getMeasurementCode()));
mapping.setMeasurementName(trimToNull(mapping.getMeasurementName()));
mapping.setChannelCode(normalizeCollectorChannel(mapping.getChannelCode()));
if (mapping.getMeasurementCode() == null || mapping.getMeasurementName() == null
@@ -602,6 +603,13 @@
}
}
+ /** 测量编码与数据库不区分大小写排序保持一致,避免校验通过后插入冲突。 */
+ private String normalizeMeasurementCode(String value)
+ {
+ String normalized = trimToNull(value);
+ return normalized == null ? null : normalized.toUpperCase(Locale.ROOT);
+ }
+
private <T> List<T> mutable(List<T> values)
{
return values == null ? new ArrayList<>() : new ArrayList<>(values);
--
Gitblit v1.7.1