package com.insoul.ti.controller; import java.util.Date; import java.util.List; import java.util.UUID; import javax.validation.Valid; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Controller; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.servlet.ModelAndView; import com.insoul.copartner.dao.criteria.NewsCriteria; import com.insoul.copartner.domain.News; import com.insoul.copartner.util.CDNUtil; import com.insoul.copartner.util.FileUtil; import com.insoul.ti.WebBase; import com.insoul.ti.req.NewsListRequest; import com.insoul.ti.req.NewsRequest; import com.insoul.ti.req.PageQuery; import com.insoul.ti.req.ViewRequest; import com.insoul.ti.shiro.Permission; /** * @author 刘飞 E-mail:liufei_it@126.com * * @version 1.0.0 * @since 2015年7月4日 下午11:37:15 */ @Controller @RequestMapping("/news") @Permission("authc") public class NewsController extends WebBase { private static final String NEWS_EDIT = "news_edit"; private static final String NEWS_ADD = "news_add"; private static final String NEWS_DETAIL = "news_detail"; private static final String NEWS_LIST = "news_list"; @RequestMapping("/list") public ModelAndView list(@Valid NewsListRequest request, BindingResult result) { ModelAndView mv = createModelView(NEWS_LIST, request); PageQuery query = request.init().getQuery(); NewsCriteria criteria = new NewsCriteria(); criteria.setLimit(query.getPage_size()); criteria.setOffset(Long.valueOf(query.getIndex()).intValue()); criteria.setType(request.getType()); String[] status = null; if (StringUtils.isNotBlank(request.getStatus())) { status = new String[] { request.getStatus() }; } criteria.setStatus(status); criteria.setTitle(request.getTitle()); List<News> list = newsDAO.queryNews(criteria); Long count = newsDAO.countNews(criteria); query.setCount((count == null || count <= 0L) ? 0 : count.intValue()); mv.addObject("query", query); mv.addObject("newsList", list); mv.addObject("success", CollectionUtils.isNotEmpty(list)); mv.addObject("req", request); return mv; } @RequestMapping("/update_status/{newsId}") @Transactional(value = "transactionManager", rollbackFor = Throwable.class) public ModelAndView updateStatus(@PathVariable Long newsId, @RequestParam(value = "status", required = true) String status) { try { News news = newsDAO.get(newsId); news.setStatus(status); newsDAO.update(news); returnJson(true, "200", "修改成功!!"); } catch (Exception e) { returnJson(true, "500", "修改失败!!"); } return null; } @RequestMapping("/detail/{newsId}") public ModelAndView detail(@PathVariable Long newsId, ViewRequest req) { ModelAndView mv = createModelView(NEWS_DETAIL, req); mv.addObject("viewname", NEWS_LIST); try { News news = newsDAO.get(newsId); mv.addObject("news", news); mv.addObject("success", news != null); } catch (Exception e) { mv.addObject("success", false); } return mv; } @RequestMapping("/add") public ModelAndView add(ViewRequest req) { ModelAndView mv = createModelView(NEWS_ADD, req); mv.addObject("viewname", NEWS_LIST); return mv; } @RequestMapping("/edit/{newsId}") public ModelAndView edit(@PathVariable Long newsId, ViewRequest req) { ModelAndView mv = createModelView(NEWS_EDIT, req); News news = newsDAO.get(newsId); mv.addObject("news", news); mv.addObject("viewname", NEWS_LIST); return mv; } @RequestMapping("/update/{newsId}") @Transactional(value = "transactionManager", rollbackFor = Throwable.class) public ModelAndView update(@PathVariable Long newsId, @Valid NewsRequest request, BindingResult result) { News news = newsDAO.get(newsId); MultipartFile image = request.getCoverImg(); if (image != null) { String fileType = FileUtil.getFileType(image.getOriginalFilename()); if (StringUtils.isNotBlank(fileType)) { String fileName = new StringBuilder().append(UUID.randomUUID()).append(".").append(fileType).toString(); try { String path = CDNUtil.uploadFile(image.getInputStream(), fileName); if (StringUtils.isNotBlank(path)) news.setCoverImg(path); } catch (Exception e) { log.error("UploadFile Error.", e); } } } news.setArticle(request.getArticle()); news.setUpdated(new Date()); news.setStatus(request.getStatus()); news.setSynopsis(request.getSynopsis()); news.setTitle(request.getTitle()); news.setType(request.getType()); newsDAO.update(news); return new ModelAndView("redirect:/news/detail/" + newsId); } @RequestMapping("/save") @Transactional(value = "transactionManager", rollbackFor = Throwable.class) public ModelAndView save(@Valid NewsRequest request, BindingResult result) { MultipartFile image = request.getCoverImg(); String path = StringUtils.EMPTY; if (image != null) { String fileType = FileUtil.getFileType(image.getOriginalFilename()); if (StringUtils.isNotBlank(fileType)) { String fileName = new StringBuilder().append(UUID.randomUUID()).append(".").append(fileType).toString(); try { path = CDNUtil.uploadFile(image.getInputStream(), fileName); } catch (Exception e) { log.error("UploadFile Error.", e); } } } News news = new News(); if (StringUtils.isNotBlank(path)) news.setCoverImg(path); news.setAdminUserId(getAdminId()); news.setArticle(request.getArticle()); news.setClicks(0L); Date time = new Date(); news.setCreated(time); news.setUpdated(time); news.setStatus(request.getStatus()); news.setSynopsis(request.getSynopsis()); news.setTitle(request.getTitle()); news.setType(request.getType()); newsDAO.save(news); return new ModelAndView("redirect:/news/detail/" + news.getId()); } }