You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

142 lines
5.7 KiB

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<PhotoMapper, Photo> implements PhotoService {
@Autowired
private PhotoMapper photoMapper;
@Autowired
private PhotoAlbumService photoAlbumService;
@Override
public PageResultDTO<PhotoAdminDTO> listPhotos(ConditionVO conditionVO) {
Page<Photo> page = new Page<>(PageUtil.getCurrent(), PageUtil.getSize());
Page<Photo> photoPage = photoMapper.selectPage(page, new LambdaQueryWrapper<Photo>()
.eq(Objects.nonNull(conditionVO.getAlbumId()), Photo::getAlbumId, conditionVO.getAlbumId())
.eq(Photo::getIsDelete, conditionVO.getIsDelete())
.orderByDesc(Photo::getId)
.orderByDesc(Photo::getUpdateTime));
List<PhotoAdminDTO> 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<Photo> 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<Photo> 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<Photo> 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<PhotoAlbum> photoAlbumList = photoMapper.selectList(new LambdaQueryWrapper<Photo>()
.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<Integer> photoIds) {
photoMapper.deleteBatchIds(photoIds);
}
@Override
public PhotoDTO listPhotosByAlbumId(Integer albumId) {
PhotoAlbum photoAlbum = photoAlbumService.getOne(new LambdaQueryWrapper<PhotoAlbum>()
.eq(PhotoAlbum::getId, albumId)
.eq(PhotoAlbum::getIsDelete, FALSE)
.eq(PhotoAlbum::getStatus, PUBLIC.getStatus()));
if (Objects.isNull(photoAlbum)) {
throw new BizException("相册不存在");
}
Page<Photo> page = new Page<>(PageUtil.getCurrent(), PageUtil.getSize());
List<String> photos = photoMapper.selectPage(page, new LambdaQueryWrapper<Photo>()
.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();
}
}