/* ==================================================================
* Created [2009-4-27 下午11:32:55] by Jon.King
* ==================================================================
* TSS
* ==================================================================
* mailTo:jinpujun@hotmail.com
* Copyright (c) Jon.King, 2009-2012
* ==================================================================
*/
package com.jinhe.tss.cms.action;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.jinhe.tss.cms.CMSConstants;
import com.jinhe.tss.cms.entity.ArticleScore;
import com.jinhe.tss.cms.helper.parser.ArticleScoreGridParser;
import com.jinhe.tss.cms.helper.parser.ScoreGridParser;
import com.jinhe.tss.cms.service.IScoreService;
import com.jinhe.tss.component.support.persistence.pagequery.PageInfo;
import com.jinhe.tss.component.support.web.webwork.PTActionSupport;
import com.jinhe.tss.core.exception.BusinessException;
import com.jinhe.tss.core.util.DateUtil;
import com.jinhe.tss.core.util.EasyUtils;
import com.jinhe.tss.core.web.dispaly.grid.GridDataEncoder;
import com.jinhe.tss.core.web.dispaly.xform.XFormEncoder;
public class ScoreAction extends PTActionSupport{
private static final long serialVersionUID = 2676212810657258175L;
private IScoreService service;
private Long articleId; // 文章id
private Long commentId; // 评论id
private Integer score; // 分数
private String commentContent; // 评论内容
private String mode; // site:选定栏目,article:选定单篇文章
private String aspect; // 统计类型:1-按作者;2-按文章;3-按栏目
private Date startTime = DateUtil.parse("1949-10-01");
private Date endTime = DateUtil.parse("2049-10-01");
private String channelIds;
private String keywords;
private String author;
private Integer page = 1;
private String type;
/**
* 保存打分信息。
* 供门户中文章页上 打分 时调用。
*/
public String saveScoreInfo(){
if ( articleId == null || score == null )
throw new BusinessException("评分失败,有非空数据项为空");
ArticleScore scorerObj = new ArticleScore();
scorerObj.setArticleId(articleId);
scorerObj.setScoreTime(new Date());
scorerObj.setScore(score);
service.saveScoreInfo(scorerObj);
return printSuccessMessage("感谢您的评分!");
}
/**
* 初始化统计查询XForm模板
* @return
*/
public String initScoreSearchXForm(){
Map<String, Object> map = new HashMap<String, Object>();
XFormEncoder xFormEncoder = new XFormEncoder(CMSConstants.XFORM_TEMPLATE_STATISTICS_SEARCH, map);
if( aspect != null ){
if(aspect.equals("1")){ // 文章作者排行榜
xFormEncoder.setColumnAttribute("aspect", "editorvalue", "1|2|3");
xFormEncoder.setColumnAttribute("aspect", "editortext", "文章作者排行榜|文章评分信息统计|栏目人气统计");
} else if(aspect.equals("2")) { // 文章访问量统计
if(mode.equals("site")){
xFormEncoder.setColumnAttribute("aspect", "editorvalue", "2|1|3");
xFormEncoder.setColumnAttribute("aspect", "editortext", "文章评分信息统计|文章作者排行榜|栏目人气统计");
}
} else if(aspect.equals("3")) { // 栏目人气统计
xFormEncoder.setColumnAttribute("aspect", "editorvalue", "3|2|1");
xFormEncoder.setColumnAttribute("aspect", "editortext", "栏目人气统计|文章评分信息统计|文章作者排行榜");
}
}
return print("SearchInfo", xFormEncoder);
}
/**
* 得到文章打分结果(图表显示)
* @return
*/
public String getScoreResult(){
List<?> list = null;
if ("site".equals(mode)) { // 选定栏目
list = service.findScoreInfoBySelectedChannels(channelIds, startTime, endTime, author);
}
else if ("article".equals(mode)) { // 单篇文章
list = (List<?>) service.findScoreInfoByArticle(articleId)[0];
}
if ("1".equals(type)) {
drawPie(list);
} else if ("0".equals(type)) {
drawBar(list);
}
return XML;
}
/** ***************************************** 生成统计图(start)******************************************** */
/**
* 生成饼状图
*/
private void drawPie(List<?> scoreList) {
}
/**
* 生成柱状图
*/
private void drawBar(List<?> scoreList) {
}
/** ***************************************** 生成统计图(end) ******************************************** */
/**
* <p>
* 得到评分结果(Grid显示)
* </p>
* @return
*/
public String getResult4Grid(){
List<?> list;
GridDataEncoder encoder;
if( "1".equals(aspect) ) {
list = service.findResult4Author(channelIds, startTime, endTime);
encoder = new GridDataEncoder(list, CMSConstants.GRID_TEMPLATE_SCORE_COUNT, new ScoreGridParser());
}
else if( "3".equals(aspect) ) {
// 没有文章的栏目不展示
list = service.getResult4Channel(startTime, endTime);
encoder = new GridDataEncoder(list, CMSConstants.GRID_TEMPLATE_SCORE_CHANNEL);
}
else {
if("site".equals(mode)) {
list = service.findScoreInfoBySelectedChannels(channelIds, startTime, endTime, author);
encoder = new GridDataEncoder(new Object[]{list, "0.0"}, CMSConstants.GRID_TEMPLATE_CHANNEL_ARTICLE_SCORE,
new ArticleScoreGridParser());
} else {
Object[] objs = service.findScoreInfoByArticle(articleId);
list = (List<?>) ((Object[])objs)[0];
encoder = new GridDataEncoder(objs, CMSConstants.GRID_TEMPLATE_ARTICLE_SCORE, new ArticleScoreGridParser());
}
}
// 目前一律一页展示,不分页
String info = getPageInfo(page, 10000, list.size());
return print(new String[]{"ScoreCountList", "PageList"}, new Object[]{encoder, info});
}
/**
* 分页信息
*/
private String getPageInfo(int page, int pagesize, int totalRows){
StringBuffer sb = new StringBuffer();
sb.append("<pagelist totalpages=\"").append(totalRows % pagesize == 0 ? (totalRows / pagesize) : totalRows / pagesize + 1);
sb.append("\" totalrecords=\"").append(totalRows);
sb.append("\" currentpage=\"").append(page);
sb.append("\" pagesize=\"").append(pagesize);
return sb.append("\"/>").toString();
}
/*******************************************评论部分*********************************************/
/**
* 保存评论信息。
* 供门户中文章页上填写评论信息时调用。
*/
public String saveComments(){
if( articleId == null || commentContent == null )
throw new BusinessException("文章ID或评论内容为空,评论失败!");
service.saveComments(articleId, commentContent);
return printSuccessMessage("感谢您的评论!");
}
/**
* 初始化评论页面
*/
public String initCommentsSearchXForm(){
PageInfo pageInfo = service.getCommentListByArticle(articleId, 1);
XFormEncoder xFormEncoder = new XFormEncoder( CMSConstants.XFORM_TEMPLATE_COMMENTS_SEARCH );
GridDataEncoder gridEncoder = new GridDataEncoder(pageInfo.getItems(), CMSConstants.GRID_TEMPLATE_COMMENTS);
return print(new String[]{"SearchInfo", "CommentList", "PageList"},
new Object[]{xFormEncoder, gridEncoder, pageInfo});
}
/**
* <p>
* 得到评论信息
* </p>
* @return
*/
public String getCommentList() {
PageInfo pageInfo = null;
if ( !EasyUtils.isNullOrEmpty(keywords) ) {
pageInfo = service.searchCommentList(keywords, page);
}
else {
pageInfo = service.getCommentListByArticle(articleId, page);
}
GridDataEncoder gridEncoder = new GridDataEncoder(pageInfo.getItems(), CMSConstants.GRID_TEMPLATE_COMMENTS);
return print(new String[]{"CommentList", "PageList"}, new Object[]{gridEncoder, pageInfo});
}
/**
* <p>
* 删除评论信息
* </p>
* @return
*/
public String delComment(){
service.delComments(commentId);
return printSuccessMessage("删除成功!");
}
public void setArticleId(Long articleId) {
this.articleId = articleId;
}
public void setScore(Integer score) {
this.score = score;
}
public void setService(IScoreService service) {
this.service = service;
}
public void setCommentContent(String commentContent) {
this.commentContent = commentContent;
}
public void setMode(String mode) {
this.mode = mode;
}
public void setChannelIds(String channelIds) {
this.channelIds = channelIds;
}
public void setEndTime(Date endTime) {
if( endTime != null ) {
this.endTime = endTime;
}
}
public void setStartTime(Date startTime) {
if( startTime != null ) {
this.startTime = startTime;
}
}
public void setAspect(String aspect) {
this.aspect = aspect;
}
public void setCommentId(Long commentId) {
this.commentId = commentId;
}
public void setPage(Integer page) {
this.page = page;
}
public void setKeywords(String keywords) {
this.keywords = keywords;
}
public void setAuthor(String author) {
this.author = author;
}
public void setType(String type) {
this.type = type;
}
}