package jnpf.dmsService.center; import jnpf.dmsIntegration.audit.DmsVersionStateAuditRow; import jnpf.dmsEntity.storage.entity.DmsFileObjectEntity; import jnpf.dmsEntity.permission.entity.DmsFileVersionEntity; import jnpf.dmsEntity.center.DmsCenterVersionSnapshot; import jnpf.dmsEntity.storage.vo.DmsFileUploadVO; import jnpf.dmsMapper.*; import jnpf.exception.DataException; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import java.util.UUID; /** Center reads. Business adapters must not join center tables in their mappers. */ @Service @RequiredArgsConstructor public class DmsCenterQueryService { private final DmsFileVersionMapper versions; private final DmsDocumentMapper documents; private final DmsVersionStateMapper states; private final DmsFileObjectMapper objects; public DmsFileUploadVO registration(String tenantId, String serviceId, String sourceKey) { return objects.selectUploadBySource(tenantId, serviceId, sourceKey); } public DmsCenterVersionSnapshot version(String tenantId, UUID versionId) { DmsFileVersionEntity version = versions.selectByTenantAndId(tenantId, versionId); if (version == null) return null; DmsVersionStateAuditRow state = states.selectAuditState(tenantId, versionId); DmsFileObjectEntity object = objects.selectByTenantAndFileVersionId(tenantId, versionId); return new DmsCenterVersionSnapshot(version.getDocumentId(), version.getId(), version.getVersionLabel(), version.getChecksumSha256(), version.getPreparedBy(), version.getPreparedOn(), object == null ? null : object.getId(), state == null ? null : state.getLifecycleStatus(), state == null ? null : state.getEffectiveFrom(), state == null ? null : state.getEffectiveTo()); } public void requireUnusedReservation(String tenantId, UUID documentId, UUID versionId, boolean newDocument) { if (versions.selectByTenantAndId(tenantId, versionId) != null || (newDocument && documents.selectByTenantAndId(tenantId, documentId) != null)) throw new DataException("旧登记ID已被使用,不能自动替换预留ID"); } }