package com.zheng.cms.web.controller;
import com.zheng.cms.common.constant.CmsResult;
import com.zheng.cms.common.constant.CmsResultConstant;
import com.zheng.cms.dao.model.*;
import com.zheng.cms.rpc.api.*;
import com.zheng.common.base.BaseController;
import com.zheng.common.util.Paginator;
import com.zheng.common.util.RequestUtil;
import org.apache.commons.lang.StringUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
/**
* 问答首页控制器
* Created by shuzheng on 2017/3/26.
*/
@Controller
@RequestMapping(value = "/qa")
public class QaController extends BaseController {
private static Logger _log = LoggerFactory.getLogger(QaController.class);
private static String CODE = "qa";
private static Integer USERID = 1;
@Autowired
private CmsArticleService cmsArticleService;
@Autowired
private CmsCategoryService cmsCategoryService;
@Autowired
private CmsTagService cmsTagService;
@Autowired
private CmsSystemService cmsSystemService;
@Autowired
private CmsCommentService cmsCommentService;
/**
* 首页
* @param page
* @param sort
* @param order
* @param request
* @param model
* @return
*/
@RequestMapping(value = "", method = RequestMethod.GET)
public String index(@RequestParam(required = false, defaultValue = "1", value = "page") int page,
@RequestParam(required = false, defaultValue = "orders", value = "sort") String sort,
@RequestParam(required = false, defaultValue = "desc", value = "order") String order,
HttpServletRequest request,
Model model) {
// 系统id
CmsSystemExample cmsSystemExample = new CmsSystemExample();
cmsSystemExample.createCriteria()
.andCodeEqualTo(CODE);
CmsSystem system = cmsSystemService.selectFirstByExample(cmsSystemExample);
model.addAttribute("system", system);
// 该系统类目
CmsCategoryExample cmsCategoryExample = new CmsCategoryExample();
cmsCategoryExample.createCriteria()
.andSystemIdEqualTo(system.getSystemId());
cmsCategoryExample.setOrderByClause("orders asc");
List<CmsCategory> categories = cmsCategoryService.selectByExample(cmsCategoryExample);
model.addAttribute("categories", categories);
// 该系统标签
CmsTagExample cmsTagExample = new CmsTagExample();
cmsTagExample.createCriteria()
.andSystemIdEqualTo(system.getSystemId());
cmsTagExample.setOrderByClause("orders asc");
List<CmsTag> tags = cmsTagService.selectByExample(cmsTagExample);
model.addAttribute("tags", tags);
// 该系统文章列表
int rows = 10;
CmsArticleExample cmsArticleExample = new CmsArticleExample();
cmsArticleExample.createCriteria()
.andStatusEqualTo((byte) 1)
.andSystemIdEqualTo(system.getSystemId());
if (!StringUtils.isBlank(sort) && !StringUtils.isBlank(order)) {
cmsArticleExample.setOrderByClause(sort + " " + order);
}
List<CmsArticle> articles = cmsArticleService.selectByExampleForOffsetPage(cmsArticleExample, (page - 1) * rows, rows);
model.addAttribute("articles", articles);
// 文章总数
long total = cmsArticleService.countByExample(cmsArticleExample);
// 分页
Paginator paginator = new Paginator(total, page, rows, request);
model.addAttribute("paginator", paginator);
return thymeleaf("/qa/index");
}
/**
* 类目页
* @param alias
* @param page
* @param request
* @param model
* @return
*/
@RequestMapping(value = "/category/{alias}", method = RequestMethod.GET)
public String category(@PathVariable("alias") String alias,
@RequestParam(required = false, defaultValue = "1", value = "page") int page,
HttpServletRequest request,
Model model) {
// 系统id
CmsSystemExample cmsSystemExample = new CmsSystemExample();
cmsSystemExample.createCriteria()
.andCodeEqualTo(CODE);
CmsSystem system = cmsSystemService.selectFirstByExample(cmsSystemExample);
model.addAttribute("system", system);
// 当前类目
CmsCategoryExample cmsCategoryExample = new CmsCategoryExample();
cmsCategoryExample.createCriteria()
.andSystemIdEqualTo(system.getSystemId())
.andAliasEqualTo(alias);
CmsCategory category = cmsCategoryService.selectFirstByExample(cmsCategoryExample);
model.addAttribute("category", category);
// 该类目文章列表
int rows = 10;
List<CmsArticle> articles = cmsArticleService.selectCmsArticlesByCategoryId(category.getCategoryId(), (page - 1) * rows, rows);
model.addAttribute("articles", articles);
// 文章总数
long total = cmsArticleService.countByCategoryId(category.getCategoryId());
// 分页
Paginator paginator = new Paginator(total, page, rows, request);
model.addAttribute("paginator", paginator);
return thymeleaf("/qa/category/index");
}
/**
* 标签页
* @param alias
* @param page
* @param request
* @param model
* @return
*/
@RequestMapping(value = "/tag/{alias}", method = RequestMethod.GET)
public String tag(@PathVariable("alias") String alias,
@RequestParam(required = false, defaultValue = "1", value = "page") int page,
HttpServletRequest request,
Model model) {
// 系统id
CmsSystemExample cmsSystemExample = new CmsSystemExample();
cmsSystemExample.createCriteria()
.andCodeEqualTo(CODE);
CmsSystem system = cmsSystemService.selectFirstByExample(cmsSystemExample);
model.addAttribute("system", system);
// 当前标签
CmsTagExample cmsTagExample = new CmsTagExample();
cmsTagExample.createCriteria()
.andSystemIdEqualTo(system.getSystemId())
.andAliasEqualTo(alias);
CmsTag tag = cmsTagService.selectFirstByExample(cmsTagExample);
model.addAttribute("tag", tag);
// 该标签文章列表
int rows = 10;
List<CmsArticle> articles = cmsArticleService.selectCmsArticlesByTagId(tag.getTagId(), (page - 1) * rows, rows);
model.addAttribute("articles", articles);
// 文章总数
long total = cmsArticleService.countByTagId(tag.getTagId());
// 分页
Paginator paginator = new Paginator(total, page, rows, request);
model.addAttribute("paginator", paginator);
return thymeleaf("/qa/tag/index");
}
/**
* 详情页
* @param articleId
* @param model
* @return
*/
@RequestMapping(value = "/question/{articleId}", method = RequestMethod.GET)
public String question(@PathVariable("articleId") int articleId, Model model) {
CmsArticle article = cmsArticleService.selectByPrimaryKey(articleId);
model.addAttribute("article", article);
// 系统id
CmsSystemExample cmsSystemExample = new CmsSystemExample();
cmsSystemExample.createCriteria()
.andCodeEqualTo(CODE);
CmsSystem system = cmsSystemService.selectFirstByExample(cmsSystemExample);
model.addAttribute("system", system);
// 评论列表
CmsCommentExample cmsCommentExample = new CmsCommentExample();
cmsCommentExample.createCriteria()
.andSystemIdEqualTo(system.getSystemId())
.andArticleIdEqualTo(articleId)
.andStatusEqualTo((byte) 1);
cmsCommentExample.setOrderByClause("ctime desc");
List<CmsComment> comments = cmsCommentService.selectByExampleWithBLOBs(cmsCommentExample);
model.addAttribute("comments", comments);
return thymeleaf("/qa/question/index");
}
/**
* 新增回复
* @param articleId
* @param cmsComment
* @param request
* @return
*/
@RequestMapping(value = "/answer/{articleId}", method = RequestMethod.POST)
@ResponseBody
public Object answer(@PathVariable("articleId") int articleId, CmsComment cmsComment, HttpServletRequest request) {
// 系统id
CmsSystemExample cmsSystemExample = new CmsSystemExample();
cmsSystemExample.createCriteria()
.andCodeEqualTo(CODE);
CmsSystem system = cmsSystemService.selectFirstByExample(cmsSystemExample);
long time = System.currentTimeMillis();
cmsComment.setCtime(time);
cmsComment.setArticleId(articleId);
cmsComment.setUserId(USERID);
cmsComment.setStatus((byte) 1);
cmsComment.setIp(RequestUtil.getIpAddr(request));
cmsComment.setAgent(request.getHeader("User-Agent"));
cmsComment.setSystemId(system.getSystemId());
int count = cmsCommentService.insertSelective(cmsComment);
return new CmsResult(CmsResultConstant.SUCCESS, count);
}
}