package cc.mrbird.febs.video.service.impl; import cc.mrbird.febs.common.entity.QueryRequest; import cc.mrbird.febs.common.exception.FebsException; import cc.mrbird.febs.common.utils.AppContants; import cc.mrbird.febs.common.utils.LoginUserUtil; import cc.mrbird.febs.video.conversion.VideoConversion; import cc.mrbird.febs.video.conversion.VideoMemberConversion; import cc.mrbird.febs.video.dto.VideoListDto; import cc.mrbird.febs.video.entity.*; import cc.mrbird.febs.video.mapper.*; import cc.mrbird.febs.video.service.IVideoMasterInfoService; import cc.mrbird.febs.video.vo.VideoInfoItemVo; import cc.mrbird.febs.video.vo.VideoInfoVo; import cc.mrbird.febs.video.vo.VideoListVo; import cn.hutool.core.collection.CollUtil; 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.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; /** * @author wzy * @date 2021-12-15 **/ @Slf4j @Service @RequiredArgsConstructor public class VideoMasterInfoServiceImpl extends ServiceImpl implements IVideoMasterInfoService { private final VideoMasterItemsMapper videoMasterItemsMapper; private final VideoMasterSourceMapper videoMasterSourceMapper; private final VideoMasterDataMapper videoMasterDataMapper; private final VideoMemberMapper videoMemberMapper; @Override public IPage findInPage(VideoMasterInfoEntity info, QueryRequest request) { Page page = new Page<>(request.getPageNum(), request.getPageSize()); return this.baseMapper.selectInPage(info, page); } @Override @Transactional(rollbackFor = Exception.class) public void addVideo(VideoMasterInfoEntity info) { this.baseMapper.insert(info); List items = info.getItems(); if (CollUtil.isEmpty(items)) { throw new FebsException("章节异常"); } int i = 1; for (VideoMasterItemsEntity item : items) { if (StrUtil.isBlank(item.getName())){ throw new FebsException("章节标题未填写"); } VideoMasterSourceEntity source = this.videoMasterSourceMapper.selectById(item.getSourceId()); item.setMasterId(info.getId()); item.setSeq(i); item.setVideoUrl(source.getUrl()); this.videoMasterItemsMapper.insert(item); i++; } VideoMasterDataEntity data = new VideoMasterDataEntity(); data.setMasterId(info.getId()); data.setCollectCnt(0); data.setPlayCnt(0); data.setStarCnt(0); this.videoMasterDataMapper.insert(data); } @Override @Transactional(rollbackFor = Exception.class) public void updateVideo(VideoMasterInfoEntity info) { this.baseMapper.updateById(info); // List beforeItems = this.videoMasterItemsMapper.selectItemsByMasterId(info.getId()); List newItems = info.getItems(); if (CollUtil.isEmpty(newItems)) { throw new FebsException("章节异常"); } List existID = new ArrayList<>(); List newInsert = new ArrayList<>(); int i = 1; for (VideoMasterItemsEntity newItem : newItems) { if (StrUtil.isBlank(newItem.getName())) { throw new FebsException("章节标题未填写"); } if (newItem.getId() != null) { newItem.setSeq(i); this.videoMasterItemsMapper.updateById(newItem); existID.add(newItem.getId()); i++; } else { newInsert.add(newItem); } } if (CollUtil.isNotEmpty(existID)) { this.videoMasterItemsMapper.deleteNotInIds(existID, info.getId()); } if (CollUtil.isNotEmpty(newInsert)) { for (VideoMasterItemsEntity item : newInsert) { VideoMasterSourceEntity source = this.videoMasterSourceMapper.selectById(item.getSourceId()); item.setMasterId(info.getId()); item.setVideoUrl(source.getUrl()); item.setSeq(i); this.videoMasterItemsMapper.insert(item); i++; } } } @Override public VideoMasterInfoEntity findById(Long id) { return this.baseMapper.selectEntityById(id); } @Override public void changeIsUp(Long id) { VideoMasterInfoEntity masterInfo = this.baseMapper.selectById(id); if (masterInfo == null) { throw new FebsException("视频不存在"); } if (AppContants.FLAG_INT_Y.equals(masterInfo.getIsUp())) { masterInfo.setIsUp(AppContants.FLAG_INT_N); } else { masterInfo.setIsUp(AppContants.FLAG_INT_Y); } this.baseMapper.updateById(masterInfo); } @Override public List findVideoList(VideoListDto videoListDto) { Page page = new Page<>(videoListDto.getPageNum(), videoListDto.getPageSize()); videoListDto.setIsUp(AppContants.FLAG_INT_Y); IPage data = this.baseMapper.selectVideoListInPage(videoListDto, page); return data.getRecords(); } @Override public VideoInfoVo findVideoInfo(Long videoId, Long itemId) { VideoMasterInfoEntity videoInfoEntity = this.baseMapper.selectEntityById(videoId); if (videoInfoEntity == null) { throw new FebsException("视频不存在"); } VideoInfoVo videoInfoVo = VideoConversion.INSTANCE.videoInfoEntityToInfoVo(videoInfoEntity); List items = VideoConversion.INSTANCE.videoItemEntitiesToItemVoes(videoInfoEntity.getItems()); videoInfoVo.setItems(items); VideoMasterDataEntity data = this.videoMasterDataMapper.selectDataByMasterId(videoInfoEntity.getId()); videoInfoVo.setPlayCnt(data.getPlayCnt()); videoInfoVo.setCollectCnt(data.getCollectCnt()); videoInfoVo.setStarCnt(data.getStarCnt()); VideoMemberEntity loginUser = LoginUserUtil.getLoginUser(); if (loginUser == null) { videoInfoVo.setNotLogin(AppContants.FLAG_INT_N); return videoInfoVo; } if (AppContants.FLAG_INT_N.equals(videoInfoEntity.getIsFree())) { VideoMemberEntity member = this.videoMemberMapper.selectById(loginUser.getId()); if (AppContants.FLAG_INT_N.equals(member.getIsVip())) { videoInfoVo.setNotVip(AppContants.FLAG_INT_N); return videoInfoVo; } } VideoMasterItemsEntity currentItem = this.videoMasterItemsMapper.selectItemByVideoIdAndItemId(videoId, itemId); if (currentItem == null) { throw new FebsException("视频不存在"); } videoInfoVo.setNotLogin(AppContants.FLAG_INT_Y); videoInfoVo.setNotVip(AppContants.FLAG_INT_Y); videoInfoVo.setSubTitle(currentItem.getName()); videoInfoVo.setVideoUrl(currentItem.getVideoUrl()); videoInfoVo.setThumb(currentItem.getThumb()); videoInfoVo.setItemId(currentItem.getId()); videoInfoVo.setTimeLength(currentItem.getTimeLength()); return videoInfoVo; } }