Package com.skyline.wo.service.impl

Source Code of com.skyline.wo.service.impl.AlbumServiceImpl

package com.skyline.wo.service.impl;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import net.imagine.provider.skyline.ImageResizeResult;

import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;

import com.skyline.base.exception.NoOperatePermissionException;
import com.skyline.base.exception.NoResourceException;
import com.skyline.base.exception.OperateFailedException;
import com.skyline.base.type.Activity;
import com.skyline.common.bean.Page;
import com.skyline.user.model.User;
import com.skyline.wo.dao.AlbumDao;
import com.skyline.wo.dao.PhotoDao;
import com.skyline.wo.model.Album;
import com.skyline.wo.model.Photo;
import com.skyline.wo.service.AlbumService;

@Service("albumService")
public class AlbumServiceImpl implements AlbumService {
  @Autowired
  private AlbumDao albumDao;
  @Autowired
  private PhotoDao photoDao;
  @Value("${album.cover.defaultCover}")
  private String cover;
  @Value("${album.cover.defaultExt}")
  private String ext;

  @Override
  public List<Album> listAlbumDetailsOfUserWithPortrait(long ownerId, long viewerId,
      int authority, Page page) {
    if (ownerId == 0) {
      ownerId = viewerId;
    }
    // 两者都为0,这种情况不应该存在
    if (ownerId == 0) {
      throw new NoResourceException("Id为0用户相册列表不存在");
    }
    return albumDao.queryAlbumDetailsByUserIdWithPortrait(ownerId, authority, page);
  }

  @Override
  public List<Album> listAlbumsOfUserWithoutPortrait(long ownerId, long viewerId, int authority,
      Page page) {
    if (ownerId == 0) {
      ownerId = viewerId;
    }
    // 两者都为0,这种情况不应该存在
    if (ownerId == 0) {
      throw new NoResourceException("Id为0用户相册列表不存在");
    }
    return albumDao.queryAlbumsByUserIdWithoutPortrait(ownerId, authority, page);
  }

  @Override
  public Album getAlbumById(long albumId) {
    Album album = albumDao.queryAlbumById(albumId);
    if (album == null) {
      throw new NoResourceException("Id为" + albumId + "的相册不存在");
    }
    Activity act = album.getActivity();
    if (act == Activity.DELETED || act == Activity.FREEZED) {
      throw new NoResourceException("Id为" + albumId + "的相册已删除或者已被屏蔽");
    }
    return album;
  }

  @Override
  public List<Photo> listPhotosOfAlbum(long albumId, long viewerId, int authority, Page page,
      boolean addVisit) {
    if (albumId == 0) {
      throw new NoResourceException("Id为0的相册不存在");
    }
    List<Photo> photos = photoDao.queryPhotosWithDetailOfAlbum(albumId, authority, page);
    // 非当前用户需要
    if (photos != null && !photos.isEmpty()) {
      long ownerId = photos.get(0).getOwnerId();
      if (addVisit && ownerId != viewerId) {
        albumDao.updateVisitCount(ownerId, albumId, 1);
      }
    }
    return photos;
  }

  @Override
  public void editAlbum(Album newAlbum) {
    Long albumId = newAlbum.getId();
    Long ownerId = newAlbum.getOwnerId();
    String newAlbumName = newAlbum.getAlbumName();
    String newPlace = newAlbum.getPlace();
    String newDescription = newAlbum.getDescription();
    Integer newAuthority = newAlbum.getAuthority();

    Album oldAlbum = getAlbumForChange(albumId, ownerId);
    boolean isModified = false;
    boolean shouldModifyPhotos = false;
    if (!StringUtils.equals(newAlbumName, oldAlbum.getAlbumName())) {
      isModified = true;
      shouldModifyPhotos = true;
    }
    if (!StringUtils.equals(newPlace, oldAlbum.getPlace())) {
      isModified = true;
    }
    if (!StringUtils.equals(newDescription, oldAlbum.getDescription())) {
      isModified = true;
    }
    if (!oldAlbum.getAuthority().equals(newAuthority)) {
      isModified = true;
      shouldModifyPhotos = true;
    }

    if (isModified) {
      albumDao.updateAlbumInfo(ownerId, albumId, newAlbumName, newPlace, newDescription,
          newAuthority);
    }
    if (shouldModifyPhotos) {
      photoDao.updatePhotoInfoOfAlbum(newAuthority, newAlbumName, albumId);
    }
  }

