静态化任务调度

This commit is contained in:
xierz 2020-10-23 17:56:03 +08:00
parent b3fdd1fc09
commit be9263c002
2 changed files with 172 additions and 1 deletions

View File

@ -21,14 +21,31 @@ The MIT License (MIT) * Copyright (c) 2019 铭飞科技
package net.mingsoft.cms.biz.impl; 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.basic.util.BasicUtil;
import net.mingsoft.cms.bean.CategoryBean; import net.mingsoft.cms.bean.CategoryBean;
import net.mingsoft.cms.bean.ContentBean; 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.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.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import net.mingsoft.base.biz.impl.BaseBizImpl; import net.mingsoft.base.biz.impl.BaseBizImpl;
import net.mingsoft.base.dao.IBaseDao; import net.mingsoft.base.dao.IBaseDao;
import java.io.IOException;
import java.util.*; import java.util.*;
import net.mingsoft.cms.biz.IContentBiz; import net.mingsoft.cms.biz.IContentBiz;
@ -43,9 +60,18 @@ import net.mingsoft.cms.dao.IContentDao;
@Service("cmscontentBizImpl") @Service("cmscontentBizImpl")
public class ContentBizImpl extends BaseBizImpl implements IContentBiz { public class ContentBizImpl extends BaseBizImpl implements IContentBiz {
/*
* log4j日志记录
*/
protected final Logger LOG = LoggerFactory.getLogger(this.getClass());
@Autowired @Autowired
private IContentDao contentDao; private IContentDao contentDao;
/**
* 栏目管理业务层
*/
@Autowired
private ICategoryDao categoryDao;
@Override @Override
@ -67,4 +93,146 @@ public class ContentBizImpl extends BaseBizImpl implements IContentBiz {
} }
return contentDao.getSearchCount(null,null,whereMap, appId,categoryIds); 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);
}
} }

View File

@ -7,6 +7,7 @@ import freemarker.core.ParseException;
import freemarker.template.MalformedTemplateNameException; import freemarker.template.MalformedTemplateNameException;
import freemarker.template.TemplateNotFoundException; import freemarker.template.TemplateNotFoundException;
import net.mingsoft.base.constant.Const; import net.mingsoft.base.constant.Const;
import net.mingsoft.basic.holder.DataHolder;
import net.mingsoft.basic.util.BasicUtil; import net.mingsoft.basic.util.BasicUtil;
import net.mingsoft.basic.util.SpringUtil; import net.mingsoft.basic.util.SpringUtil;
import net.mingsoft.cms.bean.CategoryBean; import net.mingsoft.cms.bean.CategoryBean;
@ -244,10 +245,12 @@ public class CmsParserUtil extends ParserUtil {
HashMap<Object, Object> cloneMap = CollUtil.newHashMap(); HashMap<Object, Object> cloneMap = CollUtil.newHashMap();
cloneMap.putAll(parserParams); cloneMap.putAll(parserParams);
HttpServletRequest request = SpringUtil.getRequest(); HttpServletRequest request = SpringUtil.getRequest();
Integer appId = (Integer) DataHolder.get("appId");
pool.execute(() -> { pool.execute(() -> {
String content = null; String content = null;
try { try {
SpringUtil.setRequest(request); SpringUtil.setRequest(request);
DataHolder.set("appId", appId);
content = CmsParserUtil.generate(columnUrl, cloneMap); content = CmsParserUtil.generate(columnUrl, cloneMap);
FileUtil.writeString(content, finalWritePath, Const.UTF8); FileUtil.writeString(content, finalWritePath, Const.UTF8);
} catch (IOException e) { } catch (IOException e) {