Package com.skyline.spot.controller

Source Code of com.skyline.spot.controller.SpotRefController

package com.skyline.spot.controller;

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import net.imagine.core.ResultState;
import net.imagine.core.engine.ImageEngine;
import net.imagine.provider.skyline.ImageResizeResult;
import net.imagine.provider.skyline.LocalImageResizeTask;
import net.imagine.provider.skyline.MultipartImageResizeTask;
import net.imagine.provider.skyline.SkylineImageResizeTask;

import org.apache.commons.io.FilenameUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.view.RedirectView;

import com.skyline.base.controller.BaseController;
import com.skyline.base.exception.NotLoginException;
import com.skyline.base.type.Authority;
import com.skyline.base.type.SpotRefrenceType;
import com.skyline.common.bean.Page;
import com.skyline.common.util.Constant;
import com.skyline.common.util.ViewPaths;
import com.skyline.common.util.WebHelper;
import com.skyline.spot.model.Spot;
import com.skyline.spot.model.SpotRefrence;
import com.skyline.spot.service.SpotRefrenceService;
import com.skyline.spot.service.SpotService;
import com.skyline.user.model.User;
import com.skyline.wo.model.Album;
import com.skyline.wo.model.Article;
import com.skyline.wo.model.Photo;
import com.skyline.wo.service.AlbumService;
import com.skyline.wo.service.ArticleService;

@RequestMapping("/spot/ref")
@Controller
public class SpotRefController extends BaseController {
  private static final Log LOGGER = LogFactory
      .getLog(SpotRefController.class);
  @Autowired
  private SpotService spotService;
  @Autowired
  private SpotRefrenceService spotRefrenceService;
  @Autowired
  private ArticleService articleService;
  // @Autowired
  // private RatyService ratyService;

  @Autowired
  private AlbumService albumService;

  private @Value("${refrence.listrefrence.pagesize}")
  int listRefrencePageSize;

  @Autowired
  private ImageEngine imagine;
  private @Value("${imagine.localStorePath}")
  String localStorePath;
  private @Value("${imagine.baseSize1},${imagine.baseSize2}")
  int[] baseSizes;

  private @Value("${album.uploadphoto.filesize}")
  long maxSizePerFile;
  private @Value("${spot.test.pagesize}")
  int spotPageSize;

  /**
   * 默认相册下的图片,由于该相册下的图片都是有用户单独一张or几张递交的refrence,而不是一整个Album,故有refrence保存,
   * 而不用photo
   *
   * @param spotId
   * @param page
   * @return
   */
  /*
   * @RequestMapping(value = "/{spotId}/defaultalbum", method =
   * RequestMethod.GET) public ModelAndView getPhotosFromDefaultAlbumRequest(
   *
   * @PathVariable("spotId") Long spotId, Page page) { ModelAndView mav = new
   * ModelAndView(); List<SpotRefrence> refrenceList = spotRefrenceService
   * .getRefrencesBySpotIdAndType(spotId, SpotRefrenceType.PHOTO, page);
   * mav.addObject("refrenceList", refrenceList); return mav; }
   */
  /**
   * 用于对spot快速上传图片,即photo refrence,保存方式为refrence not photo
   *
   * @param spotId
   * @param page
   * @return
   */
  /*
   * @RequestMapping(value = "/{spotId}/defaultalbum", method =
   * RequestMethod.POST) public ModelAndView postPhotosToDefaultAlbumRequest(
   *
   * @PathVariable("spotId") Long spotId, Page page) { ModelAndView mav = new
   * ModelAndView();
   *
   * return mav; }
   */
  /**
   * 直接递交照片ref
   *
   * @param spotId
   * @return
   */
  @RequestMapping(value = "/{spotId}/photo/new", method = RequestMethod.GET)
  public ModelAndView newAlbumRefToSpotRequest(
      @PathVariable("spotId") Long spotId) {
    User user = (User) WebHelper.getSessionAttribute(null,
        Constant.SESSION_USER);
    ModelAndView mav = new ModelAndView();
    if (user == null) {
      throw new NotLoginException("上传照片必须登录");
    }
    Spot spot = spotService.getSpot(spotId);
    if (spot == null) {
      mav.setViewName(ViewPaths.SPOT_NOTFOUND);
      return mav;
    }
    Album album = new Album();
    album.setAlbumName(spot.getName());
    album.setPlace(spot.getCity());
    album.setDescription(spot.getName());
    album.setAuthority(Authority.PUBLIC);
    album = albumService.createAlbum(user, album);
    mav.addObject("album", album);
    mav.addObject("spotId", spot.getId());
    mav.setViewName(ViewPaths.SOPTREF_NEWALBUMREF);
    return mav;
  }

