package com.rj.mapper; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.rj.entity.AudioManagementSegments; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update; import java.util.List; /** *

* 录音分段管理表 Mapper 接口 *

* * 对应表:audio_management_segments */ @Mapper public interface AudioManagementSegmentsMapper extends BaseMapper { /** * 本地路径已填、MinIO URL 未填的分段。使用注解 SQL,避免 Lambda 条件生成 audio_file_url / audio_file_path 的多余占位符, * 并在此方法上关闭租户行插件(否则会出现 tenant_id = null 等错误条件)。 */ @InterceptorIgnore(tenantLine = "true") @Select("SELECT * FROM audio_management_segments WHERE (audio_file_url IS NULL OR audio_file_url = '') " + "AND audio_file_path IS NOT NULL AND audio_file_path <> '' " + "ORDER BY create_time ASC LIMIT #{limit}") List listSegmentsNeedingMinioUpload(@Param("limit") int limit); /** * 仅按主键更新 MinIO URL,不拼接 tenant_id(供调度任务等无租户上下文场景使用)。 */ @InterceptorIgnore(tenantLine = "true") @Update("UPDATE audio_management_segments SET audio_file_url = #{audioFileUrl} WHERE id = #{id}") int updateAudioFileUrlByIdIgnoreTenant(@Param("id") String id, @Param("audioFileUrl") String audioFileUrl); /** 依原始音频文件名更新分段转写文本(调度任务等无租户上下文场景)。 */ @InterceptorIgnore(tenantLine = "true") @Update("UPDATE audio_management_segments SET recording_text = #{recordingText} " + "WHERE audio_file_original_name = #{audioFileOriginalName}") int updateRecordingTextByAudioFileOriginalNameIgnoreTenant( @Param("recordingText") String recordingText, @Param("audioFileOriginalName") String audioFileOriginalName); /** 音频移至完成目录后,按原始文件名回写磁盘路径(与外部 ASR 脚本行为一致)。 */ @InterceptorIgnore(tenantLine = "true") @Update("UPDATE audio_management_segments SET audio_file_path = #{audioFilePath} " + "WHERE audio_file_original_name = #{audioFileOriginalName}") int updateAudioFilePathByAudioFileOriginalNameIgnoreTenant( @Param("audioFilePath") String audioFilePath, @Param("audioFileOriginalName") String audioFileOriginalName); @InterceptorIgnore(tenantLine = "true") @Select("SELECT parent_id FROM audio_management_segments WHERE audio_file_original_name = #{audioFileOriginalName} " + "LIMIT 1") String selectParentIdByAudioFileOriginalNameLimit1(@Param("audioFileOriginalName") String audioFileOriginalName); /** 汇总父录音下各段文本与时长(仅查必要列)。 */ @InterceptorIgnore(tenantLine = "true") @Select("SELECT id, recording_text, duration FROM audio_management_segments WHERE parent_id = #{parentId} " + "ORDER BY id ASC") List listRecordingPartsByParentId(@Param("parentId") String parentId); }