|
|
@@ -21,14 +21,31 @@ The MIT License (MIT) * Copyright (c) 2019 铭飞科技
|
|
|
|
|
|
package net.mingsoft.cms.biz.impl;
|
|
|
|
|
|
+import cn.hutool.core.bean.BeanUtil;
|
|
|
+import cn.hutool.core.bean.copier.CopyOptions;
|
|
|
+import cn.hutool.core.date.DateUtil;
|
|
|
+import cn.hutool.core.io.FileUtil;
|
|
|
+import net.mingsoft.base.constant.Const;
|
|
|
+import net.mingsoft.basic.holder.DataHolder;
|
|
|
import net.mingsoft.basic.util.BasicUtil;
|
|
|
import net.mingsoft.cms.bean.CategoryBean;
|
|
|
import net.mingsoft.cms.bean.ContentBean;
|
|
|
+import net.mingsoft.cms.dao.ICategoryDao;
|
|
|
+import net.mingsoft.cms.entity.CategoryEntity;
|
|
|
+import net.mingsoft.cms.util.CmsParserUtil;
|
|
|
+import net.mingsoft.mdiy.bean.AttributeBean;
|
|
|
+import net.mingsoft.mdiy.bean.PageBean;
|
|
|
import net.mingsoft.mdiy.entity.ModelEntity;
|
|
|
+import net.mingsoft.mdiy.util.ParserUtil;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
+import org.slf4j.Logger;
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import net.mingsoft.base.biz.impl.BaseBizImpl;
|
|
|
import net.mingsoft.base.dao.IBaseDao;
|
|
|
+
|
|
|
+import java.io.IOException;
|
|
|
import java.util.*;
|
|
|
|
|
|
import net.mingsoft.cms.biz.IContentBiz;
|
|
|
@@ -43,9 +60,18 @@ import net.mingsoft.cms.dao.IContentDao;
|
|
|
@Service("cmscontentBizImpl")
|
|
|
public class ContentBizImpl extends BaseBizImpl implements IContentBiz {
|
|
|
|
|
|
-
|
|
|
+ /*
|
|
|
+ * log4j日志记录
|
|
|
+ */
|
|
|
+ protected final Logger LOG = LoggerFactory.getLogger(this.getClass());
|
|
|
+
|
|
|
@Autowired
|
|
|
private IContentDao contentDao;
|
|
|
+ /**
|
|
|
+ * 栏目管理业务层
|
|
|
+ */
|
|
|
+ @Autowired
|
|
|
+ private ICategoryDao categoryDao;
|
|
|
|
|
|
|
|
|
@Override
|
|
|
@@ -67,4 +93,146 @@ public class ContentBizImpl extends BaseBizImpl implements IContentBiz {
|
|
|
}
|
|
|
return contentDao.getSearchCount(null,null,whereMap, appId,categoryIds);
|
|
|
}
|
|
|
+
|
|
|
+ /*
|
|
|
+ * 任务调度静态化任务
|
|
|
+ */
|
|
|
+ public void staticizeTask(Integer appId, String tmpFileName, String generateFileName) {
|
|
|
+ Date now = new Date();
|
|
|
+ LOG.info("定时静态化任务", now);
|
|
|
+ //生成栏目,更新所有栏目
|
|
|
+ try {
|
|
|
+ DataHolder.set(ParserUtil.APP_ID, appId);
|
|
|
+ genernateColumn();
|
|
|
+ generaterIndex(tmpFileName, generateFileName);
|
|
|
+ generateArticle(DateUtil.format(now, "yyyy-MM-dd"));
|
|
|
+ LOG.info("静态化完成", new Date());
|
|
|
+ } catch (IOException e) {
|
|
|
+ LOG.info("静态化失败", new Date());
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //文章
|
|
|
+ private void generateArticle(String dateTime) throws IOException {
|
|
|
+ // 网站风格物理路径
|
|
|
+ List<CategoryBean> articleIdList = null;
|
|
|
+ List<CategoryEntity> categoryList = null;
|
|
|
+ AttributeBean attributeBean = new AttributeBean();
|
|
|
+ ContentBean contentBean = new ContentBean();
|
|
|
+ contentBean.setBeginTime(dateTime);
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ map.put(ParserUtil.APP_ID, BasicUtil.getAppId());
|
|
|
+ PageBean page = new PageBean();
|
|
|
+ map.put(ParserUtil.HTML, ParserUtil.HTML);
|
|
|
+ map.put(ParserUtil.URL, BasicUtil.getUrl());
|
|
|
+ map.put(ParserUtil.PAGE, page);
|
|
|
+
|
|
|
+ CategoryEntity categoryEntity = new CategoryEntity();
|
|
|
+ categoryList = categoryDao.query(categoryEntity);
|
|
|
+ for(CategoryEntity category : categoryList){
|
|
|
+ contentBean.setContentCategoryId(category.getId());
|
|
|
+ // 分类是列表
|
|
|
+ if(category.getCategoryType().equals("1")){
|
|
|
+ // 判断模板文件是否存在
|
|
|
+ if (!FileUtil.exist(ParserUtil.buildTempletPath(category.getCategoryListUrl())) || StringUtils.isEmpty(category.getCategoryListUrl())) {
|
|
|
+ LOG.error("模板不存在:{}",category.getCategoryUrl());
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ // 获取文章列表表属性
|
|
|
+ ParserUtil.read(category.getCategoryListUrl(),map, page,attributeBean);
|
|
|
+ contentBean.setFlag(attributeBean.getFlag());
|
|
|
+ contentBean.setNoflag(attributeBean.getNoflag());
|
|
|
+ contentBean.setOrder(attributeBean.getOrder());
|
|
|
+ contentBean.setOrderBy(attributeBean.getOrderby());
|
|
|
+ }
|
|
|
+ articleIdList = queryIdsByCategoryIdForParser(contentBean);
|
|
|
+ // 有符合条件的就更新
|
|
|
+ if (articleIdList.size() > 0) {
|
|
|
+ CmsParserUtil.generateBasic(articleIdList);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //栏目
|
|
|
+ private void genernateColumn() throws IOException {
|
|
|
+ List<CategoryEntity> columns = new ArrayList<>();
|
|
|
+ // 获取所有的内容管理栏目
|
|
|
+ CategoryEntity categoryEntity=new CategoryEntity();
|
|
|
+ Integer appId = (Integer) DataHolder.get(ParserUtil.APP_ID);
|
|
|
+ categoryEntity.setAppId(appId);
|
|
|
+ columns = categoryDao.query(categoryEntity);
|
|
|
+ List<CategoryBean> articleIdList = null;
|
|
|
+ // 1、设置模板文件夹路径
|
|
|
+ // 获取栏目列表模版
|
|
|
+ for (CategoryEntity column : columns) {
|
|
|
+ ContentBean contentBean = new ContentBean();
|
|
|
+ contentBean.setContentCategoryId(column.getId());
|
|
|
+ // 分类是列表
|
|
|
+ if(column.getCategoryType().equals("1")) {
|
|
|
+ // 判断模板文件是否存在
|
|
|
+ if (!FileUtil.exist(ParserUtil.buildTempletPath(column.getCategoryListUrl()))) {
|
|
|
+ LOG.error("模板不存在:{}", column.getCategoryUrl());
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ //获取模板中列表标签中的条件
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ map.put(ParserUtil.APP_ID, BasicUtil.getAppId());
|
|
|
+ PageBean page = new PageBean();
|
|
|
+ map.put(ParserUtil.HTML, ParserUtil.HTML);
|
|
|
+ map.put(ParserUtil.URL, BasicUtil.getUrl());
|
|
|
+ map.put(ParserUtil.PAGE, page);
|
|
|
+ AttributeBean attributeBean = new AttributeBean();
|
|
|
+ // 获取文章列表模板标签属性
|
|
|
+ ParserUtil.read(column.getCategoryListUrl(), map, page, attributeBean);
|
|
|
+ contentBean.setFlag(attributeBean.getFlag());
|
|
|
+ contentBean.setNoflag(attributeBean.getNoflag());
|
|
|
+ contentBean.setOrder(attributeBean.getOrder());
|
|
|
+ contentBean.setOrderBy(attributeBean.getOrderby());
|
|
|
+ }
|
|
|
+ articleIdList = contentDao.queryIdsByCategoryIdForParser(contentBean);
|
|
|
+ // 判断列表类型
|
|
|
+ switch (column.getCategoryType()) {
|
|
|
+ //TODO 暂时先用字符串代替
|
|
|
+ case "1": // 列表
|
|
|
+ CmsParserUtil.generateList(column, articleIdList.size());
|
|
|
+ break;
|
|
|
+ case "2":// 单页
|
|
|
+ if(articleIdList.size()==0){
|
|
|
+ CategoryBean columnArticleIdBean=new CategoryBean();
|
|
|
+ CopyOptions copyOptions=CopyOptions.create();
|
|
|
+ copyOptions.setIgnoreError(true);
|
|
|
+ BeanUtil.copyProperties(column,columnArticleIdBean,copyOptions);
|
|
|
+ articleIdList.add(columnArticleIdBean);
|
|
|
+ }
|
|
|
+ CmsParserUtil.generateBasic(articleIdList);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //主页
|
|
|
+ private void generaterIndex(String templatePath, String targetPath) throws IOException {
|
|
|
+ if (!FileUtil.exist(ParserUtil.buildTempletPath())) {
|
|
|
+ LOG.info("模板文件不存在");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ Integer appId = (Integer) DataHolder.get(ParserUtil.APP_ID);
|
|
|
+ Map<String, Object> map = new HashMap<String, Object>();
|
|
|
+ map.put(ParserUtil.IS_DO, false);
|
|
|
+ CategoryEntity column = new CategoryEntity();
|
|
|
+ //内容管理栏目编码
|
|
|
+ map.put(ParserUtil.COLUMN, column);
|
|
|
+ //如果单站点,就废弃站点地址
|
|
|
+ if (ParserUtil.IS_SINGLE) {
|
|
|
+ map.put(ParserUtil.URL, BasicUtil.getUrl());
|
|
|
+ }
|
|
|
+ //设置生成的路径
|
|
|
+ map.put(ParserUtil.HTML, ParserUtil.HTML);
|
|
|
+ //设置站点编号
|
|
|
+ map.put(ParserUtil.APP_ID, appId);
|
|
|
+ String read = ParserUtil.read(templatePath, map);
|
|
|
+ FileUtil.writeString(read, ParserUtil.buildHtmlPath(targetPath), Const.UTF8);
|
|
|
+ }
|
|
|
+
|
|
|
}
|