  private List<ImageResizeResult> processResizeResult(
      List<ImageResizeResult> results, StringBuilder message) {
    List<ImageResizeResult> filesInfo = new ArrayList<ImageResizeResult>();
    for (int i = 0; i < results.size(); i++) {
      ImageResizeResult result = results.get(i);
      ResultState state = result.getResultState();
      switch (state) {
      case SUCCESS:
        filesInfo.add(result);
        break;
      case NOT_IMAGE:
        message.append("上传图片" + result.getOriginalFilename()
            + "失败,失败原因:图片格式不支持。<br/>");
        break;
      default:
        message.append("上传图片" + result.getOriginalFilename()
            + "失败。<br/>");
        break;
      }
    }
    return filesInfo;
  }

  @SuppressWarnings("rawtypes")
  private List<SkylineImageResizeTask> prepareResizeTask(List files,
      long userId, long albumId, StringBuilder message) {
    if (files == null || files.isEmpty()) {
      return null;
    }
    boolean isLocal = !(files.get(0) instanceof MultipartFile);
    List<SkylineImageResizeTask> tasks = new ArrayList<SkylineImageResizeTask>(
        files.size());
    for (Object file : files) {
      long fileSize = 0L;
      String filename = null;
      SkylineImageResizeTask task;
      if (isLocal) {
        File localFile = (File) file;
        fileSize = localFile.length();
        filename = FilenameUtils.getName(localFile.getAbsolutePath());
      } else {
        MultipartFile multipartFile = (MultipartFile) file;
        fileSize = multipartFile.getSize();
        filename = multipartFile.getOriginalFilename();
      }
      if (fileSize == 0) {
        continue;
      }
      if (fileSize > maxSizePerFile) {
        message.append("上传图片" + filename + "失败,失败原因:图片太大。\n");
        continue;
      }
      if (isLocal) {
        File localFile = (File) file;
        task = new LocalImageResizeTask(localFile.getAbsolutePath(),
            baseSizes);
      } else {
        MultipartFile multipartFile = (MultipartFile) file;
        task = new MultipartImageResizeTask(multipartFile, baseSizes,
            null, false);
      }
      task.setUserId(userId);
      task.setAlbumId(albumId);
      tasks.add(task);
    }

    return tasks;
  }

