| | |
| | | @NotNull @Size(min=2) List<@NotNull @Valid Selection> selections, @NotNull Map<String,Object> settings) { |
| | | public record Selection(@NotNull @Positive Long testId, @NotNull @Positive Long testBatteryId) {} |
| | | public record Edit(@Positive int baseVersionNo, @NotBlank @Size(max=100) String name, String description, |
| | | @Size(min=2) List<@NotNull @Valid Selection> selections, |
| | | @NotNull Map<String,Object> settings, @NotBlank @Size(max=500) String changeSummary) {} |
| | | } |
| | |
| | | return result; |
| | | } |
| | | |
| | | /** 普通编辑只追加展示设置,保留原版本来源、计算原值及字段事实。 */ |
| | | /** 普通编辑重算当前选择的来源段并追加新版本,历史版本保持冻结。 */ |
| | | @Transactional |
| | | public Map<String,Object> edit(long id, SpliceReportRequest.Edit request, long uid, String user) { |
| | | var snapshot = current(id, request.baseVersionNo()); |
| | | var settings = settings(request.settings(), false); |
| | | validateStatistics(settings, segments(snapshot)); |
| | | validateSourceDetails(settings, segments(snapshot)); |
| | | var selections = request.selections(); |
| | | Matrix matrix; |
| | | if (selections == null) { |
| | | // 兼容既有编辑调用:未提交来源时只修改展示设置,不重新读取来源事实。 |
| | | selections = JSON.parseArray(snapshot.getString("selections"), SpliceReportRequest.Selection.class); |
| | | matrix = new Matrix(segments(snapshot), snapshot.getJSONArray("cycleNos").toJavaList(Integer.class)); |
| | | } else { |
| | | matrix = freeze(preview(selections), fields(settings)); |
| | | } |
| | | validateStatistics(settings, matrix.segments()); |
| | | validateSourceDetails(settings, matrix.segments()); |
| | | snapshot.put("selections", selections); |
| | | snapshot.put("segments", matrix.segments()); |
| | | snapshot.put("cycleNos", matrix.cycleNos()); |
| | | snapshot.put("name", request.name().trim()); snapshot.put("description", request.description()); snapshot.put("settings", settings); |
| | | reports.append(id, request.baseVersionNo() + 1, request.name().trim(), snapshot.toJSONString(), uid, user, request.changeSummary().trim()); |
| | | return get(id, null); |