fix(media): 重转码物理清理旧产物避免唯一键冲突
This commit is contained in:
1 parent
e6b4a747ce
commit
e730cfaa7d
2 files changed
+13
-9
No files matched your search
+11
@@ -4,6 +4,17 @@ package com.fruitshorts.media.dal.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.fruitshorts.media.dal.entity.MediaRendition;
|
||||
import org.apache.ibatis.annotations.Delete;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
public interface MediaRenditionMapper extends BaseMapper<MediaRendition> {
|
||||
|
||||
/**
|
||||
* 物理删除旧产物。唯一索引 uk_rendition(media_asset_id, quality, format) 不含 deleted,
|
||||
* 逻辑删除的旧行会继续占着唯一键,重转时插入必然冲突,所以这里必须绕过 @TableLogic 真删。
|
||||
*/
|
||||
@Delete("<script>DELETE FROM media_rendition WHERE media_asset_id = #{mediaAssetId}"
|
||||
+ "<if test='episodeId != null and episodeId > 0'> OR episode_id = #{episodeId}</if>"
|
||||
+ "</script>")
|
||||
int deletePhysically(@Param("mediaAssetId") Long mediaAssetId, @Param("episodeId") Long episodeId);
|
||||
}
|
||||
+2
-9
@@ -217,15 +217,8 @@ public class TranscodeService {
|
||||
public void succeed(Long taskId, List<MediaRendition> renditions,
|
||||
MediaThumbnail thumbnail) {
|
||||
TranscodeTask task = getExisting(taskId);
|
||||
var renditionDelete = Wrappers.<MediaRendition>lambdaQuery();
|
||||
if (task.getEpisodeId() != null && task.getEpisodeId() > 0) {
|
||||
renditionDelete.and(wrapper -> wrapper
|
||||
.eq(MediaRendition::getMediaAssetId, task.getMediaAssetId())
|
||||
.or().eq(MediaRendition::getEpisodeId, task.getEpisodeId()));
|
||||
} else {
|
||||
renditionDelete.eq(MediaRendition::getMediaAssetId, task.getMediaAssetId());
|
||||
}
|
||||
mediaRenditionMapper.delete(renditionDelete);
|
||||
// 唯一索引不含 deleted,旧产物必须物理删除,否则重转时插入会撞 uk_rendition
|
||||
mediaRenditionMapper.deletePhysically(task.getMediaAssetId(), task.getEpisodeId());
|
||||
for (MediaRendition rendition : renditions) {
|
||||
rendition.setMediaAssetId(task.getMediaAssetId());
|
||||
rendition.setDramaId(task.getDramaId());
|
||||
|
||||
Reference in new issue
Block a user