  /**
   *
   * @param ownerId
   * @param albumId
   * @param files
   * @return
   */
  @SuppressWarnings("unchecked")
  @RequestMapping(value = "/buploadok/{ownerId}/{albumId}", method = RequestMethod.POST)
  public @ResponseBody
  Map<String, Object> batchUploadSpotOk(
      @PathVariable("ownerId") Long ownerId,
      @PathVariable("albumId") Long albumId,
      @RequestParam("files") String files) {
    Map<String, Object> result = new HashMap<String, Object>();
    User user = (User) WebHelper.getSessionAttribute(null,
        Constant.SESSION_USER);
    if (user == null) {
      result.put("success", Boolean.FALSE);
      result.put("errmsg", "压缩图片必须");
      result.put("logined", Boolean.FALSE);
      return result;
    } else {
      result.put("logined", Boolean.TRUE);
    }
    String[] filesPath = files.split("\\|");
    List<File> localFiles = new ArrayList<File>();
    for (String filePath : filesPath) {
      if (!StringUtils.hasLength(filePath)) {
        continue;
      }
      File localFile = new File(filePath);
      localFiles.add(localFile);
    }
    if (localFiles.isEmpty()) {
      result.put("success", Boolean.FALSE);
      result.put("errmsg", "没有找到需要压缩的文件!");
      return result;
    }
    StringBuilder message = new StringBuilder();
    List<SkylineImageResizeTask> tasks = prepareResizeTask(localFiles,
        user.getId(), albumId, message);
    if (tasks == null || tasks.isEmpty()) {
      result.put("success", Boolean.FALSE);
      result.put("errmsg", "没有找到需要压缩的文件!");
      return result;
    }

    List<ImageResizeResult> results = imagine.processImage(localStorePath,
        tasks);
    List<ImageResizeResult> filesInfo = processResizeResult(results,
        message);

    Album album = null;
    try {
      album = albumService.getAlbumForChange(albumId, user.getId());
    } catch (Exception e) {
      LOGGER.warn("获取相册失败", e);
      result.put("success", Boolean.FALSE);
      result.put("errmsg", "没有找到对应相册,压缩图片失败!");
      return result;

    }
    List<Photo> photos = null;

    if (!filesInfo.isEmpty()) {
      photos = albumService.createPhotos(user, album, filesInfo);
    }
    albumService.changeAlbumCover(user.getId(), album.getId(), photos
        .get(0).getSmallFile(), photos.get(0).getExt());

    Map<Long, List<Photo>> filesMap = (Map<Long, List<Photo>>) WebHelper
        .getSessionAttribute(null, Constant.SESSION_UPLOAD_OK_FILES);
    if (filesMap == null) {
      filesMap = new HashMap<Long, List<Photo>>();
    }
    filesMap.put(album.getId(), photos);
    WebHelper.setSessionAttribute(null, Constant.SESSION_UPLOAD_OK_FILES,
        filesMap);

    if (StringUtils.hasLength(message)) {// 存在错误
      result.put("success", Boolean.FALSE);
      result.put("errmsg", message);
    } else {
      result.put("success", Boolean.TRUE);
      result.put("errmsg", "压缩图片成功!");
    }
    return result;
  }

  @RequestMapping(value = "/uploadok/{ownerId}/{albumId}", method = RequestMethod.GET)
  public ModelAndView newAlbumRefUploadOk(
      @PathVariable("ownerId") Long ownerId,
      @PathVariable("albumId") Long albumId) {
    User user = (User) WebHelper.getSessionAttribute(null,
        Constant.SESSION_USER);
    if (user == null) {
      throw new NotLoginException("添加REF必须登录");
    }
    ModelAndView mav = new ModelAndView(ViewPaths.SPOTREF_NEWALBUMREFOK);
    Spot spot = spotService.getSpot(ownerId);
    if (spot == null) {
      mav.setViewName(ViewPaths.SPOT_NOTFOUND);
    }

    mav.addObject("spotInfo", spot);
    mav.addObject("spotId", ownerId);
    mav.addObject("albumId", albumId);
    // WebHelper.saveToken(request);
    return mav;
  }

