From 90b6d6768ebeebc44863850289a4696203a0cda9 Mon Sep 17 00:00:00 2001
From: yeg <1347747024@qq.com>
Date: 星期三, 09 九月 2026 12:25:33 +0800
Subject: [PATCH] 按三类数据分别保存工作簿导入修订
---
battery-business/src/main/java/com/battery/business/service/impl/TestConsoleDataServiceImpl.java | 37 ++++++++++++++++++++++++++-----------
1 files changed, 26 insertions(+), 11 deletions(-)
diff --git a/battery-business/src/main/java/com/battery/business/service/impl/TestConsoleDataServiceImpl.java b/battery-business/src/main/java/com/battery/business/service/impl/TestConsoleDataServiceImpl.java
index 7bf81d0..547d62e 100644
--- a/battery-business/src/main/java/com/battery/business/service/impl/TestConsoleDataServiceImpl.java
+++ b/battery-business/src/main/java/com/battery/business/service/impl/TestConsoleDataServiceImpl.java
@@ -33,7 +33,7 @@
@Override public List<TTestDataRevisionAction> selectActions(TTestDataRevisionAction query)
{
if (query == null) query = new TTestDataRevisionAction();
- if (query.getDataType() != null && !Set.of("REALTIME", "STEP", "CYCLE", "ALL").contains(query.getDataType())) throw new ServiceException("数据类型无效");
+ if (query.getDataType() != null && !Set.of("REALTIME", "STEP", "CYCLE").contains(query.getDataType())) throw new ServiceException("数据类型无效");
if (query.getOperationType() != null && !Set.of("EDIT", "IMPORT", "DELETE").contains(query.getOperationType())) throw new ServiceException("操作类型无效");
return mapper.selectDataRevisionActions(query);
}
@@ -44,7 +44,7 @@
/**
* 一次提交与接收、测试整体删除互斥;任一目标无效时整次动作回滚。导入仅允许检测完成的测试。
- * @return 新增修订编号;导入全部重复时返回 null,不新增修订,跳过数量写入 action。
+ * @return 首条新增修订编号,全部编号写入 action;导入全部重复时返回 null,不新增修订。
*/
@Override @Transactional(rollbackFor = Exception.class)
public Long submitAction(TTestDataRevisionAction action, List<DataRevisionItem> items)
@@ -59,6 +59,7 @@
if (test == null) throw new ServiceException("测试不存在");
action.setCreatedAtUtc(new Date());
action.setReason(action.getReason().trim());
+ action.setActionIds(List.of());
List<Map<String, Object>> before = new ArrayList<>();
List<Map<String, Object>> changes = new ArrayList<>();
List<Runnable> mutations = new ArrayList<>();
@@ -68,23 +69,38 @@
boolean workbook = "ALL".equals(action.getDataType());
Map<String, List<Map<String, Object>>> sheets = importSheets(action, workbook);
List<String> errors = new ArrayList<>();
- List<String> addedIdentities = new ArrayList<>();
+ List<TTestDataRevisionAction> revisions = new ArrayList<>();
Map<String, Map<String, Object>> bindings = new LinkedHashMap<>();
Set<String> expectedBatteries = null;
action.setImportedCount(0); action.setSkippedCount(0);
for (var sheet : sheets.entrySet())
{
+ List<String> addedIdentities = new ArrayList<>();
+ List<Map<String, Object>> sheetChanges = new ArrayList<>();
Set<String> batteries = prepareImport(action, sheet.getKey(), sheet.getValue(), workbook, bindings,
- errors, addedIdentities, changes, mutations);
+ errors, addedIdentities, sheetChanges, mutations);
if (workbook && expectedBatteries != null && !expectedBatteries.equals(batteries))
errors.add(sheetLabel(sheet.getKey()) + "工作表,列「电池号」:三个 Sheet 的电池号集合不一致");
expectedBatteries = batteries;
+ var revision = new TTestDataRevisionAction();
+ revision.setTestId(action.getTestId()); revision.setDataType(sheet.getKey()); revision.setOperationType("IMPORT");
+ revision.setScopeSummary("导入" + sheetChanges.size() + "条" + sheetLabel(sheet.getKey()) + "数据");
+ revision.setIdentitySummary(JSON.toJSONString(addedIdentities));
+ revision.setChangesSummary(JSON.toJSONString(sheetChanges)); revision.setBeforeContentJson("[]");
+ revision.setOperatorId(action.getOperatorId()); revision.setOperatorName(action.getOperatorName());
+ revision.setReason(action.getReason()); revision.setCreatedAtUtc(action.getCreatedAtUtc());
+ revisions.add(revision);
+ action.setImportedCount(action.getImportedCount() + sheetChanges.size());
}
- // 三类全量校验后才执行写入,共享测试行锁、事务和唯一修订编号;失败不留下部分数据或修订。
+ // ALL 仅为请求调度标记;三类全量校验后按类型写修订,共享测试行锁和事务。
+ // 整批全重复不留修订;部分重复仍分别记录各类实际新增数量,失败全部回滚。
if (!errors.isEmpty()) throw new ServiceException(String.join(";", errors));
- action.setImportedCount(changes.size());
- action.setIdentitySummary(JSON.toJSONString(addedIdentities));
- if (changes.isEmpty()) return null;
+ if (action.getImportedCount() == 0) return null;
+ revisions.forEach(mapper::insertDataRevisionAction);
+ mutations.forEach(Runnable::run);
+ action.setActionIds(revisions.stream().map(TTestDataRevisionAction::getActionId).toList());
+ action.setActionId(action.getActionIds().get(0));
+ return action.getActionId();
}
else
{
@@ -129,6 +145,7 @@
action.setChangesSummary(JSON.toJSONString("DELETE".equals(action.getOperationType()) ? before : changes));
mapper.insertDataRevisionAction(action);
mutations.forEach(Runnable::run);
+ action.setActionIds(List.of(action.getActionId()));
return action.getActionId();
}
@@ -186,11 +203,9 @@
continue;
}
identities.put(identity, values);
- String revisionIdentity = workbook ? type + ":" + identity : identity;
- addedIdentities.add(revisionIdentity);
+ addedIdentities.add(identity);
mutations.add(() -> mapper.insertImportedDataRecord(type, values));
Map<String, Object> change = new LinkedHashMap<>(row);
- if (workbook) { change.put("dataType", type); change.put("identity", revisionIdentity); }
changes.add(change);
}
catch (ServiceException ex) { errors.add((workbook ? sheetLabel(type) + "工作表," : "") + "第" + sourceRow + "行," + ex.getMessage()); }
--
Gitblit v1.7.1