package com.baiyue.common.event; import java.time.Instant; /** * 海外仓柜级卸柜完成事实;国内订舱 ID 是稳定聚合与幂等标识,containerNo 用于核对物理柜号。 * unloadingCompletedAt 是全柜 complete 时刻,不得使用签收拍照上传时刻代替。 */ public record OverseasContainerUnloadedV1( String sourceContainerBookingId, String containerNo, Instant unloadingCompletedAt, Instant unloadingPhotoUploadedAt, Instant actualEmptyReportedAt ) { public OverseasContainerUnloadedV1 { if (sourceContainerBookingId == null || sourceContainerBookingId.isBlank()) { throw new IllegalArgumentException("sourceContainerBookingId is required"); } containerNo = ContainerNumbers.requireCanonical(containerNo); } }