  @RequestMapping(value = "/uploadok/{ownerId}/{albumId}", method = RequestMethod.POST)
  public ModelAndView newAlbumRefToSpotRequestOK(Long spotId, Long albumId,
      String refTitle, String refrenceDigest) {
    User user = (User) WebHelper.getSessionAttribute(null,
        Constant.SESSION_USER);
    ModelAndView mav = new ModelAndView();
    if (user == null) {
      throw new NotLoginException("添加REF必须登录");
    }
    Spot spot = spotService.getSpot(spotId);

    if (spot == null) {
      mav.setViewName(ViewPaths.SPOT_NOTFOUND);
      return mav;
    }
    Album album = albumService.getAlbumById(albumId);
    if (album == null) {
      mav.setViewName(ViewPaths.SPOT_NOTFOUND);
      return mav;
    }
    Long returnRefId = spotRefrenceService.postToSpot(album.getId(),
        album.getCover() + "." + album.getCoverExt(), refTitle,
        refrenceDigest, SpotRefrenceType.ALBUM, spotId, spot.getName(),
        spot.getPortrait(), user.getId(), user.getNickname(),
        user.getPortrait(), user.getEmail());
    if (returnRefId == 0 || returnRefId == null) {
      mav.setViewName(ViewPaths.SPOT_NOTFOUND);
      return mav;
    }
    String url = buildRecirectPath("/spot/" + spotId);
    mav.setView(new RedirectView(url));
    return mav;
  }

  public ModelAndView newTxtRefToSpotRequest() {
    return null;

  }

  /**
   * 用于为spot添加ref,refType分为album,article等,可以从自己的相册或
   * 日志列表选择已有的添加到ref,也可以直接新建,新建之后也将根据type类型分别 在用户的相册或日志下添加该相册,照片,或日志
   *
   * @param spotId
   * @param page
   * @return
   */
  @RequestMapping(value = "/{spotId}/postref/{refType}", method = RequestMethod.GET)
  public ModelAndView postRefrenceToSpotRequest(
      @PathVariable("spotId") Long spotId,
      @PathVariable("refType") String refType) {
    User user = (User) WebHelper.getSessionAttribute(null,
        Constant.SESSION_USER);
    ModelAndView mav = new ModelAndView();
    if (user == null) {
      mav.setViewName(ViewPaths.USER_LOGIN);
      return mav;
    }
    Spot spotInfo = spotService.getSpot(spotId);
    mav.addObject("spotInfo", spotInfo);
    Page page = new Page();
    page.setSize(listRefrencePageSize);
    if (refType.equals("ALBUM")) {
      List<Album> albumList = albumService
          .listAlbumsOfUserWithoutPortrait(user.getId(),
              user.getId(), Authority.PUBLIC, page);
      mav.addObject("albumList", albumList);
      mav.setViewName(ViewPaths.SPOTREFRENCE_ADD);
      return mav;
    }
    if (refType.equals("NOTE")) {

    }

    return mav;
  }

  @RequestMapping(value = "/{spotId}/add", method = RequestMethod.POST)
  public ModelAndView postRefrenceToSpotSubmit(Long spotId, String spotName,
      String spotPortrait, Long refrenceId, String refrencePortrait,
      String refrenceTitle, String refrenceDigest,
      SpotRefrenceType refrenceType) {
    ModelAndView mav = new ModelAndView();
    try {
      User user = (User) WebHelper.getSessionAttribute(null,
          Constant.SESSION_USER);
      if (user == null) {
        mav.setViewName(ViewPaths.USER_LOGIN);
        return mav;
      }
      Long returnRefId = spotRefrenceService.postToSpot(refrenceId,
          refrencePortrait, refrenceTitle, refrenceDigest,
          refrenceType, spotId, spotName, spotPortrait, user.getId(),
          user.getNickname(), user.getPortrait(), user.getEmail());
      if (returnRefId != null && returnRefId != 0) {
        /**
         * 做成ajax方式的递交
         */
        // map.put("PostSuccess", true);
        String url = buildRecirectPath("/spot/" + spotId);
        mav.setView(new RedirectView(url));
        return mav;
      }
      mav.setViewName(ViewPaths.SPOTREFRENCE_ADD);
      return mav;
    } catch (Exception e) {
      ModelAndView v = new ModelAndView(ViewPaths.USER_LOGIN);
      return v;
    }

  }

