package com.aurora.service.impl; import com.aurora.model.dto.PageResultDTO; import com.aurora.model.dto.PhotoAdminDTO; import com.aurora.model.dto.PhotoAlbumAdminDTO; import com.aurora.model.dto.PhotoDTO; import com.aurora.entity.Photo; import com.aurora.entity.PhotoAlbum; import com.aurora.exception.BizException; import com.aurora.mapper.PhotoAlbumMapper; import com.aurora.mapper.PhotoMapper; import com.aurora.service.PhotoAlbumService; import com.aurora.service.PhotoService; import com.aurora.util.BeanCopyUtil; import com.aurora.util.PageUtil; import com.aurora.model.vo.*; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; import static com.aurora.constant.CommonConstant.FALSE; import static com.aurora.enums.PhotoAlbumStatusEnum.PUBLIC; @Service public class PhotoServiceImpl extends ServiceImpl implements PhotoService { @Autowired private PhotoMapper photoMapper; @Autowired private PhotoAlbumService photoAlbumService; @Override public PageResultDTO listPhotos(ConditionVO conditionVO) { Page page = new Page<>(PageUtil.getCurrent(), PageUtil.getSize()); Page photoPage = photoMapper.selectPage(page, new LambdaQueryWrapper() .eq(Objects.nonNull(conditionVO.getAlbumId()), Photo::getAlbumId, conditionVO.getAlbumId()) .eq(Photo::getIsDelete, conditionVO.getIsDelete()) .orderByDesc(Photo::getId) .orderByDesc(Photo::getUpdateTime)); List photos = BeanCopyUtil.copyList(photoPage.getRecords(), PhotoAdminDTO.class); return new PageResultDTO<>(photos, (int) photoPage.getTotal()); } @Transactional(rollbackFor = Exception.class) @Override public void updatePhoto(PhotoInfoVO photoInfoVO) { Photo photo = BeanCopyUtil.copyObject(photoInfoVO, Photo.class); photoMapper.updateById(photo); } @Transactional(rollbackFor = Exception.class) @Override public void savePhotos(PhotoVO photoVO) { List photoList = photoVO.getPhotoUrls().stream().map(item -> Photo.builder() .albumId(photoVO.getAlbumId()) .photoName(IdWorker.getIdStr()) .photoSrc(item) .build()) .collect(Collectors.toList()); this.saveBatch(photoList); } @Transactional(rollbackFor = Exception.class) @Override public void updatePhotosAlbum(PhotoVO photoVO) { List photoList = photoVO.getPhotoIds().stream().map(item -> Photo.builder() .id(item) .albumId(photoVO.getAlbumId()) .build()) .collect(Collectors.toList()); this.updateBatchById(photoList); } @Transactional(rollbackFor = Exception.class) @Override public void updatePhotoDelete(DeleteVO deleteVO) { List photoList = deleteVO.getIds().stream().map(item -> Photo.builder() .id(item) .isDelete(deleteVO.getIsDelete()) .build()) .collect(Collectors.toList()); this.updateBatchById(photoList); if (deleteVO.getIsDelete().equals(FALSE)) { List photoAlbumList = photoMapper.selectList(new LambdaQueryWrapper() .select(Photo::getAlbumId) .in(Photo::getId, deleteVO.getIds()) .groupBy(Photo::getAlbumId)) .stream() .map(item -> PhotoAlbum.builder() .id(item.getAlbumId()) .isDelete(FALSE) .build()) .collect(Collectors.toList()); photoAlbumService.updateBatchById(photoAlbumList); } } @Transactional(rollbackFor = Exception.class) @Override public void deletePhotos(List photoIds) { photoMapper.deleteBatchIds(photoIds); } @Override public PhotoDTO listPhotosByAlbumId(Integer albumId) { PhotoAlbum photoAlbum = photoAlbumService.getOne(new LambdaQueryWrapper() .eq(PhotoAlbum::getId, albumId) .eq(PhotoAlbum::getIsDelete, FALSE) .eq(PhotoAlbum::getStatus, PUBLIC.getStatus())); if (Objects.isNull(photoAlbum)) { throw new BizException("相册不存在"); } Page page = new Page<>(PageUtil.getCurrent(), PageUtil.getSize()); List photos = photoMapper.selectPage(page, new LambdaQueryWrapper() .select(Photo::getPhotoSrc) .eq(Photo::getAlbumId, albumId) .eq(Photo::getIsDelete, FALSE) .orderByDesc(Photo::getId)) .getRecords() .stream() .map(Photo::getPhotoSrc) .collect(Collectors.toList()); return PhotoDTO.builder() .photoAlbumCover(photoAlbum.getAlbumCover()) .photoAlbumName(photoAlbum.getAlbumName()) .photos(photos) .build(); } }