  @Override
  public Album getAlbumForChange(long albumId, long userId) {
    Album album = albumDao.queryAlbumDetailById(albumId);
    if(album == null) {
      throw new NoResourceException("Id为" + albumId + "的相册不存在!");
    }
    if (album.getOwnerId() != userId) {
      throw new NoOperatePermissionException("ID为" + userId + "的用户无法操作ID为" + albumId + "的相册");
    }
    Activity act = album.getActivity();
    if (act == Activity.DELETED || act == Activity.FREEZED) {
      throw new NoOperatePermissionException("Id为" + albumId + "的相册已删除或者已被屏蔽");
    }
    if (act == Activity.UNDELETABLE) {
      throw new NoOperatePermissionException("Id为" + albumId + "的相册为头像相册,不能修改");
    }
    return album;
  }

  @Override
  public Album createAlbum(User user, Album album) {
    long ownerId = user.getId();
    String ownerNickname = user.getNickname();
    String ownerPortrait = user.getPortrait();
    long albumId = albumDao.insertAlbumReturnId(ownerId, ownerNickname, ownerPortrait, album
        .getAlbumName(), album.getPlace(), album.getDescription(), album.getAuthority(),
        Activity.NORMAL, cover, ext);
    if (albumId != 0) {// 创建后只需要一些基本信息就可以,不需要设置所有信息
      album.setId(albumId);
      album.setOwnerId(ownerId);
      album.setOwnerNickname(ownerNickname);
      album.setOwnerPortrait(ownerPortrait);
      album.setPhotoNum(0);
      album.setActivity(Activity.NORMAL);
      album.setCover(cover);
      album.setCoverExt(ext);
      return album;
    } else {
      throw new OperateFailedException("ID为:" + ownerId + "的用户创建相册失败");
    }
  }

  @Override
  public void deleteAlbum(long albumId, long userId) {
    Album album = albumDao.queryAlbumById(albumId);
    if (album.getOwnerId() == userId) {
      Activity oldActivity = album.getActivity();
      if (oldActivity == Activity.NORMAL) {// 只能删除普通相册
        albumDao.updateAlbumActivity(album.getOwnerId(), albumId, Activity.DELETED);
        photoDao.updatePhotosActivityByAlbumId(albumId, Activity.DELETED);
      } else {
        throw new NoOperatePermissionException("ID为" + albumId + "的相册状态为" + oldActivity
            + ",不能删除");
      }
    } else {
      throw new NoOperatePermissionException("ID为" + userId + "的用户没有删除ID为" + albumId
          + "相册的权限");
    }
  }

  @Override
  public Photo getPhotoDetailById(long photoId, long viewerId, boolean addVisit) {
    if (photoId == 0) {
      throw new NoResourceException("Id为0的图片不存在");
    }
    Photo photo = photoDao.queryPhotoDetailById(photoId);
    if (photo == null) {
      throw new NoResourceException("Id为" + photoId + "的图片不存在");
    }
    Activity act = photo.getActivity();
    if (act == Activity.DELETED || act == Activity.FREEZED) {
      throw new NoResourceException("Id为" + photoId + "的照片已删除或者已被屏蔽");
    }
    if (addVisit && photo.getOwnerId() != viewerId) {
      photoDao.updateVisitCount(photo.getAlbumId(), photoId, 1);
    }
    return photo;
  }