  /**
   * 查看ref
   *
   * @param spotId
   * @param refrenceType
   * @param page
   * @return
   */
  @RequestMapping(value = "/{spotId}/{refrenceType}/list", method = RequestMethod.GET)
  public ModelAndView querySpotRefrence(@PathVariable("spotId") Long spotId,
      @PathVariable("refrenceType") SpotRefrenceType refrenceType, Page page) {
    List<SpotRefrence> refrenceList = null;
    page.setSize(listRefrencePageSize);
    if(refrenceType==SpotRefrenceType.ALBUM)
    {
      refrenceList = spotRefrenceService.getRefrencesBySpotIdAndType(
          spotId, SpotRefrenceType.ALBUM, page);
    }
    else if (refrenceType==SpotRefrenceType.STRATEGY) {
      refrenceList = spotRefrenceService.getRefrencesBySpotIdAndType(
          spotId, SpotRefrenceType.STRATEGY, page);
    } else if (refrenceType==SpotRefrenceType.TRAVELNOTE) {
      refrenceList = spotRefrenceService.getRefrencesBySpotIdAndType(
          spotId, SpotRefrenceType.TRAVELNOTE, page);
    }
    ModelAndView v = new ModelAndView(ViewPaths.SPOTREFRENCE_LIST);
    v.addObject("refrenceList", refrenceList);
    return v;
  }

  /**
   * 查看详细信息,通过refrence中的refrenceID获得详细数据
   *
   * @param id
   * @return
   */
  @RequestMapping(value = "/{spotId}/{id}", method = RequestMethod.GET)
  public ModelAndView querySpotRefrenceDetail(@PathVariable("id") Long id,
  @PathVariable("spotId") Long spotId) {
    ModelAndView mav = new ModelAndView();
    SpotRefrence ref = spotRefrenceService.getRefrenceById(id);
    if(ref==null)
    {
      mav.setViewName(ViewPaths.SPOT_NOTFOUND);
      return mav;
    }
    if (ref.getRefrenceType() == SpotRefrenceType.ALBUM) {
      Page page = new Page();
      page.setSize(listRefrencePageSize);
      List<Photo> photoList = albumService.listPhotosOfAlbum(
          ref.getRefrenceId(), 0, Authority.PUBLIC, page, true);
      mav.addObject("refInfo", ref);
      mav.addObject("photoList", photoList);
      mav.setViewName(ViewPaths.SPOTREFRENCE_PHOTOVIEW);
      return mav;

    } else if (ref.getRefrenceType() == SpotRefrenceType.TRAVELNOTE) {

    } else {
      Article article = articleService.getArticleById(id);
      ModelAndView v = new ModelAndView(ViewPaths.SPOTREFRENCE_DETAIL);
      v.addObject("article", article);

      return v;
    }
    return null;
  }

  @RequestMapping(value = "/{spotId}/{refrenceType}/detail", method = RequestMethod.GET)
  public ModelAndView querySpotRefrenceDetail(
      @PathVariable("refrenceType") SpotRefrenceType refrenceType,
      @PathVariable("spotId") Long spotId) {
    ModelAndView mav = new ModelAndView();
    if (refrenceType == SpotRefrenceType.ALBUM) {
      Page page = new Page();
      page.setSize(1);
      SpotRefrence spotRef = spotRefrenceService
          .getRefrencesBySpotIdAndType(spotId,
              SpotRefrenceType.ALBUM, page).get(0);
      Album album = albumService.getAlbumById(spotRef.getRefrenceId());
      List<Photo> photosList = albumService.listPhotosOfAlbum(
          album.getId(), 0, Authority.PUBLIC, page, true);
      mav.addObject("photoList", photosList);
      mav.addObject("albumInfo", album);
      mav.addObject("refInfo", spotRef);
      return mav;

    } else if (refrenceType == SpotRefrenceType.TRAVELNOTE) {

    } else {

    }
    return null;
  }

  /**
   * Demo refrence
   */

}
 
TOP

Related Classes of com.skyline.spot.controller.SpotRefController

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.