yeg
2026-09-29 b78295e8da96c3e5e76befeef9582ce5273dbb74
battery-business/src/main/java/com/battery/business/domain/TTest.java
@@ -12,56 +12,92 @@
import jakarta.validation.constraints.Size;
import com.ruoyi.common.core.domain.BaseEntity;
/** 测试配置及其独立业务状态。 */
/**
 * 测试配置对象 t_test,含测试状态与接收状态两个并列的业务状态。
 *
 * <p>测试状态描述测试流程,接收状态描述系统对该测试的数据归属;两者都不得反向改写设备事实。</p>
 */
public class TTest extends BaseEntity
{
    private static final long serialVersionUID = 1L;
    /** 测试主键。 */
    private Long testId;
    /** 测试名称,由操作员填写,用于在同一电池组内区分测试。 */
    @NotBlank(message = "测试名称不能为空")
    @Size(max = 100, message = "测试名称长度不能超过100个字符")
    private String testName;
    /** 创建人用户 ID,创建时取当前登录用户,后续修改不可变更。 */
    private Long creatorId;
    /** 创建人显示名称,仅供列表展示,不作为身份判断依据。 */
    private String creatorName;
    /** 当前操作人用户 ID,仅由服务入参带入用于校验,不序列化也不落库。 */
    @JSONField(serialize = false)
    private transient Long operatorId;
    /** 测试负责人用户 ID,负责关闭测试预警异常和停止测试。 */
    @NotNull(message = "测试负责人不能为空")
    private Long principalId;
    /** 测试负责人显示名称,仅供列表展示,不作为身份判断依据。 */
    private String principalName;
    /** 测试类型主键,引用已启用的测试类型。 */
    @NotNull(message = "测试类型不能为空")
    private Long testTypeId;
    /** 测试类型显示名称,仅供列表展示。 */
    private String testTypeName;
    /** 测试目的,由操作员填写。 */
    @NotBlank(message = "测试目的不能为空")
    private String testPurpose;
    /**
     * 测试状态:WAITING 待测试、RUNNING 检测中、PAUSED 暂停、COMPLETED 检测完成。
     * 历史数据还可能出现 RUNNING_ABNORMAL(检测中(异常))、COMPLETION_PENDING(完成确认中)、
     * TERMINATED(已终止),只作兼容展示,新流程不再写入。
     */
    private String testStatus;
    /**
     * 接收状态:NOT_STARTED 未开始接收、RECEIVING 接收中、PAUSED 暂停接收、ENDED 已结束接收。
     * 它表示系统对本次测试的数据归属状态,与设备状态并列,不改变设备事实。
     */
    private String receptionStatus;
    /** 监测超时分钟数,创建测试时缺省 30;控制台按该值展示,不参与设备控制。 */
    private Integer monitorTimeoutMinutes;
    /** 首次开始接收动作建立的服务器时间;暂停后继续接收不再改写。 */
    @JsonFormat(shape = JsonFormat.Shape.NUMBER)
    private Date startedAtUtc;
    /** 最近一次开始或继续接收动作建立的服务器时间边界。 */
    @JsonFormat(shape = JsonFormat.Shape.NUMBER)
    private Date receptionBoundaryAtUtc;
    /** 停止测试(检测完成)动作的服务器时间;暂停不写入。 */
    @JsonFormat(shape = JsonFormat.Shape.NUMBER)
    private Date endedAtUtc;
    /** 是否从已运行设备的后续观测边界接入。 */
    private Boolean runtimeAttach;
    /** 逻辑删除标识:0存在,1删除;测试整体删除按 ADR-0047 不写审计、修订或墓碑。 */
    private String delFlag;
    /** 查询条件:按绑定电池号过滤;不落库。 */
    private String batteryNo;
    /** 查询条件:创建时间起始值。 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date beginCreateTime;
    /** 查询条件:创建时间结束值。 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date endCreateTime;
    /** 查询结果:绑定电池号数量,由列表查询汇总得出,不落库。 */
    private Integer batteryCount;
    /** 测试绑定的电池号及其通道配置;开始接收后配置整体只读。 */
    @Valid
    @NotEmpty(message = "测试至少绑定一个电池号")
    private List<TTestBattery> batteries;
    /** 测试阈值规则,接收中按当前成功观测判定超限,不参与设备侧保护。 */
    @Valid
    @NotEmpty(message = "阈值配置不能为空")
    private List<TTestWarningThreshold> thresholds;
    /** 逻辑工步映射的落库 JSON 原文。 */
    private String logicStepMappingsJson;
    /** 逻辑工步映射对象,由 JSON 解析或查询组装,不单独落库。 */
    private List<TTestLogicStepMapping> logicStepMappings;
    /** 工步图表中的测试补充详情,仅保存当前最新版。 */
    private String consoleDetailJson;
    /** 测试补充详情对象,由上述 JSON 解析或查询组装,不单独落库。 */
    private TTestConsoleDetail consoleDetail;
    /** 测试业务时间输出毫秒,平台实体仍保留原有时间格式。 */