package com.aurora.service.impl; import com.aurora.model.dto.PhotoAlbumAdminDTO; import com.aurora.model.dto.PhotoAlbumDTO; 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.util.BeanCopyUtil; import com.aurora.util.PageUtil; import com.aurora.model.vo.ConditionVO; import com.aurora.model.dto.PageResultDTO; import com.aurora.model.vo.PhotoAlbumVO; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; 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 static com.aurora.constant.CommonConstant.FALSE; import static com.aurora.constant.CommonConstant.TRUE; import static com.aurora.enums.PhotoAlbumStatusEnum.PUBLIC; @Service public class PhotoAlbumServiceImpl extends ServiceImpl implements PhotoAlbumService { @Autowired private PhotoAlbumMapper photoAlbumMapper; @Autowired private PhotoMapper photoMapper; @Transactional(rollbackFor = Exception.class) @Override public void saveOrUpdatePhotoAlbum(PhotoAlbumVO photoAlbumVO) { PhotoAlbum album = photoAlbumMapper.selectOne(new LambdaQueryWrapper() .select(PhotoAlbum::getId) .eq(PhotoAlbum::getAlbumName, photoAlbumVO.getAlbumName())); if (Objects.nonNull(album) && !album.getId().equals(photoAlbumVO.getId())) { throw new BizException("相册名已存在"); } PhotoAlbum photoAlbum = BeanCopyUtil.copyObject(photoAlbumVO, PhotoAlbum.class); this.saveOrUpdate(photoAlbum); } @Override public PageResultDTO listPhotoAlbumsAdmin(ConditionVO conditionVO) { Integer count = photoAlbumMapper.selectCount(new LambdaQueryWrapper() .like(StringUtils.isNotBlank(conditionVO.getKeywords()), PhotoAlbum::getAlbumName, conditionVO.getKeywords()) .eq(PhotoAlbum::getIsDelete, FALSE)); if (count == 0) { return new PageResultDTO<>(); } List photoAlbumBacks = photoAlbumMapper.listPhotoAlbumsAdmin(PageUtil.getLimitCurrent(), PageUtil.getSize(), conditionVO); return new PageResultDTO<>(photoAlbumBacks, count); } @Override public List listPhotoAlbumInfosAdmin() { List photoAlbums = photoAlbumMapper.selectList(new LambdaQueryWrapper() .eq(PhotoAlbum::getIsDelete, FALSE)); return BeanCopyUtil.copyList(photoAlbums, PhotoAlbumDTO.class); } @Override public PhotoAlbumAdminDTO getPhotoAlbumByIdAdmin(Integer albumId) { PhotoAlbum photoAlbum = photoAlbumMapper.selectById(albumId); Integer photoCount = photoMapper.selectCount(new LambdaQueryWrapper() .eq(Photo::getAlbumId, albumId) .eq(Photo::getIsDelete, FALSE)); PhotoAlbumAdminDTO album = BeanCopyUtil.copyObject(photoAlbum, PhotoAlbumAdminDTO.class); album.setPhotoCount(photoCount); return album; } @Override @Transactional(rollbackFor = Exception.class) public void deletePhotoAlbumById(Integer albumId) { Integer count = photoMapper.selectCount(new LambdaQueryWrapper() .eq(Photo::getAlbumId, albumId)); if (count > 0) { photoAlbumMapper.updateById(PhotoAlbum.builder() .id(albumId) .isDelete(TRUE) .build()); photoMapper.update(new Photo(), new LambdaUpdateWrapper() .set(Photo::getIsDelete, TRUE) .eq(Photo::getAlbumId, albumId)); } else { photoAlbumMapper.deleteById(albumId); } } @Override public List listPhotoAlbums() { List photoAlbumList = photoAlbumMapper.selectList(new LambdaQueryWrapper() .eq(PhotoAlbum::getStatus, PUBLIC.getStatus()) .eq(PhotoAlbum::getIsDelete, FALSE) .orderByDesc(PhotoAlbum::getId)); return BeanCopyUtil.copyList(photoAlbumList, PhotoAlbumDTO.class); } }