/* ==================================================================
* 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.io.File;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import com.jinhe.tss.cms.CMSConstants;
import com.jinhe.tss.cms.dao.IArticleDao;
import com.jinhe.tss.cms.dao.IChannelDao;
import com.jinhe.tss.cms.entity.Article;
import com.jinhe.tss.cms.entity.ArticleLation;
import com.jinhe.tss.cms.entity.ArticleLationId;
import com.jinhe.tss.cms.entity.Attachment;
import com.jinhe.tss.cms.entity.AttachmentId;
import com.jinhe.tss.cms.entity.Channel;
import com.jinhe.tss.cms.entity.ChannelArticle;
import com.jinhe.tss.cms.entity.ChannelArticleId;
import com.jinhe.tss.cms.entity.WordsFilter;
import com.jinhe.tss.cms.helper.ArticleHelper;
import com.jinhe.tss.cms.helper.ArticleQueryCondition;
import com.jinhe.tss.cms.publish.PublishManger;
import com.jinhe.tss.cms.service.IArticleService;
import com.jinhe.tss.component.param.extend.ParamConfig;
import com.jinhe.tss.component.support.persistence.pagequery.PageInfo;
import com.jinhe.tss.core.exception.BusinessException;
import com.jinhe.tss.core.sso.Environment;
import com.jinhe.tss.core.util.BeanUtil;
import com.jinhe.tss.core.util.EasyUtils;
import com.jinhe.tss.core.util.FileHelper;
public class ArticleService implements IArticleService {
protected final Logger log = Logger.getLogger(getClass());
@Autowired private IArticleDao articleDao;
@Autowired private IChannelDao channelDao;
public Article getArticleById(Long articleId) {
Article article = getArticleOnly(articleId);
article.getAttachments().putAll(articleDao.getArticleAttachments(articleId));;
return article;
}
public void copyArticle(Long articleId, Long channelId, boolean copyTo) {
Article article = getArticleOnly(articleId);
Article newarticle = new Article();
BeanUtil.copy(newarticle, article, Article.IGNORE_PROPERTIES);
newarticle.setScoreCount(null);
newarticle.setScores(null);
newarticle.setStatus(CMSConstants.START_STATUS);
newarticle.setHitCount(CMSConstants.DEFAULT_HIT_COUNT);
if ( !copyTo )
newarticle.setTitle(CMSConstants.COPY_NAME_PREFIX + article.getTitle());
newarticle.setWzrq(new Date());
newarticle.getDynpropertiesMap().putAll(article.getDynpropertiesMap());
articleDao.saveArticle(newarticle);
// 新增栏目文章关系
createChannelArticleRelation(channelId, newarticle.getId());
// 分发源的相关信息
List<?> list = channelDao.getChannelTreeUpNoPermission(channelId);
String sourcePath = "";
for (int i = 0; i < list.size(); i++) {
Channel temp = (Channel) list.get(i);
sourcePath += "/" + temp.getName();
}
Channel site = channelDao.getSiteByChannel(channelId);
Object[] objects = new Object[4];
objects[0] = site.getId();
objects[1] = channelId;
objects[2] = newarticle.getId();
objects[3] = site.getName() + sourcePath;
// 维护相关栏目的栏目文章关系
addChannelAndArticleRelationShip(channelId, newarticle.getId(), objects);
// 复制附件信息
Map<String, Attachment> attachmentMap = articleDao.getArticleAttachments(articleId);
for ( Attachment attachment : attachmentMap.values() ) {
// 只是针对附件在服务器上的文章进行处理,导入文章的附件不在以下代码的处理范围
String path = site.getAttanchmentPath(attachment);
File file = new File(site.getPath() + "/" + path + "/" + attachment.getLocalPath());
String localPath = addFile2Path(file, ArticleHelper.getAttachmentPath(site, attachment.getType()));
// 新增附件信息
Attachment attach = new Attachment(); // 新增附件信息
BeanUtil.copy(attach, attachment);
attach.setId(attachment.getId());
attach.getId().setArticleId(newarticle.getId());
String year = new SimpleDateFormat("yyyy").format(new Date()); // 取到年度
attach.setLocalPath(localPath.substring(localPath.indexOf(year)));
attach.setUploadDate(new Date());
articleDao.createObject(attach);
}
}
/**
* 新增附件
*/
private String addFile2Path(File file, String path) {
File dir = new File(path);
// 如果是在统一目录下,则不用再复制。
if(file.getParentFile().equals(dir)) return file.getPath();
if (!dir.exists()) dir.mkdirs();
String filaName = FileHelper.copyFile(dir, file, true, false);
return path + "/" + filaName;
}
public void createArticle(Article article, Long channelId, String attachList, Long tempArticleId) {
Channel channel = channelDao.getEntity(channelId);
Date calculateOverDate = ArticleHelper.calculateOverDate(article, channel);
if( calculateOverDate != null ) {
article.setOverdueDate(calculateOverDate);
}
articleDao.saveArticle(article);
// 处理附件
List<String> attachSeqNos = new LinkedList<String>();
if ( !EasyUtils.isNullOrEmpty(attachList) ) {
StringTokenizer st = new StringTokenizer(attachList, ",");
while (st.hasMoreTokens()) {
attachSeqNos.add(st.nextToken());
}
}
Map<String, Attachment> attachments = articleDao.getArticleAttachments(tempArticleId); // 后台查找的新建文章时上传的附件列表
for ( Attachment attachment : attachments.values() ) {
Integer seqNo = attachment.getId().getSeqNo();
if (attachSeqNos.contains(seqNo.toString())) { // 判断附件在文章保存时是否还存在
translatePath(attachment, article, channelId);
// 新增附件信息
Attachment attach = new Attachment();
BeanUtil.copy(attach, attachment);
attach.setId(new AttachmentId(article.getId(), seqNo));
articleDao.createObject(attach);
}
else {
// 删除附件
String[] uploadName = ArticleHelper.getAttachUploadPath(channelDao.getSiteByChannel(channelId), attachment);
new File(uploadName[0]).delete();
}
//删除老的附件信息
articleDao.delete(attachment);
}
// 更新文章内容中资源的连接地址
articleDao.saveArticle(article);
// 将栏目文章关系中文章临时ID对应栏目关系删除
articleDao.deleteAll(articleDao.getEntities("from ChannelArticle ca where ca.id.articleId > 100000000"));
createChannelArticleRelation(channelId, article.getId());
// 分发源的相关信息
Channel site = channelDao.getEntity(channel.getSiteId());
List<?> list = channelDao.getChannelTreeUpNoPermission(channel.getId());
String sourcePath = "";
if ( list != null) {
for (int i = 0; i < list.size(); i++) {
Channel temp = (Channel) list.get(i);
sourcePath += "/" + temp.getName();
}
}
Object[] objects = new Object[4];
objects[0] = site.getId();
objects[1] = channel.getId();
objects[2] = article.getId();
objects[3] = site.getName() + sourcePath;
// 维护相关栏目的栏目文章关系
addChannelAndArticleRelationShip(channelId, article.getId(), objects);
}
public void createChannelArticleRelation(Long channelId, Long articleId) {
// 栏目文章关系
ChannelArticle ca = new ChannelArticle();
ca.setId(new ChannelArticleId(channelId, articleId));
ca.setSeqNo(articleDao.getChannelArticleNextOrder(channelId));
articleDao.createObject(ca);
}
/**
* 新增文章时,给“分发至”的栏目进行栏目文章关系表的维护
*/
private void addChannelAndArticleRelationShip(Long channelId, Long articleId, Object[] objects) {
List<?> desList = channelDao.getChannelDestinationByChannelId(channelId);
for (int i = 0; i < desList.size(); i++) {
Long desChannelId = ((Channel) desList.get(i)).getId();
ChannelArticle channelArticle = new ChannelArticle();
channelArticle.setId(new ChannelArticleId(desChannelId, articleId));
channelArticle.setSourceSiteId((Long) objects[0]);
channelArticle.setSourceChannelId((Long) objects[1]);
channelArticle.setSourceArticleId((Long) objects[2]);
channelArticle.setPathName((String) objects[3]);
channelArticle.setIsTop(CMSConstants.FALSE);
channelArticle.setSeqNo(articleDao.getChannelArticleNextOrder(desChannelId));
channelArticle.setArticleOrigin(CMSConstants.ARTICLE_DISTRIBUTE);
articleDao.createObject(channelArticle);
}
}
/**
* 将文章内容中的临时地址替换成真实地址。
* 主要是将临时生成的附件ID替换成附件所属文章的ID。
*/
private void translatePath(Attachment attachment, Article article, Long channelId) {
String attRelationDownloadUrl = attachment.getRelationDownloadUrl(); // download.fun?id=1216&seqNo=1
attRelationDownloadUrl = attRelationDownloadUrl.replaceAll("&", "&"); //将&替换成&
StringBuffer sb = new StringBuffer(article.getContent());
int index = sb.indexOf(attRelationDownloadUrl);
while (index != -1) {
StringBuffer buffer = new StringBuffer();
int idIndex = attRelationDownloadUrl.indexOf("?id=");
String realAttUploadName;
if (idIndex != -1) {
realAttUploadName = attRelationDownloadUrl.substring(0, idIndex + 4);
realAttUploadName += article.getId() + attRelationDownloadUrl.substring(attRelationDownloadUrl.indexOf("&"));
buffer.append(sb.substring(0, index)).append(realAttUploadName).append(sb.substring(index + attRelationDownloadUrl.length()));
sb = buffer;
}
index = sb.indexOf(attRelationDownloadUrl);
}
article.setContent(sb.toString());
}
public void updateArticle(Article article, Long channelId, String attachList) {
articleDao.saveArticle(article);
// 处理附件, attachList为需要删除的附件列表
if ( !EasyUtils.isNullOrEmpty(attachList) ) {
StringTokenizer st = new StringTokenizer(attachList, ",");
List<String> attachSeqNos = new LinkedList<String>();
while (st.hasMoreTokens()) {
attachSeqNos.add(st.nextToken());
}
Map<String, Attachment> attachments = articleDao.getArticleAttachments(article.getId());
for ( Attachment attachment : attachments.values() ) {
if (!attachSeqNos.contains(attachment.getId().getSeqNo().toString()))
continue;
// 删除附件
articleDao.delete(attachment);
Channel site = channelDao.getSiteByChannel(channelId);
String path = site.getPath() + "/" + site.getAttanchmentPath(attachment) + "/" + attachment.getLocalPath();
new File(path).delete();
}
}
}
public void deleteArticle(Long articleId, Long channelId) {
ChannelArticleId id = new ChannelArticleId(channelId, articleId);
ChannelArticle ca = (ChannelArticle) articleDao.getEntity(ChannelArticle.class, id);
if (CMSConstants.ARTICLE_DISTRIBUTE.equals(ca.getArticleOrigin())) { // 分发文章时应该只删除关系表信息
articleDao.delete(getChannelArticle(articleId, channelId));
}
else {
Article article = getArticleOnly(articleId);
article.setChannelId(channelId);
article.setSite(channelDao.getSiteByChannel(channelId));
articleDao.deleteArticle(article);
}
}
private Article getArticleOnly(Long articleId){
if (articleId == null)
throw new BusinessException("参数articleId为空!");
Article article = (Article) articleDao.getEntity(Article.class, articleId);
if (article == null)
throw new NullPointerException("未找到文章!");
if (CMSConstants.TRUE.equals(article.getDeleted()))
throw new BusinessException("文章已被删除至回收站中");
return article;
}
public void moveArticle(Long articleId, Long oldChannelId, Long channelId) {
// 移动前的栏目文章关系表信息
ChannelArticleId id = new ChannelArticleId(oldChannelId, articleId);
ChannelArticle exsitChannelArticle = (ChannelArticle) articleDao.getEntity(ChannelArticle.class, id);
Integer articleOrigin = exsitChannelArticle.getArticleOrigin();
Integer isTop = exsitChannelArticle.getIsTop();
// 删除原来普通文章的栏目文章关系信息
articleDao.delete(exsitChannelArticle);
// 新分发源信息:即目标栏目替代源栏目做为新的分发源
Channel channel = channelDao.getEntity(channelId);
Channel site = channelDao.getEntity(channel.getSiteId());
Long sourceSiteId = site.getId();
String pathName = site.getName() + "/" + channel.getName();
if ( CMSConstants.ARTICLE_COMMON.equals(articleOrigin) ) { // 移动的是普通文章
// 文章和目标栏目是否已经存在关系,如已存在则先删除
ChannelArticle oldChannelArticle = articleDao.getChannelArticle(articleId, channelId);
if (oldChannelArticle != null) {
articleDao.delete(oldChannelArticle);
}
// 为移动的文章新增栏目文章关系信息
ChannelArticle ca = new ChannelArticle();
ca.setId(new ChannelArticleId(channelId, articleId));
ca.setArticleOrigin(CMSConstants.ARTICLE_COMMON);
ca.setIsTop(isTop);
ca.setSeqNo(articleDao.getChannelArticleNextOrder(channelId));
articleDao.createObject(ca);
// 修改分发文章的栏目文章关系
List<?> existList = articleDao.getFFChannelArticleListByArticle(articleId);
updateExsitRelation(existList, sourceSiteId, channelId, pathName);
// 修改转载文章的栏目文章关系
existList = articleDao.getZZChannelArticleList(articleId, oldChannelId);
updateExsitRelation(existList, sourceSiteId, channelId, pathName);
}
}
private void updateExsitRelation(List<?> existList, Long sourceSiteId, Long channelId, String pathName) {
// 修改文章和目标栏目之外的栏目直接的分发(或转载)关系,把分发源有移动前的栏目改为目标栏目
for ( Object temp : existList ) {
ChannelArticle channelArticle = (ChannelArticle) temp;
channelArticle.setSourceSiteId(sourceSiteId);
channelArticle.setSourceChannelId(channelId);
channelArticle.setPathName(pathName);
articleDao.updateWithoutFlush(channelArticle);
}
}
public void moveArticleDownOrUp(Long articleId, Long toArticleId, Long channelId) {
ChannelArticle ca1 = getChannelArticle(articleId, channelId);
ChannelArticle ca2 = getChannelArticle(toArticleId, channelId);
ca1.setSeqNo(ca2.getSeqNo());
ca2.setSeqNo(ca1.getSeqNo());
articleDao.update(ca1);
articleDao.update(ca2);
}
public void moveArticleDownOrUpCross(Long articleId, Long channelId, Integer page, int direction){
Long toArticleId = null;
if (direction == 1) { // 下移
PageInfo pageInfo = articleDao.getPageList(channelId, page + 1);
Object[] nextPageFirst = (Object[]) pageInfo.getItems().get(0);
toArticleId = (Long) nextPageFirst[0];
}
else if (direction == -1) { // 上移
PageInfo pageInfo = articleDao.getPageList(channelId, page - 1);
Object[] prePageLast = (Object[]) pageInfo.getItems().get(pageInfo.getPageSize() - 1);
toArticleId = (Long) prePageLast[0];
}
moveArticleDownOrUp(articleId, toArticleId, channelId);
}
public void lockingArticle(Long articleId) {
Article article = (Article) getArticleOnly(articleId);
if (CMSConstants.LOCKING_STATUS.equals(article.getStatus())) {
throw new BusinessException("文章已被锁定");
}
if (!CMSConstants.START_STATUS.equals(article.getStatus())) {
throw new BusinessException("文章不处于初始状态,不能锁定");
}
article.setStatus(CMSConstants.LOCKING_STATUS);
articleDao.update(article);
}
public void unLockingArticle(Long articleId) {
Article article = (Article) getArticleOnly(articleId);
if (CMSConstants.START_STATUS.equals(article.getStatus())) {
throw new BusinessException("文章已被解除锁定");
}
if (!CMSConstants.LOCKING_STATUS.equals(article.getStatus())) {
throw new BusinessException("文章不处于锁定状态,不能解除锁定");
}
article.setStatus(CMSConstants.START_STATUS);
articleDao.update(article);
}
public void changeArticleStatus(Long articleId, Integer oldStatus, Integer status, Integer workflowId) {
Article article = getArticleOnly(articleId);
Integer articleStatus = article.getStatus();
// 如果文章是XMLSTATUS状态时,等同于TOPUBLISH_STATUS状态(数据库状态为XMLSTATUS,当前状态为TOPUBLISH_STATUS不报错)
if (!oldStatus.equals(articleStatus)) {
if ( !CMSConstants.XML_STATUS.equals(articleStatus) && !CMSConstants.TOPUBLISH_STATUS.equals(oldStatus)) {
throw new BusinessException("文章状态不同步,请刷新文章列表重新获取最新文章状态!");
}
}
// publishFlag用来判断流程走到发布时是否要生成xml文件
String publishFlag = ParamConfig.getAttribute(CMSConstants.PARAM_NAME_PUBLISHFLAG);
if (CMSConstants.BOOLEAN_TRUE.equals(publishFlag)) {
// 流程回退到过期前,流程状态要保证在-1的状态;旧流程状态为 5:“已过期”
if ( CMSConstants.TOPUBLISH_STATUS < oldStatus && CMSConstants.TOPUBLISH_STATUS.equals(status) ) {
status = CMSConstants.XML_STATUS;
}
}
if (status.equals(article.getStatus())) {
return; // 流程状态已经被改变(可能有其他人再同样操作)。
}
article.setStatus(status);
Long channelId = articleDao.getChannelIdByArticleId(articleId);
if (channelId == null) {
throw new BusinessException("分发文章不能进行流程的修改!");
}
if (CMSConstants.BOOLEAN_TRUE.equals(publishFlag)) {// 流程走到发布时就要生成xml文件
if ( CMSConstants.TOPUBLISH_STATUS > oldStatus && CMSConstants.TOPUBLISH_STATUS.equals(status) ) {
publishArticle(article, channelId);
}
// 从已过期 和 待发布 状态回退时需要处理发布时间问题
// 旧流程状态为 “待发布” 或 “已过期”
// 新流程状态为 “待发布” 之前(已审核 或 已编辑) 且 不为 已发布
// 例如:已过期 回退至 已编辑, 将发布日期修改为空
if (CMSConstants.TOPUBLISH_STATUS <= oldStatus && CMSConstants.TOPUBLISH_STATUS > status && !CMSConstants.XML_STATUS.equals(status)) {
if (article.getIssueDate() != null && article.getIssueDate().before(new Date())) {
article.setIssueDate(null);
}
}
}
else if (CMSConstants.BOOLEAN_FALSE.equals(publishFlag)) { // 流程走到发布状态仅仅只是状态的改变,需要增量发布才能生成xml文件
// 从已过期和xml文件状态回退时需要处理发布时间问题, 例如:已过期 回退至 已编辑, 将发布日期修改为空
if ((CMSConstants.TOPUBLISH_STATUS < oldStatus
|| CMSConstants.XML_STATUS.intValue() == oldStatus.intValue()) // 旧流程状态oldStatus为 “已过期” 或 “已发布”
&& CMSConstants.TOPUBLISH_STATUS >= status) { // 新流程状态为 “待发布” 之前(已审核 或 已编辑)
if (article.getIssueDate() != null && !article.getIssueDate().after(new Date())) {
article.setIssueDate(null);
}
}
}
articleDao.update(article);
}
private void publishArticle(Article article, Long channelId) {
// 获取文章附件
article.getAttachments().putAll(articleDao.getArticleAttachments(article.getId()));
article.setStatus(CMSConstants.XML_STATUS);
// 发布时,如果文章设定的发布时间早于当前时间则更新发布时间。
if (article.getIssueDate() == null || article.getIssueDate().before(new Date())) {
article.setIssueDate(new Date());
}
Channel channel = channelDao.getEntity(channelId);
article.setChannelId(channelId);
article.setChannelName(channel.getName());
article.setArticleTypeId(channel.getArticleTypeId());
article.setTypeName(channel.getArticleTypeName());
Channel site = channelDao.getEntity(channel.getSiteId());
String publishPath = site.getPath() + "/" + ArticleHelper.getArticlePublishRule(article.getCreateTime());
WordsFilter wordsFilter = (WordsFilter)articleDao.getEntity( WordsFilter.class, site.getId());
String pubUrl = PublishManger.publishOneArticle(article, publishPath, wordsFilter);
article.setPubUrl(pubUrl);
}
public void reshipArticle(Long articleId, Long channelId, Long fromChannelId){
Article article = getArticleOnly(articleId);
Article newArticle = new Article();
BeanUtil.copy(newArticle, article, Article.IGNORE_PROPERTIES);
newArticle.setStatus(CMSConstants.START_STATUS);
newArticle.setHitCount(CMSConstants.DEFAULT_HIT_COUNT);
newArticle.setDeleted(CMSConstants.FALSE);
newArticle.setTitle(article.getTitle());
newArticle.setArticleOrigin(CMSConstants.ARTICLE_RESHIP);
newArticle.setWzrq(new Date());
articleDao.create(newArticle);
// 转载源关系信息
Channel fromChannel = channelDao.getEntity(fromChannelId);
Channel fromSite = channelDao.getEntity(fromChannel.getSiteId());
// 分发源关系信息
Channel toChannel = channelDao.getEntity(channelId);
Channel toSite = channelDao.getEntity(toChannel.getSiteId());
List<?> list = channelDao.getChannelTreeUpNoPermission(channelId);
String oldSourcePath = "";
for (int i = 0; i < list.size(); i++) {
Channel channel = (Channel) list.get(i);
oldSourcePath += "/" + channel.getName();
}
list = channelDao.getChannelTreeUpNoPermission(toChannel.getId());
String newSourcePath = "";
for (int i = 0; i < list.size(); i++) {
Channel channel = (Channel) list.get(i);
newSourcePath += "/" + channel.getName();
}
Object[] distributeInfos = new Object[4];
distributeInfos[0] = toSite.getId();
distributeInfos[1] = toChannel.getId();
distributeInfos[2] = newArticle.getId();
distributeInfos[3] = toSite.getName() + newSourcePath;
// 新增栏目文章关系
ChannelArticle ca = new ChannelArticle();
ca.setId(new ChannelArticleId(channelId, newArticle.getId()));
ca.setSourceSiteId(fromSite.getId());
ca.setSourceChannelId(fromChannel.getId());
ca.setSourceArticleId(article.getId());
ca.setPathName(fromSite.getName() + oldSourcePath);
ca.setIsTop(CMSConstants.FALSE);
ca.setSeqNo(articleDao.getChannelArticleNextOrder(channelId));
ca.setArticleOrigin(CMSConstants.ARTICLE_RESHIP);
articleDao.createObject(ca);
// 维护相关栏目的栏目文章关系
addChannelAndArticleRelationShip(channelId, newArticle.getId(), distributeInfos);
}
public void doTopArticle(Long articleId, Long channelId) {
ChannelArticle ca = getChannelArticle(articleId, channelId);
ca.setIsTop(CMSConstants.TRUE);
articleDao.update(ca);
}
public void undoTopArticle(Long articleId, Long channelId) {
ChannelArticle ca = getChannelArticle(articleId, channelId);
ca.setIsTop(CMSConstants.FALSE);
articleDao.update(ca);
}
public Object[] getArticleExistRelationship(Long articleId) {
Object[] returnObjs = new Object[2];
returnObjs[0] = channelDao.getAllSiteChannelList();
returnObjs[1] = articleDao.getArticleLationsById(articleId);
return returnObjs;
}
public void relatedArticleTo(Long articleId, String relatedArticleIds) {
// 先清除所有已经存在的关系信息
articleDao.deleteAll(articleDao.getLationsById(articleId));
if ( EasyUtils.isNullOrEmpty(relatedArticleIds)) {
return;
}
String[] ids = relatedArticleIds.split(",");
for (String id : ids) {
ArticleLationId lationId = new ArticleLationId();
lationId.setArticleId(articleId);
lationId.setLationArticleId(new Long(id));
ArticleLation lation = new ArticleLation();
lation.setId(lationId);
lation.setSeqNo(articleDao.getArticleLationNextOrder(articleId));
articleDao.createObject(lation);
}
}
public Object[] getDistributeArticleRelationShip(Long articleId, Long channelId) {
List<Long> channelIdsCanAddArticle = channelDao.getSiteChannelIDsByOperationId(CMSConstants.OPERATION_ADD_ARTICLE);
Object[] objects = new Object[3];
objects[0] = channelDao.getAllSiteChannelList();
objects[1] = EasyUtils.list2Str(channelIdsCanAddArticle);
objects[2] = articleDao.getDispathedToChannels(articleId);
return objects;
}
public void saveDistributeArticleRelationShip(Long articleId, Long channelId, String distributeToChannelIds) {
articleDao.deleteAll(articleDao.getFFChannelArticleListByArticle(articleId));
if ( EasyUtils.isNullOrEmpty(distributeToChannelIds)) {
return;
}
String[] ids = distributeToChannelIds.split(",");
for (int j = 0; j < ids.length; j++) {
Long tempChannelId = new Long(ids[j]);
ChannelArticle channelArticle = new ChannelArticle();
channelArticle.setId(new ChannelArticleId(tempChannelId, articleId));
channelArticle.setSeqNo(articleDao.getChannelArticleNextOrder(tempChannelId));
channelArticle.setArticleOrigin(CMSConstants.ARTICLE_DISTRIBUTE);
// 分发源的相关信息
Channel rootChannel = channelDao.getEntity(channelId);
Channel site = channelDao.getEntity(rootChannel.getSiteId());
List<?> list = channelDao.getChannelTreeUpNoPermission(channelId);
String sourcePath = "";
for (int i = 0; i < list.size(); i++) {
Channel channel = (Channel) list.get(i);
sourcePath += "/" + channel.getName();
}
channelArticle.setSourceSiteId(site.getId());
channelArticle.setSourceChannelId(channelId);
channelArticle.setSourceArticleId(articleId);
channelArticle.setPathName(site.getName() + sourcePath);
articleDao.createObject(channelArticle);
}
}
public ChannelArticle getChannelArticle(Long articleId, Long channelId) {
ChannelArticle ca = articleDao.getChannelArticle(articleId, channelId);
if (ca == null) throw new BusinessException("未找到栏目文章关系!");
return ca;
}
public PageInfo getChannelArticles(Long channelId, Integer pageNum, String...orderBy) {
if( !channelDao.checkBrowsePermission(channelId) ) {
log.error("用户【" + Environment.getOperatorName() + "】试图访问没有文章浏览权限的栏目【" + channelId + "】");
return new PageInfo();
}
return articleDao.getPageList(channelId, pageNum, orderBy);
}
public Object[] searchArticleList(ArticleQueryCondition condition) {
// 将用户有浏览权限的选定栏目下子栏目ID列表存入临时表中
Long channelId = condition.getChannelId();
List<Channel> children = channelDao.getChildrenById(channelId, CMSConstants.OPERATION_BROWSE);
channelDao.insertEntityIds2TempTable(children);
condition.setChannelId(null);
PageInfo page = articleDao.getSearchArticlePageList(condition);
List<?> list = page.getItems();
List<Article> articleList = new ArrayList<Article>();
if ( !EasyUtils.isNullOrEmpty(list) ) {
for ( Object temp : list ) {
Article article = ArticleHelper.createArticle((Object[]) temp);
articleList.add(article);
}
}
return new Object[]{articleList, page};
}
public boolean getArticleWorkflowPermission(String operationId, Long workFlowId) {
return articleDao.checkArticleWorkflowPermission(operationId, workFlowId);
}
}