/* ==================================================================
* 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.service.impl;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import com.jinhe.tss.cms.dao.IArticleDao;
import com.jinhe.tss.cms.dao.IArticleRelationDao;
import com.jinhe.tss.cms.entity.Article;
import com.jinhe.tss.cms.entity.ArticleComment;
import com.jinhe.tss.cms.entity.ArticleScore;
import com.jinhe.tss.cms.entity.Channel;
import com.jinhe.tss.cms.service.IScoreService;
import com.jinhe.tss.component.support.persistence.pagequery.PageInfo;
import com.jinhe.tss.core.sso.Environment;
import com.jinhe.tss.core.util.EasyUtils;
import com.jinhe.tss.core.util.MathUtil;
public class ScoreService implements IScoreService {
@Autowired private IArticleDao articleDao;
@Autowired private IArticleRelationDao dao;
public void saveScoreInfo(ArticleScore scorerObj) {
dao.create(scorerObj);
//修改文章总分
Article article = articleDao.getEntity(scorerObj.getArticleId());
article.setScores(MathUtil.addInteger(article.getScores(), scorerObj.getScore()));
//修改文章打分总次数
article.setScoreCount(MathUtil.addInteger(article.getScoreCount(), 1));
dao.create(article);
}
public List<?> findScoreInfoBySelectedChannels(String channelList, Date startTime, Date endTime, String author) {
if ( EasyUtils.isNullOrEmpty(channelList) ) {
return new ArrayList<Object>();
}
dao.insertIds2TempTable(channelList.split(","));
List<Long> articleIds = dao.getArticleIdList(startTime, endTime, author);
dao.clearTempTable(); //先将上面插入的临时表数据清除
dao.insertIds2TempTable((List<Long>) articleIds);
String hql = "select count(*), a.score from ArticleScore a, Temp t where a.articleId = t.id group by a.score";
return dao.getEntities(hql);
}
public Object[] findScoreInfoByArticle(Long articleId) {
String hql = "select count(*), a.score from ArticleScore a where a.articleId = ? group by a.score";
List<?> list = dao.getEntities(hql, articleId);
String averageScore = "0.0";
Article article = (Article) dao.getEntity(Article.class, articleId);
if ( article.getScoreCount() != null) {
double avg = article.getScores() / article.getScoreCount();
averageScore = String.valueOf(avg);
}
return new Object[]{list, averageScore};
}
public List<Object[]> findResult4Author(String channelList, Date startTime, Date endTime) {
if ( EasyUtils.isNullOrEmpty(channelList) ) {
return new ArrayList<Object[]>();
}
dao.insertIds2TempTable(channelList.split(","));
List<Object[]> returnList = new ArrayList<Object[]>();
List<?> list = dao.getSummaryGroupByAuthor(startTime, endTime);
for( Object temp : list ) {
Object[] obj = (Object[]) temp;
String author = (String)obj[0];
if(author == null) continue;
List<?> info = dao.getAverageScoreByAuthor(author, startTime, endTime);
Object[] objInfo = (Object[]) info.get(0);
Object[] returnObj = new Object[] { obj[0], objInfo[0], obj[1], obj[2], (Integer) objInfo[1] };
returnList.add(returnObj);
}
return returnList;
}
public List<ArticleScore> getResult4Channel(Date startTime, Date endTime){
List<ArticleScore> returnList = new ArrayList<ArticleScore>();
List<?> list = dao.getSummaryGroupByChannel(startTime, endTime);
for( Object temp : list ) {
Object[] objs = (Object[]) temp;
Long channelId = (Long) objs[0];
Channel channel = (Channel)dao.getEntity(Channel.class, channelId);
Integer articleCount = dao.getChannelArtilceCount(channelId, startTime, endTime);
ArticleScore scorer = new ArticleScore();
scorer.setName(channel.getName());
scorer.setHitCount(objs[1].toString());
scorer.setArticleCount(String.valueOf(articleCount));
List<?> info = dao.getAverageScoreByChannel(channelId, startTime, endTime);
Object [] objInfo = (Object[])info.get(0);
scorer.setAverageScore( EasyUtils.convertObject2Integer(objInfo[0]).toString());
scorer.setScoreCount( EasyUtils.convertObject2Integer(objInfo[1]).toString() );
returnList.add(scorer);
}
return returnList;
}
/********************************************评论部分******************************************** */
public void saveComments(Long articleId, String commentContent) {
ArticleComment comment = new ArticleComment();
comment.setArticleId(articleId);
comment.setCommentContent(commentContent);
comment.setCommentTime(new Date());
comment.setCommenterName(Environment.getUserName());
dao.create(comment);
}
public PageInfo getCommentListByArticle(Long articleId, Integer pageNum) {
Article article = articleDao.getEntity(articleId);
PageInfo page = dao.getCommentsList(articleId, pageNum == null ? new Integer(1) : pageNum);
List<?> list = page.getItems();
if( list != null && list.size() > 0 ) {
for(int i = 0; i < list.size(); i++) {
ArticleComment comment = (ArticleComment) list.get(i);
comment.setArticleTitle(article.getTitle());
}
}
return page;
}
public PageInfo searchCommentList(String keyword, Integer pageNum) {
PageInfo page = dao.getCommentsList4Search(keyword, pageNum == null ? 1 : pageNum);
List<?> list = page.getItems();
if( !EasyUtils.isNullOrEmpty(list) ) {
for( Object temp : list ){
ArticleComment comment = (ArticleComment)temp;
Article article = articleDao.getEntity(comment.getArticleId());
comment.setArticleTitle(article.getTitle());
}
}
return page;
}
public void delComments(Long commentsId) {
dao.delete(ArticleComment.class, commentsId);
}
}