  @Override
  public List<Photo> createPhotos(User owner, Album album, List<? extends ImageResizeResult> filesInfo) {
    long userId = owner.getId();
    String userNickname = owner.getNickname();
    String userPortrait = owner.getPortrait();
    long albumId = album.getId();
    String albumName = album.getAlbumName();
    int authority = album.getAuthority();
    Activity activity = album.getActivity();

    int size = filesInfo.size();
    List<String> fileKeys = new ArrayList<String>(size);
    List<String> middleFileKeys = new ArrayList<String>(size);
    List<String> smallFileKeys = new ArrayList<String>(size);
    List<String> fileExts = new ArrayList<String>(size);
    List<Long> fileSizes = new ArrayList<Long>(size);
    for (ImageResizeResult result : filesInfo) {
      String[] keys = result.getFileKeys();
      fileKeys.add(keys[0]);
      middleFileKeys.add(keys[1]);
      smallFileKeys.add(keys[2]);
      fileExts.add(result.getExt());
      fileSizes.add(result.getFileSize());
    }
    List<Long> ids = photoDao.insertPhotosReturnIds(userId, userNickname, userPortrait,
        albumId, albumName, authority, activity, fileKeys, middleFileKeys, smallFileKeys,
        fileExts, fileSizes);
    albumDao.updatePhotoCount(userId, albumId, ids.size());
    List<Photo> photos = new ArrayList<Photo>(size);
    for (int i = 0; i < size; i++) {
      ImageResizeResult result = filesInfo.get(i);
      String[] keys = result.getFileKeys();
      if(ids.get(i) == null) {//返回为空,表示插入失败
        continue;
      }
      Photo photo = new Photo();
      photo.setId(ids.get(i));
      photo.setOwnerId(userId);
      photo.setOwnerNickname(userNickname);
      photo.setOwnerPortrait(userPortrait);
      photo.setAlbumId(albumId);
      photo.setAlbumName(albumName);
      photo.setAuthority(authority);
      photo.setActivity(activity);
      photo.setFile(keys[0]);
      photo.setMiddleFile(keys[1]);
      photo.setSmallFile(keys[2]);
      photo.setExt(result.getExt());
      photo.setSize(result.getFileSize());
      photos.add(photo);
    }
    return photos;
  }

  @Override
  public void changePhotosDescription(long albumId, List<Long> ids, List<String> descriptions) {
    photoDao.updatePhotosDescription(albumId, descriptions, ids);
  }

  @Override
  public void changePhotoDescription(long albumId, long id, String descriptions) {
    photoDao.updatePhotoDescription(albumId, descriptions, id);
  }

  @Override
  public void changeAlbumCover(long ownerId, long albumId, String cover, String coverExt) {
    if (!StringUtils.isEmpty(cover)) {
      albumDao.updateAlbumCover(ownerId, albumId, cover, coverExt);
    }
  }

  @Override
  public void changePhotoAlbum(long ownerId, long photoId, long fromAlbumId, long toAlbumId) {
    photoDao.updatePhotoAlbum(photoId, toAlbumId);// 新相册照片数+1在修改同时完成
    albumDao.updatePhotoCount(ownerId, toAlbumId, 1);
    albumDao.updatePhotoCount(ownerId, fromAlbumId, -1);
  }

  @Override
  public Long deletePhoto(long userId, long photoId) {
    Photo photo = photoDao.queryPhotoById(photoId);
    if (photo.getOwnerId() == userId) {
      Activity oldActivity = photo.getActivity();
      if (oldActivity == Activity.NORMAL) {// 只能删除普通相册
        Long albumId = photo.getAlbumId();
        String file = photo.getSmallFile();
        Album album = albumDao.queryAlbumById(albumId);
        if (album.getOwnerId() != userId) {
          throw new NoOperatePermissionException("ID为" + userId + "的用户没有修改ID为" + albumId
              + "相册的权限");
        }
        String cover = album.getCover();
        if (cover.equals(file)) {
          albumDao.updateRandomCoverAndPhotoCount(userId, albumId, photoId, this.cover,
              this.ext, -1);
        } else {
          albumDao.updatePhotoCount(userId, albumId, -1);
        }
        photoDao.updatePhotoActivity(album.getId(), photoId, Activity.DELETED);
        return album.getId();
      } else {
        throw new NoOperatePermissionException("Id为" + photoId + "的相册状态为" + oldActivity
            + ",不能删除");
      }
    } else {
      throw new NoOperatePermissionException("Id为" + userId + "的用户没有删除Id为" + photoId
          + "图片的权限");
    }
  }

  @Override
  public Photo getPhotoForChange(long userId, long photoId) {
    Photo photo = photoDao.queryPhotoDetailById(photoId);
    if(photo == null) {
      throw new NoResourceException("Id为" + photoId + "的图片不存在!");
    }
    if (photo.getOwnerId() != userId) {
      throw new NoOperatePermissionException("Id为" + userId + "的用户没有修改Id为" + photoId
          + "图片的权限");
    }
    return photo;
  }

  @Override
  public List<Album> listAlbumNamesOfUser(long userId) {
    if (userId == 0) {
      throw new NoResourceException("Id为0用户相册列表不存在");
    }
    return albumDao.queryAlbumNamesOfUser(userId);
  }

