package com.battery.business.report; import java.util.List; import java.util.Map; import jakarta.validation.Valid; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Positive; import jakarta.validation.constraints.Size; /** 首次保存仅接收来源身份和报表展示内容,不接收测量快照。 */ public record CompareReportRequest( @NotBlank @Size(max = 100) String name, @Size(max = 2000) String description, @Size(max = 500) String experimentName, @NotNull @Size(min = 2) List<@NotNull @Valid Selection> selections, @NotNull @Valid Settings settings) { public record Selection(@NotNull @Positive Long testId, @NotNull @Positive Long testBatteryId, @NotNull @Positive Integer cycleNo, @Positive Integer stepNo, @Positive Integer logicalNo) { } public record Settings(@NotNull List metrics, @NotNull List seriesColors, @NotNull List batteryTemplateFields, @NotNull List specialFields, @NotNull Map> detailFieldValues, List<@NotNull @Valid CompareField> fieldStructure, Map sourceDetailOverrides) { /** 展示设置不能夹带测量快照或其他未支持的修改。 */ @com.fasterxml.jackson.annotation.JsonAnySetter public void rejectUnknown(String field, Object value) { throw new com.ruoyi.common.exception.ServiceException("报表设置不允许提交字段:" + field); } } /** 只记录报表中明确修改的格;缺失与空字符串分别表示未修改和人工清空。 */ public record SourceDetailOverride(@Size(max = 500) String experimentName, Map fieldValues) { } }