|
|
|
|
@ -7,6 +7,7 @@ import freemarker.core.ParseException; |
|
|
|
|
import freemarker.template.MalformedTemplateNameException; |
|
|
|
|
import freemarker.template.TemplateNotFoundException; |
|
|
|
|
import net.mingsoft.base.constant.Const; |
|
|
|
|
import net.mingsoft.basic.holder.DataHolder; |
|
|
|
|
import net.mingsoft.basic.util.BasicUtil; |
|
|
|
|
import net.mingsoft.basic.util.SpringUtil; |
|
|
|
|
import net.mingsoft.cms.bean.CategoryBean; |
|
|
|
|
@ -31,7 +32,7 @@ import java.util.concurrent.ExecutorService; |
|
|
|
|
/** |
|
|
|
|
* 文章解析工具类 |
|
|
|
|
*/ |
|
|
|
|
public class CmsParserUtil extends ParserUtil { |
|
|
|
|
public class CmsParserUtil { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private final static String FIELD = "field"; |
|
|
|
|
@ -45,12 +46,24 @@ public class CmsParserUtil extends ParserUtil { |
|
|
|
|
*/ |
|
|
|
|
public static void generate(String templatePath, String targetPath, String htmlDir) throws IOException { |
|
|
|
|
Map<String, Object> map = new HashMap<String, Object>(); |
|
|
|
|
map.put(IS_DO, false); |
|
|
|
|
map.put(ParserUtil.IS_DO, false); |
|
|
|
|
CategoryEntity column = new CategoryEntity(); |
|
|
|
|
//内容管理栏目编码
|
|
|
|
|
map.put(COLUMN, column); |
|
|
|
|
String content = CmsParserUtil.generate(templatePath, map, htmlDir); |
|
|
|
|
FileUtil.writeString(content, ParserUtil.buildHtmlPath(targetPath, htmlDir), Const.UTF8); |
|
|
|
|
map.put(ParserUtil.COLUMN, column); |
|
|
|
|
map.put(ParserUtil.HTML, htmlDir); |
|
|
|
|
|
|
|
|
|
//站点编号
|
|
|
|
|
if (BasicUtil.getWebsiteApp() != null) { |
|
|
|
|
map.put(ParserUtil.APP_DIR, BasicUtil.getWebsiteApp().getAppDir()); |
|
|
|
|
map.put(ParserUtil.URL, BasicUtil.getWebsiteApp().getAppHostUrl()); |
|
|
|
|
map.put(ParserUtil.APP_ID, BasicUtil.getWebsiteApp().getAppId()); |
|
|
|
|
} else { |
|
|
|
|
map.put(ParserUtil.URL, BasicUtil.getUrl()); |
|
|
|
|
map.put(ParserUtil.APP_DIR, BasicUtil.getApp().getAppDir()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
String content = ParserUtil.rendering(templatePath, map); |
|
|
|
|
FileUtil.writeString(content, ParserUtil.buildHtmlPath(targetPath, htmlDir, map.get(ParserUtil.APP_DIR).toString()), Const.UTF8); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
@ -76,15 +89,26 @@ public class CmsParserUtil extends ParserUtil { |
|
|
|
|
int totalPageSize = PageUtil.totalPage(articleIdTotal, page.getSize()); |
|
|
|
|
page.setTotal(totalPageSize); |
|
|
|
|
|
|
|
|
|
//获取模板中列表标签中的条件
|
|
|
|
|
Map<String, Object> map = new HashMap<>(); |
|
|
|
|
//全局参数设置
|
|
|
|
|
Map<String, Object> parserParams = new HashMap<String, Object>(); |
|
|
|
|
parserParams.put(ParserUtil.IS_DO, false); |
|
|
|
|
parserParams.put(ParserUtil.HTML, htmlDir); |
|
|
|
|
parserParams.put(ParserUtil.PAGE, page); |
|
|
|
|
|
|
|
|
|
//站点编号
|
|
|
|
|
if (BasicUtil.getWebsiteApp() != null) { |
|
|
|
|
map.put(ParserUtil.APP_DIR, BasicUtil.getWebsiteApp().getAppDir()); |
|
|
|
|
parserParams.put(ParserUtil.APP_DIR, BasicUtil.getWebsiteApp().getAppDir()); |
|
|
|
|
parserParams.put(ParserUtil.URL, BasicUtil.getWebsiteApp().getAppHostUrl()); |
|
|
|
|
parserParams.put(ParserUtil.APP_ID, BasicUtil.getWebsiteApp().getAppId()); |
|
|
|
|
} else { |
|
|
|
|
parserParams.put(ParserUtil.URL, BasicUtil.getUrl()); |
|
|
|
|
parserParams.put(ParserUtil.APP_DIR, BasicUtil.getApp().getAppDir()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
map.put(ParserUtil.HTML, htmlDir); |
|
|
|
|
map.put(ParserUtil.URL, BasicUtil.getUrl()); |
|
|
|
|
map.put(ParserUtil.PAGE, page); |
|
|
|
|
parserParams.put(ParserUtil.COLUMN, column); |
|
|
|
|
//标签中使用field获取当前栏目
|
|
|
|
|
parserParams.put(ParserUtil.FIELD, column); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
String columnListPath; |
|
|
|
|
ModelEntity contentModel = null; |
|
|
|
|
@ -94,31 +118,16 @@ public class CmsParserUtil extends ParserUtil { |
|
|
|
|
contentModel = (ModelEntity) SpringUtil.getBean(ModelBizImpl.class).getEntity(column.getMdiyModelId()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//全局参数设置
|
|
|
|
|
Map<String, Object> parserParams = new HashMap<String, Object>(); |
|
|
|
|
parserParams.put(ParserUtil.PAGE, page); |
|
|
|
|
parserParams.put(COLUMN, column); |
|
|
|
|
//标签中使用field获取当前栏目
|
|
|
|
|
parserParams.put(FIELD, column); |
|
|
|
|
parserParams.put(IS_DO, false); |
|
|
|
|
parserParams.put(HTML, htmlDir); |
|
|
|
|
if (BasicUtil.getWebsiteApp() != null) { |
|
|
|
|
parserParams.put(APP_DIR, BasicUtil.getWebsiteApp().getAppDir()); |
|
|
|
|
} |
|
|
|
|
if (contentModel != null) { |
|
|
|
|
// 将自定义模型编号设置为key值
|
|
|
|
|
parserParams.put(TABLE_NAME, contentModel.getModelTableName()); |
|
|
|
|
} |
|
|
|
|
//如果单站点,就废弃站点地址
|
|
|
|
|
if (ParserUtil.IS_SINGLE) { |
|
|
|
|
parserParams.put(ParserUtil.URL, BasicUtil.getUrl()); |
|
|
|
|
parserParams.put(ParserUtil.TABLE_NAME, contentModel.getModelTableName()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
int pageNo = 1; |
|
|
|
|
//文章列表页没有写文章列表标签,总数为0
|
|
|
|
|
if (totalPageSize <= 0) { |
|
|
|
|
// 数据库中第一页是从开始0*size
|
|
|
|
|
columnListPath = ParserUtil.buildHtmlPath(column.getCategoryPath() + File.separator + ParserUtil.INDEX, htmlDir); |
|
|
|
|
columnListPath = ParserUtil.buildHtmlPath(column.getCategoryPath() + File.separator + ParserUtil.INDEX, htmlDir, parserParams.get(ParserUtil.APP_DIR).toString()); |
|
|
|
|
// 设置分页的起始位置
|
|
|
|
|
page.setPageNo(pageNo); |
|
|
|
|
String read = ParserUtil.rendering(File.separator + column.getCategoryListUrl(), parserParams); |
|
|
|
|
@ -131,11 +140,11 @@ public class CmsParserUtil extends ParserUtil { |
|
|
|
|
// 数据库中第一页是从开始0*size
|
|
|
|
|
// 首页路径index.html
|
|
|
|
|
columnListPath = ParserUtil |
|
|
|
|
.buildHtmlPath(column.getCategoryPath() + File.separator + ParserUtil.INDEX, htmlDir); |
|
|
|
|
.buildHtmlPath(column.getCategoryPath() + File.separator + ParserUtil.INDEX, htmlDir, parserParams.get(ParserUtil.APP_DIR).toString()); |
|
|
|
|
} else { |
|
|
|
|
// 其他路径list-2.html
|
|
|
|
|
columnListPath = ParserUtil |
|
|
|
|
.buildHtmlPath(column.getCategoryPath() + File.separator + ParserUtil.PAGE_LIST + pageNo, htmlDir); |
|
|
|
|
.buildHtmlPath(column.getCategoryPath() + File.separator + ParserUtil.PAGE_LIST + pageNo, htmlDir, parserParams.get(ParserUtil.APP_DIR).toString()); |
|
|
|
|
} |
|
|
|
|
// 设置分页的起始位置
|
|
|
|
|
page.setPageNo(pageNo); |
|
|
|
|
@ -161,11 +170,24 @@ public class CmsParserUtil extends ParserUtil { |
|
|
|
|
*/ |
|
|
|
|
public static void generateBasic(List<CategoryBean> articleIdList, String htmlDir) { |
|
|
|
|
|
|
|
|
|
Map<String, Object> parserParams = new HashMap<String, Object>(); |
|
|
|
|
parserParams.put(ParserUtil.IS_DO, false); |
|
|
|
|
if (BasicUtil.getWebsiteApp() != null) { |
|
|
|
|
parserParams.put(ParserUtil.APP_DIR, BasicUtil.getWebsiteApp().getAppDir()); |
|
|
|
|
parserParams.put(ParserUtil.URL, BasicUtil.getWebsiteApp().getAppHostUrl()); |
|
|
|
|
parserParams.put(ParserUtil.APP_ID, BasicUtil.getWebsiteApp().getAppId()); |
|
|
|
|
} else { |
|
|
|
|
parserParams.put(ParserUtil.URL, BasicUtil.getUrl()); |
|
|
|
|
parserParams.put(ParserUtil.APP_DIR, BasicUtil.getApp().getAppDir()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
parserParams.put(ParserUtil.HTML, htmlDir); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Map<Object, Object> contentModelMap = new HashMap<Object, Object>(); |
|
|
|
|
ModelEntity contentModel = null; |
|
|
|
|
// 记录已经生成了文章编号
|
|
|
|
|
List<String> generateIds = new ArrayList<>(); |
|
|
|
|
ExecutorService pool = SpringUtil.getBean(ExecutorService.class); |
|
|
|
|
// 生成文章
|
|
|
|
|
for (int artId = 0; artId < articleIdList.size(); ) { |
|
|
|
|
|
|
|
|
|
@ -206,30 +228,32 @@ public class CmsParserUtil extends ParserUtil { |
|
|
|
|
generateIds.add(articleId); |
|
|
|
|
//如果是封面就生成index.html
|
|
|
|
|
if (categoryBean.getCategoryType().equals(CategoryTypeEnum.COVER.toString())) { |
|
|
|
|
writePath = ParserUtil.buildHtmlPath(articleColumnPath + File.separator + ParserUtil.INDEX, htmlDir); |
|
|
|
|
writePath = ParserUtil.buildHtmlPath(articleColumnPath + File.separator + ParserUtil.INDEX, htmlDir, parserParams.get(ParserUtil.APP_DIR).toString()); |
|
|
|
|
} else { |
|
|
|
|
// 组合文章路径如:html/站点id/栏目id/文章id.html
|
|
|
|
|
writePath = ParserUtil.buildHtmlPath(articleColumnPath + File.separator + articleId, htmlDir); |
|
|
|
|
writePath = ParserUtil.buildHtmlPath(articleColumnPath + File.separator + articleId, htmlDir, parserParams.get(ParserUtil.APP_DIR).toString()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
Map<String, Object> parserParams = new HashMap<String, Object>(); |
|
|
|
|
|
|
|
|
|
parserParams.put(ParserUtil.COLUMN, categoryBean); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 判断当前栏目是否有自定义模型
|
|
|
|
|
if (columnContentModelId != null) { |
|
|
|
|
// 通过当前栏目的模型编号获取,自定义模型表名
|
|
|
|
|
if (contentModelMap.containsKey(columnContentModelId)) { |
|
|
|
|
parserParams.put(TABLE_NAME, contentModel.getModelTableName()); |
|
|
|
|
parserParams.put(ParserUtil.TABLE_NAME, contentModel.getModelTableName()); |
|
|
|
|
} else { |
|
|
|
|
// 通过栏目模型编号获取自定义模型实体
|
|
|
|
|
contentModel = (ModelEntity) SpringUtil.getBean(IModelBiz.class) |
|
|
|
|
.getEntity(columnContentModelId); |
|
|
|
|
// 将自定义模型编号设置为key值
|
|
|
|
|
contentModelMap.put(columnContentModelId, contentModel.getModelTableName()); |
|
|
|
|
parserParams.put(TABLE_NAME, contentModel.getModelTableName()); |
|
|
|
|
parserParams.put(ParserUtil.TABLE_NAME, contentModel.getModelTableName()); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
parserParams.put(ID, articleId); |
|
|
|
|
parserParams.put(ParserUtil.ID, articleId); |
|
|
|
|
// 第一篇文章没有上一篇
|
|
|
|
|
if (artId > 0) { |
|
|
|
|
CategoryBean preCaBean = articleIdList.get(artId - 1); |
|
|
|
|
@ -247,22 +271,19 @@ public class CmsParserUtil extends ParserUtil { |
|
|
|
|
// }
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
parserParams.put(IS_DO, false); |
|
|
|
|
|
|
|
|
|
parserParams.put(ParserUtil.PAGE, page); |
|
|
|
|
String finalWritePath = writePath; |
|
|
|
|
HashMap<Object, Object> cloneMap = CollUtil.newHashMap(); |
|
|
|
|
cloneMap.putAll(parserParams); |
|
|
|
|
HttpServletRequest request = SpringUtil.getRequest(); |
|
|
|
|
pool.execute(() -> { |
|
|
|
|
String content = null; |
|
|
|
|
try { |
|
|
|
|
SpringUtil.setRequest(request); |
|
|
|
|
content = CmsParserUtil.generate(columnUrl, cloneMap, htmlDir); |
|
|
|
|
FileUtil.writeString(content, finalWritePath, Const.UTF8); |
|
|
|
|
} catch (IOException e) { |
|
|
|
|
e.printStackTrace(); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
String content = null; |
|
|
|
|
try { |
|
|
|
|
content = ParserUtil.rendering(columnUrl, cloneMap); |
|
|
|
|
FileUtil.writeString(content, finalWritePath, Const.UTF8); |
|
|
|
|
} catch (IOException e) { |
|
|
|
|
e.printStackTrace(); |
|
|
|
|
} |
|
|
|
|
artId++; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|