  @Override
  public List<Photo> listPhotoFilesOfAlbum(long albumId, int authority) {
    if (albumId == 0) {
      throw new NoResourceException("Id为0的相册不存在");
    }
    return photoDao.queryPhotoFilesOfAlbum(albumId, authority);
  }

  @Override
  public Album getUserPortraitAlbum(long ownerId) {
    List<Album> albums = albumDao.queryUserAlbumByActivity(ownerId, Activity.UNDELETABLE);
    if (CollectionUtils.isEmpty(albums)) {
      throw new NoResourceException("Id为" + ownerId + "的用户不存在头像相册");
    } else {
      return albums.get(0);
    }
  }

  public void copyPhotoToPortraitAlbum(Album portraitAlbum, Photo photo) {
    long ownerId = portraitAlbum.getOwnerId();
    long portraitAlbumId = portraitAlbum.getId();
    String portraitAlbumName = portraitAlbum.getAlbumName();
    Activity portraitAlbumActivity = portraitAlbum.getActivity();

    photoDao.insertByCopyExistPhotoReturnId(portraitAlbumId, portraitAlbumName,
        portraitAlbumActivity, photo.getId());
    //头像相册照片数+1
    albumDao.updatePhotoCount(ownerId, portraitAlbumId, 1);
    String smallFile = photo.getSmallFile();
    String fileExt = photo.getExt();
    //修改头像相册封面
    changeAlbumCover(ownerId, portraitAlbumId, smallFile, fileExt);
  }
 
  public Photo createPortraitPhoto(User owner, Album portraitAlbum, ImageResizeResult result) {
    long ownerId = owner.getId();
    List<Photo> photos = createPhotos(owner, portraitAlbum, Arrays.asList(result));
    if(photos.isEmpty()) {
      throw new OperateFailedException("插入头像相册失败");
    }
    Photo portrait = photos.get(0);
    String smallFile = portrait.getSmallFile();
    String fileExt = portrait.getExt();
    //修改头像相册封面
    changeAlbumCover(ownerId, portraitAlbum.getId(), smallFile, fileExt);
    return portrait;
  }
 
  public Photo getUserCurrentPortraitPhoto(long userId) {
    Album portraitAlbum = getUserPortraitAlbum(userId);
    return getCurrentPortraitPhotoFromAlbum(portraitAlbum);
  }
 
  public Photo getCurrentPortraitPhotoFromAlbum(Album portraitAlbum) {
    long portraitAlbumId = portraitAlbum.getId();
    Activity portraitAlbumActivity = portraitAlbum.getActivity();
   
    return photoDao.queryLatestPhotoOfAlbum(portraitAlbumId, portraitAlbumActivity);
  }

  /** -------------------华丽的分割线,下面的还没实现呢-------------------------------- **/

  // @Override
  // public Photo getPhotoForChangePhoto(long photoId, long userId) {
  // // TODO Auto-generated method stub
  // return null;
  // }

  // @Override
  // public List<Album> listAlbumsOfUserWithoutPortrait(long ownerId, long
  // viewerId, int authority, Page page) {
  // if (ownerId == 0) {
  // ownerId = viewerId;
  // }
  // // 两者都为0,这种情况不应该存在
  // if (ownerId == 0) {
  // throw new NoResourceException("Id为" + ownerId + "用户相册列表不存在");
  // }
  // return albumDao.queryActiveAlbumsByUserId(ownerId, authority, page);
  // }

  // @Override
  // public Album getAlbumDetailById(long albumId) {
  // Album album = albumDao.queryAlbumDetailById(albumId);
  // if (album == null) {
  // throw new NoResourceException("Id为" + albumId + "的相册不存在");
  // }
  // Activity act = album.getActivity();
  // if (act == Activity.DELETED || act == Activity.FREEZED) {
  // throw new NoResourceException("Id为" + albumId + "的相册已删除或者已被屏蔽");
  // }
  // return album;
  // }

  // @Override
  // public List<Photo> listPhotosOfAlbumForChange(long albumId, long
  // viewerId) {
  // List<Photo> photos = photoDao.queryPhotosOfAlbum(albumId);
  // if (!photos.isEmpty()) {
  // if (photos.get(0).getOwnerId() != viewerId) {
  // throw new NoOperatePermissionException();
  // }
  // }
  // return photos;
  // }
}
TOP

Related Classes of com.skyline.wo.service.impl.AlbumServiceImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.