package cc.mrbird.febs.video.service.impl; import cc.mrbird.febs.common.entity.QueryRequest; import cc.mrbird.febs.common.utils.AppContants; import cc.mrbird.febs.common.utils.FileUtil; import cc.mrbird.febs.video.entity.VideoMasterSourceEntity; import cc.mrbird.febs.video.mapper.VideoMasterItemsMapper; import cc.mrbird.febs.video.mapper.VideoMasterSourceMapper; import cc.mrbird.febs.video.service.IVideoMasterSourceService; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.io.File; import java.util.Date; import java.util.List; /** * @author wzy * @date 2021-12-14 **/ @Slf4j @Service @RequiredArgsConstructor public class VideoMasterSourceServiceImpl extends ServiceImpl implements IVideoMasterSourceService { private final VideoMasterItemsMapper videoMasterItemsMapper; @Value("${system.images.path}") private String baseSavePath; @Value("${system.images.url}") private String baseUrl; @Override public IPage findInPage(VideoMasterSourceEntity source, QueryRequest queryRequest) { Page page = new Page<>(queryRequest.getPageNum(), queryRequest.getPageSize()); return this.baseMapper.selectInPage(source, page); } @Override public void addSource(VideoMasterSourceEntity source) { Integer second = getVideoTimeLength(source.getUrl()); source.setTimeSecond(second); source.setTimeLength(timeFormat(second)); this.baseMapper.insert(source); } @Transactional @Override public void modifySourceById(VideoMasterSourceEntity source) { Integer second = getVideoTimeLength(source.getUrl()); source.setUpdatedTime(new Date()); source.setTimeSecond(second); source.setTimeLength(timeFormat(second)); this.baseMapper.updateById(source); // 同步修改 即将所有关联到这个资源的视频中的url更新为最新url if (AppContants.FLAG_INT_Y.equals(source.getIsSyncUpdate())) { this.videoMasterItemsMapper.updateVideoUrlBySourceId(source.getUrl(), source.getId()); } } @Override public void delSource(String ids) { List idList = StrUtil.split(ids, ','); this.baseMapper.updateDelFlag(AppContants.FLAG_INT_Y, idList); } private Integer getVideoTimeLength(String url) { Assert.notBlank(url); String filePath = baseSavePath + url.replaceAll(baseUrl, ""); File file = new File(filePath); return FileUtil.getVideoTimeSecond(file); } private String timeFormat(Integer time) { int minutes = time / 60; int second = time - time * 60; return minutes + ":" + second; } }