package jnpf.dmsMapper; import jnpf.dmsEntity.search.model.DmsSearchIndexSource; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import java.util.UUID; import java.util.List; @Mapper public interface DmsSearchIndexSourceMapper { @Select("") List currentVersionIds(@Param("tenantId") String tenantId, @Param("ids") List ids); @Select("WITH RECURSIVE folder_chain AS (" + "SELECT f.id, f.parent_id, f.name, 0 AS depth FROM public.dms_folders f " + "JOIN public.dms_documents source_document " + "ON source_document.tenant_id = f.tenant_id AND source_document.folder_id = f.id " + "WHERE source_document.tenant_id = #{tenantId} " + "AND source_document.id = #{documentId} AND f.f_delete_mark IS NULL " + "UNION ALL SELECT parent.id, parent.parent_id, parent.name, child.depth + 1 " + "FROM public.dms_folders parent JOIN folder_chain child " + "ON child.parent_id = parent.id WHERE parent.tenant_id = #{tenantId} " + "AND parent.f_delete_mark IS NULL) " + "SELECT d.tenant_id, d.id AS document_id, v.id AS file_version_id, " + "d.folder_id, (SELECT string_agg(name, '/' ORDER BY depth DESC) FROM folder_chain) " + "AS folder_path, d.document_no, d.name AS document_name, d.document_type, " + "d.responsible_dept_id, v.version_label, v.file_name, v.mime_type, " + "COALESCE(s.lifecycle_status, 'UNKNOWN') AS lifecycle_status, " + "COALESCE(s.revision, 0) AS state_revision, v.created_at " + "FROM public.dms_documents d JOIN public.dms_file_versions v " + "ON v.tenant_id = d.tenant_id AND v.document_id = d.id " + "JOIN public.dms_version_states s ON s.tenant_id = v.tenant_id " + "AND s.document_id = v.document_id AND s.file_version_id = v.id " + "WHERE d.tenant_id = #{tenantId} AND d.id = #{documentId} " + "AND v.id = #{fileVersionId} AND s.lifecycle_status = 'EFFECTIVE' " + "AND s.effective_from <= CURRENT_TIMESTAMP " + "AND (s.effective_to IS NULL OR CURRENT_TIMESTAMP < s.effective_to) LIMIT 1") DmsSearchIndexSource selectSource(@Param("tenantId") String tenantId, @Param("documentId") UUID documentId, @Param("fileVersionId") UUID fileVersionId); }