| | |
| | | if (request == null || request.selections() == null || request.selections().size() < 2) |
| | | throw new ServiceException("请至少添加两条比对项"); |
| | | validateSettings(request.settings()); |
| | | validateHiddenSeries(request.settings(), request.selections()); |
| | | List<Item> items = preview(request.selections()).stream().map(item -> new Item(item.source(), item.zeroTime(), item.records(), item.logicalMapping(), |
| | | item.businessFields().stream().filter(field -> selectedBusinessField(field, request.settings())).toList())).toList(); |
| | | Map<String, Object> snapshot = new LinkedHashMap<>(); |
| | |
| | | { |
| | | var snapshot = currentSnapshot(id, request.baseVersionNo()); |
| | | validateSettings(request.settings()); |
| | | var items = JSON.parseArray(JSON.toJSONString(snapshot.get("items")), Item.class); |
| | | validateHiddenSeries(request.settings(), items.stream().map(item -> item.source().selection()).toList()); |
| | | snapshot.put("name", request.name().trim()); snapshot.put("description", request.description()); |
| | | snapshot.put("experimentName", request.experimentName()); snapshot.put("settings", snapshotSettings(request.settings())); |
| | | reports.append(id, request.baseVersionNo() + 1, request.name().trim(), JSON.toJSONString(snapshot, JSONWriter.Feature.WriteMapNullValue), |
| | |
| | | && (field.fieldDefinitionId() == null ? field.name().equals(value.getFieldName()) : field.fieldDefinitionId().equals(value.getFieldDefinitionId()))); |
| | | } |
| | | |
| | | private void validateHiddenSeries(CompareReportRequest.Settings settings, List<Selection> selections) |
| | | { |
| | | // 仅允许隐藏本版本的完整来源范围,不按同名测试或电池合并身份。 |
| | | var hidden = settings.hiddenSeriesKeys(); |
| | | if (hidden == null) return; |
| | | var keys = selections.stream().map(item -> item.testId() + "|" + item.testBatteryId() + "|" + item.cycleNo() |
| | | + "|" + Objects.toString(item.stepNo(), "") + "|" + Objects.toString(item.logicalNo(), "")).toList(); |
| | | if (hidden.stream().anyMatch(Objects::isNull) || new HashSet<>(hidden).size() != hidden.size() || !keys.containsAll(hidden)) |
| | | throw new ServiceException("隐藏曲线必须属于当前报表且不能重复"); |
| | | } |
| | | |
| | | private Map<String, Object> snapshotSettings(CompareReportRequest.Settings settings) |
| | | { |
| | | var result = new LinkedHashMap<String, Object>(); |
| | | result.put("metrics", settings.metrics()); result.put("seriesColors", settings.seriesColors()); |
| | | result.put("batteryTemplateFields", settings.batteryTemplateFields()); result.put("specialFields", settings.specialFields()); |
| | | result.put("detailFieldValues", settings.detailFieldValues()); |
| | | // 旧版缺少显隐设置时保持原快照结构,新增设置只随新版本冻结。 |
| | | if (settings.hiddenSeriesKeys() != null) result.put("hiddenSeriesKeys", settings.hiddenSeriesKeys()); |
| | | // 独立复制结构而非保存模板引用,重开、编辑与打印均不重新读取模板或共享定义。 |
| | | if (settings.fieldStructure() != null) result.put("fieldStructure", settings.fieldStructure()); |
| | | return result; |