package jnpf.dmsMapper; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Update; import java.util.UUID; @Mapper public interface DmsVersionStateMapper { @Insert("INSERT INTO public.dms_version_states (" + "file_version_id, tenant_id, document_id, lifecycle_status, approved_at, approved_by, " + "archived_at, effective_from, approval_source_type, approval_source_id, status_reason, " + "status_changed_by) VALUES (#{fileVersionId}, #{tenantId}, #{documentId}, 'EFFECTIVE', " + "CURRENT_TIMESTAMP, #{userId}, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'DIRECT', " + "CAST(#{fileVersionId} AS TEXT), 'DMS 临时上传直接生效', #{userId})") int insertDirectEffective(@Param("tenantId") String tenantId, @Param("documentId") UUID documentId, @Param("fileVersionId") UUID fileVersionId, @Param("userId") String userId); @Update("UPDATE public.dms_version_states SET lifecycle_status = 'SUPERSEDED', " + "effective_to = CURRENT_TIMESTAMP, status_reason = CONCAT('模拟修订,已由版本 ', " + "#{newVersionLabel}, ' 替代'), status_changed_at = CURRENT_TIMESTAMP, " + "status_changed_by = #{userId}, revision = revision + 1, updated_at = CURRENT_TIMESTAMP " + "WHERE tenant_id = #{tenantId} AND document_id = #{documentId} " + "AND file_version_id = #{fileVersionId} AND lifecycle_status = 'EFFECTIVE' " + "AND effective_from <= CURRENT_TIMESTAMP " + "AND (effective_to IS NULL OR CURRENT_TIMESTAMP < effective_to)") int supersedeCurrent(@Param("tenantId") String tenantId, @Param("documentId") UUID documentId, @Param("fileVersionId") UUID fileVersionId, @Param("newVersionLabel") String newVersionLabel, @Param("userId") String userId); @Insert("INSERT INTO public.dms_version_states (" + "file_version_id, tenant_id, document_id, lifecycle_status, approved_at, approved_by, " + "archived_at, effective_from, approval_source_type, approval_source_id, status_reason, " + "status_changed_by) VALUES (#{fileVersionId}, #{tenantId}, #{documentId}, 'EFFECTIVE', " + "CURRENT_TIMESTAMP, #{userId}, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'DIRECT', " + "CONCAT('revision:', CAST(#{baseFileVersionId} AS TEXT), ':', #{sourceId}), " + "#{revisionReason}, #{userId})") int insertRevisionEffective(@Param("tenantId") String tenantId, @Param("documentId") UUID documentId, @Param("baseFileVersionId") UUID baseFileVersionId, @Param("fileVersionId") UUID fileVersionId, @Param("sourceId") String sourceId, @Param("revisionReason") String revisionReason, @Param("userId") String userId); }