From 92f32acd847ea1700590bc669750f23ef499840e Mon Sep 17 00:00:00 2001
From: yeg <1347747024@qq.com>
Date: 星期六, 05 九月 2026 13:39:44 +0800
Subject: [PATCH] 清理旧测试结构并贯通最终业务数据链路
---
battery-business/src/main/java/com/battery/business/service/impl/TTestServiceImpl.java | 96 +++++++++++-------------------------------------
1 files changed, 22 insertions(+), 74 deletions(-)
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TTestServiceImpl.java b/battery-business/src/main/java/com/battery/business/service/impl/TTestServiceImpl.java
similarity index 87%
rename from ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TTestServiceImpl.java
rename to battery-business/src/main/java/com/battery/business/service/impl/TTestServiceImpl.java
index a6e59f1..690bcb5 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TTestServiceImpl.java
+++ b/battery-business/src/main/java/com/battery/business/service/impl/TTestServiceImpl.java
@@ -1,4 +1,4 @@
-package com.ruoyi.system.service.impl;
+package com.battery.business.service.impl;
import java.util.ArrayList;
import java.util.Date;
@@ -16,20 +16,18 @@
import org.springframework.transaction.annotation.Transactional;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.system.domain.TTest;
-import com.ruoyi.system.domain.TTestBattery;
-import com.ruoyi.system.domain.TTestBatteryField;
-import com.ruoyi.system.domain.TTestChannelBinding;
-import com.ruoyi.system.domain.TTestCollectorChannel;
-import com.ruoyi.system.domain.TTestPlanStep;
-import com.ruoyi.system.domain.TTestResult;
-import com.ruoyi.system.domain.TTestWarningThreshold;
-import com.ruoyi.system.domain.TTestLogicStepMapping;
-import com.ruoyi.system.domain.TTestConsoleDetail;
-import com.ruoyi.system.domain.TDetectionChannel;
-import com.ruoyi.system.domain.vo.TestConfigurationOptionsVo;
-import com.ruoyi.system.mapper.TTestMapper;
-import com.ruoyi.system.service.ITTestService;
+import com.battery.business.domain.TTest;
+import com.battery.business.domain.TTestBattery;
+import com.battery.business.domain.CurrentBatteryField;
+import com.battery.business.domain.TTestChannelBinding;
+import com.battery.business.domain.TTestCollectorChannel;
+import com.battery.business.domain.TTestWarningThreshold;
+import com.battery.business.domain.TTestLogicStepMapping;
+import com.battery.business.domain.TTestConsoleDetail;
+import com.battery.business.domain.TDetectionChannel;
+import com.battery.business.domain.vo.TestConfigurationOptionsVo;
+import com.battery.business.mapper.TTestMapper;
+import com.battery.business.service.ITTestService;
/** 测试配置服务,负责状态边界、关系校验、事务写入和只追加审计。 */
@Service
@@ -132,12 +130,6 @@
return rows;
}
- @Override
- public int startTest(Long testId, String updateBy)
- {
- throw new ServiceException("旧开始入口已停用,请使用原子开始接收接口并提供操作人");
- }
-
/**
* 建立测试接收边界;来源离线不阻断状态流转,只有成功观测数据才会写入测试事实。
*/
@@ -183,8 +175,6 @@
{
if (testMapper.updateReceptionStarted(testId, actionAt, runtimeAttach, updateBy) != 1)
throw new ServiceException("测试状态已变更,请刷新后重试");
- testMapper.insertTestAudit(testId, "RECEPTION_STARTED", operatorId, updateBy, null,
- JSON.toJSONString(Map.of("receptionStatus", "RECEIVING", "runtimeAttach", runtimeAttach)));
return 1;
}
catch (DuplicateKeyException exception)
@@ -208,8 +198,6 @@
if (testMapper.updateReceptionPaused(testId, updateBy, actionAt) != 1)
throw new ServiceException("测试状态已变更,请刷新后重试");
// 暂停期间停止请求数据;继续接收后仅追加新的成功接收事实。
- testMapper.insertTestAudit(testId, "RECEPTION_PAUSED", operatorId, updateBy, null,
- JSON.toJSONString(Map.of("receptionStatus", "PAUSED", "polling", "STOPPED")));
return 1;
}
@@ -228,8 +216,6 @@
Date actionAt = new Date();
if (testMapper.updateReceptionResumed(testId, updateBy, actionAt) != 1)
throw new ServiceException("测试状态已变更,请刷新后重试");
- testMapper.insertTestAudit(testId, "RECEPTION_RESUMED", operatorId, updateBy, null,
- JSON.toJSONString(Map.of("receptionStatus", "RECEIVING", "polling", "RESUMED")));
return 1;
}
@@ -247,9 +233,6 @@
Date actionAt = new Date();
if (testMapper.updateReceptionStopped(testId, updateBy, actionAt) != 1)
throw new ServiceException("测试状态已变更,请刷新后重试");
- testMapper.insertTestAudit(testId, "TEST_STOPPED", operatorId, updateBy, null,
- JSON.toJSONString(Map.of("testStatus", "COMPLETED", "receptionStatus", "ENDED",
- "polling", "STOPPED", "release", "IMMEDIATE")));
return 1;
}
@@ -275,16 +258,13 @@
{
TTest current = testMapper.selectTestByIdForUpdate(testId);
if (current == null) throw new ServiceException("测试不存在");
- if (!stateMatches(current, WAITING, NOT_STARTED)) throw new ServiceException("开始接收后不能删除测试");
- loadConfiguration(current);
- // 测试整体删除是无痕例外:先清理全部测试绑定和阈值,再删除主记录,不写审计。
+ // 与接收事务使用同一测试行锁,删除提交后不能再向该测试写入数据;整体删除不留审计或墓碑。
testMapper.deleteTestRealtimeRecordsByTestId(testId);
- testMapper.deleteTestRealtimeSnapshotsByTestId(testId);
testMapper.deleteTestStepRecordsByTestId(testId);
testMapper.deleteTestCycleRecordsByTestId(testId);
testMapper.deleteTestDataRevisionActionsByTestId(testId);
- testMapper.deleteTestDataOverridesByTestId(testId);
- testMapper.deleteTestConsoleImportRecordsByTestId(testId);
+ testMapper.deleteTestWarningExceptionsByTestId(testId);
+ testMapper.deleteTestLogicStepMappingsByTestId(testId);
testMapper.deleteTestCollectorChannelsByTestId(testId);
testMapper.deleteTestBindingsByTestId(testId);
testMapper.deleteTestThresholdRowsByTestId(testId);
@@ -294,14 +274,6 @@
rows += deleted;
}
return rows;
- }
-
- @Override
- public List<TTestResult> selectTestResults(TTestResult result)
- {
- if (result == null || result.getTestId() == null) throw new ServiceException("测试ID不能为空");
- selectTestById(result.getTestId());
- return testMapper.selectTestResults(result);
}
@Override
@@ -325,11 +297,9 @@
previousEnd = mapping.getEndStepNo();
expectedNo++;
}
- String oldJson = current.getLogicStepMappingsJson();
String newJson = JSON.toJSONString(normalized);
int rows = testMapper.updateLogicStepMappings(testId, newJson, updateBy, new Date());
if (rows != 1) throw new ServiceException("工步设置已变更,请刷新后重试");
- testMapper.insertTestAudit(testId, "LOGIC_STEP_MAPPING_UPDATED", operatorId, updateBy, oldJson, newJson);
return rows;
}
@@ -391,9 +361,9 @@
List<TTestBattery> batteries = loadedBatteries == null || (loadedBatteries.isEmpty() && test.getBatteries() != null
&& !test.getBatteries().isEmpty()) ? mutable(test.getBatteries()) : mutable(loadedBatteries);
// 字段属于电池组当前配置;每次查询测试都重新读取,避免产生测试字段快照。
- List<TTestBatteryField> currentFields = testMapper.selectCurrentBatteryFields(testId);
- Map<Long, List<TTestBatteryField>> fieldsByBattery = new HashMap<>();
- for (TTestBatteryField field : mutable(currentFields))
+ List<CurrentBatteryField> currentFields = testMapper.selectCurrentBatteryFields(testId);
+ Map<Long, List<CurrentBatteryField>> fieldsByBattery = new HashMap<>();
+ for (CurrentBatteryField field : mutable(currentFields))
fieldsByBattery.computeIfAbsent(field.getRelationId(), ignored -> new ArrayList<>()).add(field);
List<TTestCollectorChannel> loadedCollectorChannels = testMapper.selectTestCollectorChannels(testId);
List<TTestCollectorChannel> collectorChannels = loadedCollectorChannels == null ? List.of() : mutable(loadedCollectorChannels);
@@ -418,7 +388,6 @@
List<TTestWarningThreshold> loadedThresholds = testMapper.selectTestThresholds(testId);
test.setThresholds(loadedThresholds == null ? mutable(test.getThresholds()) : mutable(loadedThresholds));
// 测试不保存字段快照;字段值始终随电池组当前配置读取。
- test.setFieldSnapshots(new ArrayList<>());
String mappingJson = test.getLogicStepMappingsJson();
try { test.setLogicStepMappings(mappingJson == null || mappingJson.isBlank()
? new ArrayList<>() : JSON.parseArray(mappingJson, TTestLogicStepMapping.class)); }
@@ -455,9 +424,7 @@
private void validateConfiguration(TTest test)
{
// 计划工步来自设备观测,不属于测试创建配置,也不写入业务库。
- test.setPlanSteps(new ArrayList<>());
validateBatteries(test.getBatteries());
- validatePlanSteps(test.getPlanSteps());
validateThresholds(test.getThresholds());
}
@@ -529,11 +496,11 @@
throw new ServiceException("每个电池号必须绑定主温度、正电位主通道和负电位主通道");
}
- private void validateBatteryFields(List<TTestBatteryField> fields)
+ private void validateBatteryFields(List<CurrentBatteryField> fields)
{
if (fields == null) return;
Set<String> fieldNames = new HashSet<>();
- for (TTestBatteryField field : fields)
+ for (CurrentBatteryField field : fields)
{
if (field == null) throw new ServiceException("扩展属性不能为空");
field.setFieldName(trimToNull(field.getFieldName()));
@@ -558,26 +525,7 @@
return mutable(batteries).stream().map(TTestBattery::getBatteryNo).collect(java.util.stream.Collectors.joining("、"));
}
- private void validatePlanSteps(List<TTestPlanStep> planSteps)
- {
- if (planSteps.isEmpty()) return;
- Set<String> identities = new HashSet<>();
- Set<Integer> orders = new HashSet<>();
- for (TTestPlanStep step : planSteps)
- {
- if (step == null || step.getCycleNo() == null || step.getCycleNo() < 1
- || step.getStepNo() == null || step.getStepNo() < 1
- || step.getSortOrder() == null || step.getSortOrder() < 1)
- throw new ServiceException("计划工步序号必须为正整数");
- step.setStepType(trimToNull(step.getStepType()));
- step.setStepName(trimToNull(step.getStepName()));
- if (step.getStepType() == null || step.getStepName() == null || step.getParameters() == null)
- throw new ServiceException("计划工步配置不完整");
- if (!identities.add(step.getCycleNo() + ":" + step.getStepNo()) || !orders.add(step.getSortOrder()))
- throw new ServiceException("计划工步序号不可重复");
- step.setParametersJson(JSON.toJSONString(step.getParameters()));
- }
- }
+
private void validateThresholds(List<TTestWarningThreshold> thresholds)
{
--
Gitblit v1.7.1