Pārlūkot izejas kodu

1、优化列表、封面枚举类型,原来是 1,2表示
2、优化搜索接口

guwd 5 gadi atpakaļ
vecāks
revīzija
096d6f2b1e

+ 0 - 23
pom.xml

@@ -39,29 +39,6 @@
 			<artifactId>ms-mpeople</artifactId>
 		</dependency>
 
-		<dependency>
-			<groupId>net.mingsoft</groupId>
-			<artifactId>ms-ad</artifactId>
-		</dependency>
-<!--		<dependency>-->
-<!--			<groupId>net.mingsoft</groupId>-->
-<!--			<artifactId>ms-clean</artifactId>-->
-<!--		</dependency>-->
-
-
-<!--		<dependency>-->
-<!--			<groupId>net.mingsoft</groupId>-->
-<!--			<artifactId>ms-quartz</artifactId>-->
-<!--		</dependency>-->
-
-
-		<!-- 此部分是铭飞平台MStroe的客户端(MStore不在铭飞开源产品范围),如果不需要使用MStore可以删除掉 -->
-		<dependency>
-			<groupId>net.mingsoft</groupId>
-			<artifactId>store-client</artifactId>
-			<version>5.2-SNAPSHOT</version>
-		</dependency>
-
 	</dependencies>
 
 	<build>

+ 4 - 4
src/main/java/net/mingsoft/cms/action/CategoryAction.java

@@ -163,7 +163,7 @@ public class CategoryAction extends BaseAction {
 		if(!StringUtil.checkLength(category.getCategoryPath()+"", 1, 100)){
 			return ResultData.build().error(getResString("err.length", this.getResString("category.path"), "1", "100"));
 		}
-		if(!StringUtil.checkLength(category.getCategoryParentId()+"", 1, 100)){
+		if(!StringUtil.checkLength(category.getCategoryParentIds()+"", 1, 100)){
 			return ResultData.build().error(getResString("err.length", this.getResString("category.parent.id"), "1", "100"));
 		}
 		//判断拼音是否重复
@@ -241,7 +241,7 @@ public class CategoryAction extends BaseAction {
 		if(!StringUtil.checkLength(category.getCategoryPath()+"", 0, 100)){
 			return ResultData.build().error(getResString("err.length", this.getResString("category.path"), "1", "100"));
 		}
-		if(!StringUtil.checkLength(category.getCategoryParentId()+"", 0, 100)){
+		if(!StringUtil.checkLength(category.getCategoryParentIds()+"", 0, 100)){
 			return ResultData.build().error(getResString("err.length", this.getResString("category.parent.id"), "1", "100"));
 		}
 		 //判断拼音是否重复并且是否和原拼音相同
@@ -268,7 +268,7 @@ public class CategoryAction extends BaseAction {
 		 }
 		//判断是否选择子级为所属栏目
 		 CategoryEntity _category = new CategoryEntity();
-		 _category.setCategoryParentId(category.getId());
+		 _category.setCategoryParentIds(category.getId());
 		 List<CategoryEntity> categoryList = categoryBiz.queryChilds(_category);
 		 for(CategoryEntity item:categoryList){
 			 if(item.getId().equals(category.getCategoryId())){
@@ -302,7 +302,7 @@ public class CategoryAction extends BaseAction {
 			return ResultData.build().error(getResString("err.error", this.getResString("id")));
 		}
 		category = categoryBiz.getById(category.getId());
-		category.setCategoryParentId(null);
+		category.setCategoryParentIds(null);
 		List<CategoryEntity> childs = categoryBiz.queryChilds(category);
 		//更新与父节点相同类型的子栏目的模板内容
 		for (int i =0; i < childs.size(); i++) {

+ 7 - 6
src/main/java/net/mingsoft/cms/action/GeneraterAction.java

@@ -36,6 +36,7 @@ import net.mingsoft.cms.bean.CategoryBean;
 import net.mingsoft.cms.bean.ContentBean;
 import net.mingsoft.cms.biz.ICategoryBiz;
 import net.mingsoft.cms.biz.IContentBiz;
+import net.mingsoft.cms.constant.e.CategoryTypeEnum;
 import net.mingsoft.cms.entity.CategoryEntity;
 import net.mingsoft.cms.util.CmsParserUtil;
 import net.mingsoft.mdiy.bean.PageBean;
@@ -178,9 +179,9 @@ public class GeneraterAction extends BaseAction {
 
             articleIdList = contentBiz.queryIdsByCategoryIdForParser(contentBean);
             // 判断列表类型
-            switch (column.getCategoryType()) {
+            switch (CategoryTypeEnum.get(column.getCategoryType())) {
                 //TODO 暂时先用字符串代替
-                case "1": // 列表
+                case LIST: // 列表
 
                     // 判断模板文件是否存在
                     if (!FileUtil.exist(ParserUtil.buildTempletPath(column.getCategoryListUrl()))) {
@@ -190,7 +191,7 @@ public class GeneraterAction extends BaseAction {
 
                     CmsParserUtil.generateList(column, articleIdList.size(),htmlDir);
                     break;
-                case "2":// 单页
+                case COVER:// 单页
                     if (articleIdList.size() == 0) {
                         CategoryBean columnArticleIdBean = new CategoryBean();
                         CopyOptions copyOptions = CopyOptions.create();
@@ -235,7 +236,7 @@ public class GeneraterAction extends BaseAction {
         // 生成所有栏目的文章
         if ("0".equals(columnId)) {
             categoryList = categoryBiz.list(Wrappers.<CategoryEntity>lambdaQuery()
-                    .isNull(CategoryEntity::getCategoryParentId));
+                    .isNull(CategoryEntity::getCategoryParentIds));
         } else {
             CategoryEntity category = (CategoryEntity) categoryBiz.getById(columnId);
             categoryList.add(category);
@@ -246,13 +247,13 @@ public class GeneraterAction extends BaseAction {
             //将文章列表标签中的中的参数
             articleIdList = contentBiz.queryIdsByCategoryIdForParser(contentBean);
             // 分类是列表
-            if (category.getCategoryType().equals("1")) {
+            if (category.getCategoryType().equals(CategoryTypeEnum.LIST.toString())) {
                 // 判断模板文件是否存在
                 if (!FileUtil.exist(ParserUtil.buildTempletPath(category.getCategoryListUrl())) || StringUtils.isEmpty(category.getCategoryListUrl())) {
                     LOG.error("模板不存在:{}", category.getCategoryUrl());
                     continue;
                 }
-            } else if (category.getCategoryType().equals("2")) {
+            } else if (category.getCategoryType().equals(CategoryTypeEnum.COVER.toString())) {
                 CategoryBean columnArticleIdBean = new CategoryBean();
                 CopyOptions copyOptions = CopyOptions.create();
                 copyOptions.setIgnoreError(true);

+ 35 - 10
src/main/java/net/mingsoft/cms/action/web/MCmsAction.java

@@ -21,8 +21,12 @@
 
 package net.mingsoft.cms.action.web;
 
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.lang.Editor;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.PageUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import freemarker.core.ParseException;
 import freemarker.template.MalformedTemplateNameException;
 import freemarker.template.TemplateException;
@@ -36,6 +40,7 @@ import net.mingsoft.cms.bean.CategoryBean;
 import net.mingsoft.cms.bean.ContentBean;
 import net.mingsoft.cms.biz.ICategoryBiz;
 import net.mingsoft.cms.biz.IContentBiz;
+import net.mingsoft.cms.constant.e.CategoryTypeEnum;
 import net.mingsoft.cms.entity.CategoryEntity;
 import net.mingsoft.cms.entity.ContentEntity;
 import net.mingsoft.cms.util.CmsParserUtil;
@@ -45,6 +50,7 @@ import net.mingsoft.mdiy.biz.IPageBiz;
 import net.mingsoft.mdiy.entity.ModelEntity;
 import net.mingsoft.mdiy.util.ParserUtil;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.shiro.util.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Controller;
@@ -126,7 +132,7 @@ public class MCmsAction extends net.mingsoft.cms.action.BaseAction {
         String content = "";
         try {
             //根据模板路径,参数生成
-            content = CmsParserUtil.generate(ParserUtil.INDEX + ParserUtil.HTM_SUFFIX, map,htmlDir);
+            content = CmsParserUtil.generate(ParserUtil.INDEX + ParserUtil.HTM_SUFFIX, map, htmlDir);
         } catch (TemplateNotFoundException e) {
             e.printStackTrace();
         } catch (MalformedTemplateNameException e) {
@@ -184,7 +190,7 @@ public class MCmsAction extends net.mingsoft.cms.action.BaseAction {
         String content = "";
         try {
             //根据模板路径,参数生成
-            content = CmsParserUtil.generate(columnArticles.get(0).getCategoryListUrl(),map,htmlDir);
+            content = CmsParserUtil.generate(columnArticles.get(0).getCategoryListUrl(), map, htmlDir);
         } catch (TemplateNotFoundException e) {
             e.printStackTrace();
         } catch (MalformedTemplateNameException e) {
@@ -252,8 +258,8 @@ public class MCmsAction extends net.mingsoft.cms.action.BaseAction {
             }
             // 文章的栏目路径
             String categoryParentId = articleIdList.get(artId).getId();
-            if (StringUtils.isNotBlank(articleIdList.get(artId).getCategoryParentId())) {
-                categoryParentId += ',' + articleIdList.get(artId).getCategoryParentId();
+            if (StringUtils.isNotBlank(articleIdList.get(artId).getCategoryParentIds())) {
+                categoryParentId += ',' + articleIdList.get(artId).getCategoryParentIds();
             }
             // 文章的栏目模型编号
             Integer columnContentModelId = articleIdList.get(artId).getMdiyModelId();
@@ -286,7 +292,7 @@ public class MCmsAction extends net.mingsoft.cms.action.BaseAction {
         }
         try {
             //根据模板路径,参数生成
-            content = CmsParserUtil.generate(column.getCategoryUrl(), map,htmlDir);
+            content = CmsParserUtil.generate(column.getCategoryUrl(), map, htmlDir);
         } catch (TemplateNotFoundException e) {
             e.printStackTrace();
         } catch (MalformedTemplateNameException e) {
@@ -311,7 +317,7 @@ public class MCmsAction extends net.mingsoft.cms.action.BaseAction {
     public String search(HttpServletRequest request, HttpServletResponse response) {
         //设置分页类
         PageBean page = new PageBean();
-        page.setSize(ParserUtil.getPageSize(SEARCH + ParserUtil.HTM_SUFFIX,20));
+        page.setSize(ParserUtil.getPageSize(SEARCH + ParserUtil.HTM_SUFFIX, 20));
 
         //参数集合,提供给解析使用
         Map<String, Object> params = new HashMap<>();
@@ -336,15 +342,33 @@ public class MCmsAction extends net.mingsoft.cms.action.BaseAction {
         //获取栏目信息
         int typeId = 0;
         String categoryIds = BasicUtil.getString("categoryIds");
+        List categoryIdList = CollectionUtil.newArrayList();
         //当传递了栏目编号,但不是栏目集合
         if (StringUtils.isNotBlank(categoryIds) && !categoryIds.contains(",")) {
             typeId = Integer.parseInt(categoryIds);
+        } else {
+            //取出所有的子栏目
+            String[] ids = categoryIds.split(",");
+            List<CategoryEntity> categoryList = categoryBiz.list(Wrappers.<CategoryEntity>lambdaQuery().ne(CategoryEntity::getCategoryType, CategoryTypeEnum.LINK.toString()));
+
+            categoryIdList = CollectionUtil.newArrayList(ids);
+            for(CategoryEntity c:categoryList) {
+                if(StringUtils.isNotEmpty(c.getParentids())) {
+                    for(String id:ids) {
+                        if(c.getParentids().indexOf(id)>-1) {
+                            categoryIdList.add(c.getId());
+                            break;
+                        }
+                    }
+                }
+            }
         }
 
+        //重新组织 ID
+        categoryIds = StringUtils.join(categoryIdList, ",");
         //当前访问的项目地址
         String url = BasicUtil.getUrl();
 
-
         //根据栏目确定自定义模型
         if (typeId > 0) {
             column = (CategoryEntity) categoryBiz.getEntity(typeId);
@@ -413,6 +437,7 @@ public class MCmsAction extends net.mingsoft.cms.action.BaseAction {
 
 
         Map<String, Object> searchMap = field;
+        searchMap.put("categoryIds",categoryIds);
         StringBuilder urlParams = new StringBuilder();
 
         searchMap.forEach((k, v) -> {
@@ -488,7 +513,7 @@ public class MCmsAction extends net.mingsoft.cms.action.BaseAction {
         String content = "";
         try {
             //根据模板路径,参数生成
-            content = CmsParserUtil.generate(SEARCH + ParserUtil.HTM_SUFFIX, params,htmlDir);
+            content = CmsParserUtil.generate(SEARCH + ParserUtil.HTM_SUFFIX, params, htmlDir);
         } catch (TemplateNotFoundException e) {
             e.printStackTrace();
         } catch (MalformedTemplateNameException e) {
@@ -549,8 +574,8 @@ public class MCmsAction extends net.mingsoft.cms.action.BaseAction {
 
     public static void main(String[] args) {
 
-        int []  a= PageUtil.rainbow(20,30,5);
-        for(int _a:a) {
+        int[] a = PageUtil.rainbow(20, 30, 5);
+        for (int _a : a) {
             System.out.println(_a);
         }
 

+ 9 - 9
src/main/java/net/mingsoft/cms/biz/impl/CategoryBizImpl.java

@@ -117,13 +117,13 @@ public class CategoryBizImpl extends BaseBizImpl<ICategoryDao, CategoryEntity> i
 		if(StringUtils.isNotEmpty(categoryEntity.getCategoryId())&&Long.parseLong(categoryEntity.getCategoryId())>0) {
 			CategoryEntity category = (CategoryEntity)getById(categoryEntity.getCategoryId());
 			path = category.getCategoryPath();
-			if(StringUtils.isEmpty(category.getCategoryParentId())) {
-				categoryEntity.setCategoryParentId(category.getId());
+			if(StringUtils.isEmpty(category.getCategoryParentIds())) {
+				categoryEntity.setCategoryParentIds(category.getId());
 			} else {
-				categoryEntity.setCategoryParentId(category.getCategoryParentId()+","+category.getId());
+				categoryEntity.setCategoryParentIds(category.getCategoryParentIds()+","+category.getId());
 			}
 		}else {
-			categoryEntity.setCategoryParentId(null);
+			categoryEntity.setCategoryParentIds(null);
 		}
 		//保存时先保存再修改链接地址,修改时直接修改
 		if(StringUtils.isNotBlank(categoryEntity.getId())) {
@@ -136,10 +136,10 @@ public class CategoryBizImpl extends BaseBizImpl<ICategoryDao, CategoryEntity> i
 		category.setCategoryId(categoryEntity.getId());
 		List<CategoryEntity> list = categoryDao.query(category);
 		list.forEach(x->{
-			if(StringUtils.isEmpty(categoryEntity.getCategoryParentId())) {
-				x.setCategoryParentId(categoryEntity.getId());
+			if(StringUtils.isEmpty(categoryEntity.getCategoryParentIds())) {
+				x.setCategoryParentIds(categoryEntity.getId());
 			} else {
-				x.setCategoryParentId(categoryEntity.getCategoryParentId()+","+categoryEntity.getId());
+				x.setCategoryParentIds(categoryEntity.getCategoryParentIds()+","+categoryEntity.getId());
 			}
 			String path=categoryEntity.getCategoryPath();
 			//判断是否有parentIds
@@ -181,7 +181,7 @@ public class CategoryBizImpl extends BaseBizImpl<ICategoryDao, CategoryEntity> i
 		CategoryEntity category = (CategoryEntity) categoryDao.selectById(categoryId);
 		//删除父类
 		if(category != null){
-			category.setCategoryParentId(null);
+			category.setCategoryParentIds(null);
 			List<CategoryEntity> childrenList = categoryDao.queryChildren(category);
 			List<String> ids = new ArrayList<>();
 			for(int i = 0; i < childrenList.size(); i++){
@@ -233,7 +233,7 @@ public class CategoryBizImpl extends BaseBizImpl<ICategoryDao, CategoryEntity> i
 	 * @param entity
 	 */
 	private void setTopId(CategoryEntity entity){
-		String categoryParentId = entity.getCategoryParentId();
+		String categoryParentId = entity.getCategoryParentIds();
 		if(StrUtil.isNotBlank(categoryParentId)){
 			String[] ids = categoryParentId.split(",");
 			//如果有ParentId就取第一个

+ 6 - 5
src/main/java/net/mingsoft/cms/biz/impl/ContentBizImpl.java

@@ -30,6 +30,7 @@ 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.constant.e.CategoryTypeEnum;
 import net.mingsoft.cms.dao.ICategoryDao;
 import net.mingsoft.cms.entity.CategoryEntity;
 import net.mingsoft.cms.entity.ContentEntity;
@@ -141,7 +142,7 @@ public class ContentBizImpl  extends BaseBizImpl<IContentDao, ContentEntity> imp
 		for(CategoryEntity category : categoryList){
 			contentBean.setCategoryId(category.getId());
 			// 分类是列表
-			if(category.getCategoryType().equals("1")){
+			if(category.getCategoryType().equals(CategoryTypeEnum.LIST.toString())){
 				// 判断模板文件是否存在
 				if (!FileUtil.exist(ParserUtil.buildTempletPath(category.getCategoryListUrl())) || StringUtils.isEmpty(category.getCategoryListUrl())) {
 					LOG.error("模板不存在:{}",category.getCategoryUrl());
@@ -172,7 +173,7 @@ public class ContentBizImpl  extends BaseBizImpl<IContentDao, ContentEntity> imp
 			ContentBean contentBean = new ContentBean();
 			contentBean.setCategoryId(column.getId());
 			// 分类是列表
-			if(column.getCategoryType().equals("1")) {
+			if(column.getCategoryType().equals(CategoryTypeEnum.LIST.toString())) {
 				// 判断模板文件是否存在
 				if (!FileUtil.exist(ParserUtil.buildTempletPath(column.getCategoryListUrl()))) {
 					LOG.error("模板不存在:{}", column.getCategoryUrl());
@@ -191,12 +192,12 @@ public class ContentBizImpl  extends BaseBizImpl<IContentDao, ContentEntity> imp
 			}
 			articleIdList = contentDao.queryIdsByCategoryIdForParser(contentBean);
 			// 判断列表类型
-			switch (column.getCategoryType()) {
+			switch (CategoryTypeEnum.get(column.getCategoryType())) {
 				//TODO 暂时先用字符串代替
-				case "1": // 列表
+				case LIST: // 列表
 					CmsParserUtil.generateList(column, articleIdList.size(),htmlDir);
 					break;
-				case "2":// 单页
+				case COVER:// 单页
 					if(articleIdList.size()==0){
 						CategoryBean columnArticleIdBean=new CategoryBean();
 						CopyOptions copyOptions=CopyOptions.create();

+ 70 - 0
src/main/java/net/mingsoft/cms/constant/e/CategoryTypeEnum.java

@@ -0,0 +1,70 @@
+/**
+ * The MIT License (MIT) * Copyright (c) 2020 铭软科技(mingsoft.net)
+
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of
+ * this software and associated documentation files (the "Software"), to deal in
+ * the Software without restriction, including without limitation the rights to
+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+ * the Software, and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+ * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+package net.mingsoft.cms.constant.e;
+
+import net.mingsoft.base.constant.e.BaseEnum;
+
+/**
+ * @Author: 铭飞团队
+ * @Description:
+ * @Date: Create in 2020/06/23 14:18
+ */
+public enum CategoryTypeEnum implements BaseEnum {
+
+    /**
+     * 列表
+     */
+    LIST("1"),
+    /**
+     * 封面
+     */
+    COVER("2"),
+    /**
+     * 链接
+     */
+    LINK("3");
+
+
+    CategoryTypeEnum(String type) {
+        this.type = type;
+    }
+
+    private String type;
+
+    public static CategoryTypeEnum get(String type) {
+        for (CategoryTypeEnum e : CategoryTypeEnum.values()) {
+            if (e.type.equals(type)) {
+                return e;
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public int toInt() {
+        return Integer.parseInt(type);
+    }
+
+    @Override
+    public String toString() {
+        return type;
+    }
+}

+ 9 - 9
src/main/java/net/mingsoft/cms/dao/ICategoryDao.xml

@@ -20,7 +20,7 @@
 				<result column="dict_id" property="dictId" /><!--字典对应编号 -->
 				<result column="category_flag" property="categoryFlag" /><!--栏目属性 -->
 				<result column="category_path" property="categoryPath" /><!--栏目路径 -->
-				<result column="category_parent_id" property="categoryParentId" /><!--父类型编号 -->
+				<result column="category_parent_ids" property="categoryParentIds" /><!--父类型编号 -->
 				<result column="create_by" property="createBy" /><!--创建人 -->
 				<result column="create_date" property="createDate" /><!--创建时间 -->
 				<result column="update_by" property="updateBy" /><!--修改人 -->
@@ -49,7 +49,7 @@
 				<if test="dictId != null">dict_id,</if>
 				<if test="categoryFlag != null">category_flag,</if>
 				<if test="categoryPath != null and categoryPath != ''">category_path,</if>
-				<if test="categoryParentId != null and categoryParentId != ''">category_parent_id,</if>
+				<if test="categoryParentIds != null and categoryParentIds != ''">category_parent_ids,</if>
 				<if test="createBy &gt; 0">create_by,</if>
 				<if test="createDate != null">create_date,</if>
 				<if test="updateBy &gt; 0">update_by,</if>
@@ -89,7 +89,7 @@
 				<if test="categoryTitle != null and categoryTitle != ''">category_title=#{categoryTitle},</if>
 				<if test="categoryPinyin != null and categoryPinyin != ''">category_pinyin=#{categoryPinyin},</if>
 				category_id=#{categoryId},
-				category_parent_id=#{categoryParentId},
+				category_parent_ids=#{categoryParentIds},
 				<if test="categoryType != null and categoryType != ''">category_type=#{categoryType},</if>
 				<if test="categorySort != null">category_sort=#{categorySort},</if>
 				<if test="categoryListUrl != null and categoryListUrl != ''">category_list_url=#{categoryListUrl},</if>
@@ -137,7 +137,7 @@
 				<if test="dictId != null"> and dict_id=#{dictId} </if>
 				<if test="categoryFlag != null and categoryFlag != ''">and category_flag=#{categoryFlag}</if>
 				<if test="categoryPath != null and categoryPath != ''">and category_path=#{categoryPath}</if>
-				<if test="categoryParentId != null and categoryParentId != ''">and category_parent_id=#{categoryParentId}</if>
+				<if test="categoryParentIds != null and categoryParentIds != ''">and category_parent_ids=#{categoryParentIds}</if>
 				<if test="createBy &gt; 0"> and create_by=#{createBy} </if>
 				<if test="createDate != null"> and create_date=#{createDate} </if>
 				<if test="updateBy &gt; 0"> and update_by=#{updateBy} </if>
@@ -157,11 +157,11 @@
 			</if>
 			and
 			(
-			<if test="categoryParentId != null and categoryParentId!=''">
-				find_in_set(#{categoryParentId},CATEGORY_PARENT_ID)
+			<if test="categoryParentIds != null and categoryParentIds!=''">
+				find_in_set(#{categoryParentIds},CATEGORY_PARENT_IDS)
 			</if>
-			<if test="categoryParentId == null or  categoryParentId ==''">
-				find_in_set('${id}',CATEGORY_PARENT_ID)
+			<if test="categoryParentIds == null or  categoryParentIds ==''">
+				find_in_set('${id}',CATEGORY_PARENT_IDS)
 			</if>
 			<if test="id != null">
 				or id=#{id}
@@ -209,7 +209,7 @@
 			<if test="dictId != null"> and dict_id=#{dictId} </if>
 			<if test="categoryFlag != null and categoryFlag != ''"> and category_flag=#{categoryFlag}</if>
 			<if test="categoryPath != null and categoryPath != ''"> and category_path=#{categoryPath}</if>
-			<if test="categoryParentId != null and categoryParentId != ''"> and  find_in_set(#{categoryParentId},category_parent_id)</if>
+			<if test="categoryParentIds != null and categoryParentIds != ''"> and  find_in_set(#{categoryParentIds},category_parent_ids)</if>
 			<if test="createBy &gt; 0"> and create_by=#{createBy} </if>
 			<if test="createDate != null"> and create_date=#{createDate} </if>
 			<if test="updateBy &gt; 0"> and update_by=#{updateBy} </if>

+ 3 - 3
src/main/java/net/mingsoft/cms/dao/IContentDao.xml

@@ -67,7 +67,7 @@
 		<result column="dict_id" property="dictId" /><!--字典对应编号 -->
 		<result column="category_flag" property="categoryFlag" /><!--栏目属性 -->
 		<result column="category_path" property="categoryPath" /><!--栏目路径 -->
-		<result column="category_parent_id" property="categoryParentId" /><!--父类型编号 -->
+		<result column="category_parent_ids" property="categoryParentIds" /><!--父类型编号 -->
 		<result column="create_by" property="createBy" /><!--创建人 -->
 		<result column="create_date" property="createDate" /><!--创建时间 -->
 		<result column="update_by" property="updateBy" /><!--修改人 -->
@@ -219,7 +219,7 @@
 			ct.del=0
 			<if test="contentTitle != null and contentTitle != ''"> and  content_title like CONCAT('%',#{contentTitle},'%')</if>
 			<if test="categoryId != null and categoryId != ''"> 	and (ct.category_id=#{categoryId} or ct.category_id in
-				(select id FROM cms_category where find_in_set('${categoryId}',CATEGORY_PARENT_ID)))</if>
+				(select id FROM cms_category where find_in_set('${categoryId}',CATEGORY_PARENT_IDS)))</if>
 			<if test="contentType != null and contentType != ''"> and content_type LIKE CONCAT('%',#{contentType},'%')</if>
 			<if test="contentDisplay != null and contentDisplay != ''"> and content_display=#{contentDisplay}</if>
 			<if test="contentAuthor != null and contentAuthor != ''"> and content_author=#{contentAuthor}</if>
@@ -251,7 +251,7 @@
 			<!-- 查询子栏目数据 -->
 			<if test="categoryId &gt; 0">
 				and (ct.category_id=#{categoryId} or ct.category_id in
-				(select id FROM cms_category where find_in_set('${categoryId}',CATEGORY_PARENT_ID)))
+				(select id FROM cms_category where find_in_set('${categoryId}',CATEGORY_PARENT_IDS)))
 			</if>
 			<if test="beginTime!=null and beginTime!=''">
 				and content_datetime &gt;= #{beginTime}

+ 396 - 376
src/main/java/net/mingsoft/cms/entity/CategoryEntity.java

@@ -14,383 +14,403 @@ import org.springframework.format.annotation.DateTimeFormat;
 import java.util.Date;
 
 /**
-* 分类实体
-* @author 铭飞开发团队
-* 创建日期:2019-11-28 15:12:32<br/>
-* 历史修订:<br/>
-*/
+ * 分类实体
+ *
+ * @author 铭飞开发团队
+ * 创建日期:2019-11-28 15:12:32<br/>
+ * 历史修订:<br/>
+ */
 @TableName("cms_category")
 public class CategoryEntity extends BaseEntity {
 
-private static final long serialVersionUID = 1574925152750L;
-
-	/**
-	* 栏目管理名称
-	*/
-	private String categoryTitle;
-	/**
-	* 栏目别名
-	*/
-	private String categoryPinyin;
-	/**
-	* 所属栏目
-	*/
-	@TableField(insertStrategy = FieldStrategy.NOT_EMPTY, updateStrategy = FieldStrategy.NOT_EMPTY, whereStrategy = FieldStrategy.NOT_EMPTY)
-	private String categoryId;
-	/**
-	* 栏目管理属性
-	*/
-	private String categoryType;
-	/**
-	* 自定义顺序
-	*/
-	private Integer categorySort;
-	/**
-	* 列表模板
-	*/
-	private String categoryListUrl;
-	/**
-	* 内容模板
-	*/
-	private String categoryUrl;
-	/**
-	* 栏目管理关键字
-	*/
-	private String categoryKeyword;
-	/**
-	* 栏目管理描述
-	*/
-	private String categoryDescrip;
-	/**
-	* 缩略图
-	*/
-	private String categoryImg;
-	/**
-	* 自定义链接
-	*/
-	private String categoryDiyUrl;
-	/**
-	* 栏目管理的内容模型id
-	*/
-	private Integer mdiyModelId;
-	/**
-	* 类别发布时间
-	*/
-	@JSONField(format = "yyyy-MM-dd HH:mm:ss")
-	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
-	private Date categoryDatetime;
-
-	/**
-	* 字典对应编号
-	*/
-	private Integer dictId;
-	/**
-	* 栏目属性
-	*/
-	private String categoryFlag;
-	/**
-	* 栏目路径
-	*/
-	private String categoryPath;
-	/**
-	* 父类型编号
-	*/
-	private String categoryParentId;
-
-	/**
-	 * 叶子节点
-	 */
-	private Boolean leaf;
-
-	/**
-	 * 顶级id
-	 */
-	private String topId;
-
-	public Boolean getLeaf() {
-		return leaf;
-	}
-
-	public void setLeaf(Boolean leaf) {
-		this.leaf = leaf;
-	}
-
-	public String getTopId() {
-		return topId;
-	}
-
-	public void setTopId(String topId) {
-		this.topId = topId;
-	}
-
-	/**
-	* 设置栏目管理名称
-	*/
-	public void setCategoryTitle(String categoryTitle) {
-	this.categoryTitle = categoryTitle;
-	}
-
-	/**
-	* 获取栏目管理名称
-	*/
-	public String getCategoryTitle() {
-	return this.categoryTitle;
-	}
-	/**
-	* 设置所属栏目
-	*/
-	public void setCategoryId(String categoryId) {
-	this.categoryId = categoryId;
-	}
-
-	public String getCategoryPinyin() {
-		return categoryPinyin;
-	}
-
-	public void setCategoryPinyin(String categoryPinyin) {
-		this.categoryPinyin = categoryPinyin;
-	}
-
-	/**
-	* 获取所属栏目
-	*/
-	public String getCategoryId() {
-	return this.categoryId;
-	}
-	/**
-	* 设置栏目管理属性
-	*/
-	public void setCategoryType(String categoryType) {
-	this.categoryType = categoryType;
-	}
-
-	/**
-	* 获取栏目管理属性
-	*/
-	public String getCategoryType() {
-	return this.categoryType;
-	}
-	/**
-	* 设置自定义顺序
-	*/
-	public void setCategorySort(Integer categorySort) {
-	this.categorySort = categorySort;
-	}
-
-	/**
-	* 获取自定义顺序
-	*/
-	public Integer getCategorySort() {
-	return this.categorySort;
-	}
-	/**
-	* 设置列表模板
-	*/
-	public void setCategoryListUrl(String categoryListUrl) {
-	this.categoryListUrl = categoryListUrl;
-	}
-
-	/**
-	* 获取列表模板
-	*/
-	public String getCategoryListUrl() {
-	return this.categoryListUrl;
-	}
-	/**
-	* 设置内容模板
-	*/
-	public void setCategoryUrl(String categoryUrl) {
-	this.categoryUrl = categoryUrl;
-	}
-
-	/**
-	* 获取内容模板
-	*/
-	public String getCategoryUrl() {
-	return this.categoryUrl;
-	}
-	/**
-	* 设置栏目管理关键字
-	*/
-	public void setCategoryKeyword(String categoryKeyword) {
-	this.categoryKeyword = categoryKeyword;
-	}
-
-	/**
-	* 获取栏目管理关键字
-	*/
-	public String getCategoryKeyword() {
-	return this.categoryKeyword;
-	}
-	/**
-	* 设置栏目管理描述
-	*/
-	public void setCategoryDescrip(String categoryDescrip) {
-	this.categoryDescrip = categoryDescrip;
-	}
-
-	/**
-	* 获取栏目管理描述
-	*/
-	public String getCategoryDescrip() {
-	return this.categoryDescrip;
-	}
-	/**
-	* 设置缩略图
-	*/
-	public void setCategoryImg(String categoryImg) {
-	this.categoryImg = categoryImg;
-	}
-
-	/**
-	* 获取缩略图
-	*/
-	public String getCategoryImg() {
-	return this.categoryImg;
-	}
-	/**
-	* 设置自定义链接
-	*/
-	public void setCategoryDiyUrl(String categoryDiyUrl) {
-	this.categoryDiyUrl = categoryDiyUrl;
-	}
-
-	/**
-	* 获取自定义链接
-	*/
-	public String getCategoryDiyUrl() {
-	return this.categoryDiyUrl;
-	}
-
-	public Integer getMdiyModelId() {
-		return mdiyModelId;
-	}
-
-	public void setMdiyModelId(Integer mdiyModelId) {
-		this.mdiyModelId = mdiyModelId;
-	}
-
-	/**
-	* 设置类别发布时间
-	*/
-	public void setCategoryDatetime(Date categoryDatetime) {
-	this.categoryDatetime = categoryDatetime;
-	}
-
-	/**
-	* 获取类别发布时间
-	*/
-	public Date getCategoryDatetime() {
-	return this.categoryDatetime;
-	}
-
-	/**
-	* 设置字典对应编号
-	*/
-	public void setDictId(Integer dictId) {
-	this.dictId = dictId;
-	}
-
-	/**
-	* 获取字典对应编号
-	*/
-	public Integer getDictId() {
-	return this.dictId;
-	}
-	/**
-	* 设置栏目属性
-	*/
-	public void setCategoryFlag(String categoryFlag) {
-	this.categoryFlag = categoryFlag;
-	}
-
-	/**
-	* 获取栏目属性
-	*/
-	public String getCategoryFlag() {
-	return this.categoryFlag;
-	}
-	/**
-	* 设置栏目路径
-	*/
-	public void setCategoryPath(String categoryPath) {
-	this.categoryPath = categoryPath;
-	}
-
-	/**
-	* 获取栏目路径
-	*/
-	public String getCategoryPath() {
-	return this.categoryPath;
-	}
-	/**
-	* 设置父类型编号
-	*/
-	public void setCategoryParentId(String categoryParentId) {
-	this.categoryParentId = categoryParentId;
-	}
-
-	/**
-	* 获取父类型编号
-	*/
-	public String getCategoryParentId() {
-	return this.categoryParentId;
-	}
-
-	/**
-	 * 获取栏目标题 (标签使用)
-	 */
-	public String getTypetitle() {
-		return this.categoryTitle;
-	}
-	/**
-	 * 获取栏目链接 (标签使用,动态链接不考虑)
-	 */
-	public String getTypelink() {
-		return "3".equals(this.categoryType)?this.categoryDiyUrl:this.categoryPath+"/index.html";
-	}
-	/**
-	 * 获取栏目关键字 (标签使用)
-	 */
-	public String getTypekeyword() {
-		return this.categoryKeyword;
-	}
-
-	/**
-	 * 获取栏目url (标签使用)
-	 */
-	public String getTypeurl() {
-		return this.categoryDiyUrl;
-	}
-	/**
-	 * 获取栏目属性 (标签使用)
-	 */
-	public String getFlag() {
-		return this.categoryFlag;
-	}
-	/**
-	 * 获取栏目父级Id (标签使用)
-	 */
-	public String getParentid() {
-		return this.categoryParentId;
-	}
-	/**
-	 * 获取栏目描述(标签使用)
-	 */
-	public String getTypedescrip() {
-		return this.categoryDescrip;
-	}
-	/**
-	 * 获取栏目Id(标签使用)
-	 */
-	public String getTypeid() {
-		return this.id;
-	}
-	/**
-	 * 获取栏目图片 (标签使用)
-	 */
-	public String getTypelitpic() {
-		return categoryImg;
-	}
+    private static final long serialVersionUID = 1574925152750L;
+
+    /**
+     * 栏目管理名称
+     */
+    private String categoryTitle;
+    /**
+     * 栏目别名
+     */
+    private String categoryPinyin;
+    /**
+     * 所属栏目
+     */
+    @TableField(insertStrategy = FieldStrategy.NOT_EMPTY, updateStrategy = FieldStrategy.NOT_EMPTY, whereStrategy = FieldStrategy.NOT_EMPTY)
+    private String categoryId;
+    /**
+     * 栏目管理属性
+     */
+    private String categoryType;
+    /**
+     * 自定义顺序
+     */
+    private Integer categorySort;
+    /**
+     * 列表模板
+     */
+    private String categoryListUrl;
+    /**
+     * 内容模板
+     */
+    private String categoryUrl;
+    /**
+     * 栏目管理关键字
+     */
+    private String categoryKeyword;
+    /**
+     * 栏目管理描述
+     */
+    private String categoryDescrip;
+    /**
+     * 缩略图
+     */
+    private String categoryImg;
+    /**
+     * 自定义链接
+     */
+    private String categoryDiyUrl;
+    /**
+     * 栏目管理的内容模型id
+     */
+    private Integer mdiyModelId;
+    /**
+     * 类别发布时间
+     */
+    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date categoryDatetime;
+
+    /**
+     * 字典对应编号
+     */
+    private Integer dictId;
+    /**
+     * 栏目属性
+     */
+    private String categoryFlag;
+    /**
+     * 栏目路径
+     */
+    private String categoryPath;
+    /**
+     * 父类型编号
+     */
+    private String categoryParentIds;
+
+    /**
+     * 叶子节点
+     */
+    private Boolean leaf;
+
+    /**
+     * 顶级id
+     */
+    private String topId;
+
+    public Boolean getLeaf() {
+        return leaf;
+    }
+
+    public void setLeaf(Boolean leaf) {
+        this.leaf = leaf;
+    }
+
+    public String getTopId() {
+        return topId;
+    }
+
+    public void setTopId(String topId) {
+        this.topId = topId;
+    }
+
+    /**
+     * 设置栏目管理名称
+     */
+    public void setCategoryTitle(String categoryTitle) {
+        this.categoryTitle = categoryTitle;
+    }
+
+    /**
+     * 获取栏目管理名称
+     */
+    public String getCategoryTitle() {
+        return this.categoryTitle;
+    }
+
+    /**
+     * 设置所属栏目
+     */
+    public void setCategoryId(String categoryId) {
+        this.categoryId = categoryId;
+    }
+
+    public String getCategoryPinyin() {
+        return categoryPinyin;
+    }
+
+    public void setCategoryPinyin(String categoryPinyin) {
+        this.categoryPinyin = categoryPinyin;
+    }
+
+    /**
+     * 获取所属栏目
+     */
+    public String getCategoryId() {
+        return this.categoryId;
+    }
+
+    /**
+     * 设置栏目管理属性
+     */
+    public void setCategoryType(String categoryType) {
+        this.categoryType = categoryType;
+    }
+
+    /**
+     * 获取栏目管理属性
+     */
+    public String getCategoryType() {
+        return this.categoryType;
+    }
+
+    /**
+     * 设置自定义顺序
+     */
+    public void setCategorySort(Integer categorySort) {
+        this.categorySort = categorySort;
+    }
+
+    /**
+     * 获取自定义顺序
+     */
+    public Integer getCategorySort() {
+        return this.categorySort;
+    }
+
+    /**
+     * 设置列表模板
+     */
+    public void setCategoryListUrl(String categoryListUrl) {
+        this.categoryListUrl = categoryListUrl;
+    }
+
+    /**
+     * 获取列表模板
+     */
+    public String getCategoryListUrl() {
+        return this.categoryListUrl;
+    }
+
+    /**
+     * 设置内容模板
+     */
+    public void setCategoryUrl(String categoryUrl) {
+        this.categoryUrl = categoryUrl;
+    }
+
+    /**
+     * 获取内容模板
+     */
+    public String getCategoryUrl() {
+        return this.categoryUrl;
+    }
+
+    /**
+     * 设置栏目管理关键字
+     */
+    public void setCategoryKeyword(String categoryKeyword) {
+        this.categoryKeyword = categoryKeyword;
+    }
+
+    /**
+     * 获取栏目管理关键字
+     */
+    public String getCategoryKeyword() {
+        return this.categoryKeyword;
+    }
+
+    /**
+     * 设置栏目管理描述
+     */
+    public void setCategoryDescrip(String categoryDescrip) {
+        this.categoryDescrip = categoryDescrip;
+    }
+
+    /**
+     * 获取栏目管理描述
+     */
+    public String getCategoryDescrip() {
+        return this.categoryDescrip;
+    }
+
+    /**
+     * 设置缩略图
+     */
+    public void setCategoryImg(String categoryImg) {
+        this.categoryImg = categoryImg;
+    }
+
+    /**
+     * 获取缩略图
+     */
+    public String getCategoryImg() {
+        return this.categoryImg;
+    }
+
+    /**
+     * 设置自定义链接
+     */
+    public void setCategoryDiyUrl(String categoryDiyUrl) {
+        this.categoryDiyUrl = categoryDiyUrl;
+    }
+
+    /**
+     * 获取自定义链接
+     */
+    public String getCategoryDiyUrl() {
+        return this.categoryDiyUrl;
+    }
+
+    public Integer getMdiyModelId() {
+        return mdiyModelId;
+    }
+
+    public void setMdiyModelId(Integer mdiyModelId) {
+        this.mdiyModelId = mdiyModelId;
+    }
+
+    /**
+     * 设置类别发布时间
+     */
+    public void setCategoryDatetime(Date categoryDatetime) {
+        this.categoryDatetime = categoryDatetime;
+    }
+
+    /**
+     * 获取类别发布时间
+     */
+    public Date getCategoryDatetime() {
+        return this.categoryDatetime;
+    }
+
+    /**
+     * 设置字典对应编号
+     */
+    public void setDictId(Integer dictId) {
+        this.dictId = dictId;
+    }
+
+    /**
+     * 获取字典对应编号
+     */
+    public Integer getDictId() {
+        return this.dictId;
+    }
+
+    /**
+     * 设置栏目属性
+     */
+    public void setCategoryFlag(String categoryFlag) {
+        this.categoryFlag = categoryFlag;
+    }
+
+    /**
+     * 获取栏目属性
+     */
+    public String getCategoryFlag() {
+        return this.categoryFlag;
+    }
+
+    /**
+     * 设置栏目路径
+     */
+    public void setCategoryPath(String categoryPath) {
+        this.categoryPath = categoryPath;
+    }
+
+    /**
+     * 获取栏目路径
+     */
+    public String getCategoryPath() {
+        return this.categoryPath;
+    }
+
+    /**
+     * 设置父类型编号
+     */
+    public void setCategoryParentIds(String categoryParentIds) {
+        this.categoryParentIds = categoryParentIds;
+    }
+
+    /**
+     * 获取父类型编号
+     */
+    public String getCategoryParentIds() {
+        return this.categoryParentIds;
+    }
+
+    /**
+     * 获取栏目标题 (标签使用)
+     */
+    public String getTypetitle() {
+        return this.categoryTitle;
+    }
+
+    /**
+     * 获取栏目链接 (标签使用,动态链接不考虑)
+     */
+    public String getTypelink() {
+        return "3".equals(this.categoryType) ? this.categoryDiyUrl : this.categoryPath + "/index.html";
+    }
+
+    /**
+     * 获取栏目关键字 (标签使用)
+     */
+    public String getTypekeyword() {
+        return this.categoryKeyword;
+    }
+
+    /**
+     * 获取栏目url (标签使用)
+     */
+    public String getTypeurl() {
+        return this.categoryDiyUrl;
+    }
+
+    /**
+     * 获取栏目属性 (标签使用)
+     */
+    public String getFlag() {
+        return this.categoryFlag;
+    }
+
+    /**
+     * 获取栏目父级Id (标签使用)
+     */
+    public String getParentids() {
+        return this.categoryParentIds;
+    }
+
+    /**
+     * 获取栏目描述(标签使用)
+     */
+    public String getTypedescrip() {
+        return this.categoryDescrip;
+    }
+
+    /**
+     * 获取栏目Id(标签使用)
+     */
+    public String getTypeid() {
+        return this.id;
+    }
+
+    /**
+     * 获取栏目图片 (标签使用)
+     */
+    public String getTypelitpic() {
+        return categoryImg;
+    }
 }

+ 2 - 2
src/main/java/net/mingsoft/cms/upgrade/Upgrade.java

@@ -30,7 +30,7 @@ public class Upgrade {
 
             //将parentId第一行设为顶级节点
             String topId = "0";
-            String parentId = x.getParentid();
+            String parentId = x.getParentids();
             if (parentId != null) {
                 topId = parentId.split(",")[0];
             }
@@ -40,7 +40,7 @@ public class Upgrade {
             boolean leaf = true;
             //判断是否叶子,循环查找,如果有节点的父节点中包含该节点的id则判断为否跳出循环
             for (int i = 0; i< list.size(); i++) {
-                String pId = list.get(i).getParentid();
+                String pId = list.get(i).getParentids();
                 if (pId == null) {
                     continue;
                 }

+ 206 - 210
src/main/java/net/mingsoft/cms/util/CmsParserUtil.java

@@ -10,6 +10,7 @@ import net.mingsoft.base.constant.Const;
 import net.mingsoft.basic.util.BasicUtil;
 import net.mingsoft.basic.util.SpringUtil;
 import net.mingsoft.cms.bean.CategoryBean;
+import net.mingsoft.cms.constant.e.CategoryTypeEnum;
 import net.mingsoft.cms.entity.CategoryEntity;
 import net.mingsoft.mdiy.bean.PageBean;
 import net.mingsoft.mdiy.biz.IModelBiz;
@@ -31,243 +32,238 @@ import java.util.concurrent.ExecutorService;
  * 文章解析工具类
  */
 public class CmsParserUtil extends ParserUtil {
-	/**
-	 * 封面
-	 */
-	private static int COLUMN_TYPE_COVER = 2;
 
-	private final static String FIELD="field";
 
-	/**
-	 * 指定模板,指定路径进行生成静态页面,会自定识别pc与移动端
-	 *
-	 * @param templatePath
-	 *            模板路径
-	 * @param targetPath
-	 *            生成后的路径,默认生成的html文件,所以不能带.html后缀,
-	 * @throws IOException
-	 */
-	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);
-		CategoryEntity column = new CategoryEntity();
-		//内容管理栏目编码
-		map.put(COLUMN, column);
-		String content = CmsParserUtil.generate(templatePath, map,htmlDir);
-		FileUtil.writeString(content, ParserUtil.buildHtmlPath(targetPath,htmlDir), Const.UTF8);
-	}
+    private final static String FIELD = "field";
 
-	/**
-	 * 生成静态列表页
-	 * @param column
-	 * @param articleIdTotal
-	 * @throws TemplateNotFoundException
-	 * @throws MalformedTemplateNameException
-	 * @throws ParseException
-	 * @throws IOException
-	 */
-	public static void generateList(CategoryEntity column, int articleIdTotal,String htmlDir)
-			throws TemplateNotFoundException, MalformedTemplateNameException, ParseException, IOException {
-		try{
-			// 文章的栏目模型编号
-			PageBean page = new PageBean();
+    /**
+     * 指定模板,指定路径进行生成静态页面,会自定识别pc与移动端
+     *
+     * @param templatePath 模板路径
+     * @param targetPath   生成后的路径,默认生成的html文件,所以不能带.html后缀,
+     * @throws IOException
+     */
+    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);
+        CategoryEntity column = new CategoryEntity();
+        //内容管理栏目编码
+        map.put(COLUMN, column);
+        String content = CmsParserUtil.generate(templatePath, map, htmlDir);
+        FileUtil.writeString(content, ParserUtil.buildHtmlPath(targetPath, htmlDir), Const.UTF8);
+    }
 
-			//获取列表中的size
-			page.setSize(ParserUtil.getPageSize(column.getCategoryListUrl(),20));
-			page.setRcount(articleIdTotal);
+    /**
+     * 生成静态列表页
+     *
+     * @param column
+     * @param articleIdTotal
+     * @throws TemplateNotFoundException
+     * @throws MalformedTemplateNameException
+     * @throws ParseException
+     * @throws IOException
+     */
+    public static void generateList(CategoryEntity column, int articleIdTotal, String htmlDir)
+            throws TemplateNotFoundException, MalformedTemplateNameException, ParseException, IOException {
+        try {
+            // 文章的栏目模型编号
+            PageBean page = new PageBean();
 
-			int totalPageSize = PageUtil.totalPage(articleIdTotal, page.getSize());
-			page.setTotal(totalPageSize);
+            //获取列表中的size
+            page.setSize(ParserUtil.getPageSize(column.getCategoryListUrl(), 20));
+            page.setRcount(articleIdTotal);
 
-			//获取模板中列表标签中的条件
-			Map<String, Object> map = new HashMap<>();
-			if (BasicUtil.getWebsiteApp() != null) {
-				map.put(ParserUtil.APP_DIR, BasicUtil.getWebsiteApp().getAppDir());
-			}
+            int totalPageSize = PageUtil.totalPage(articleIdTotal, page.getSize());
+            page.setTotal(totalPageSize);
 
-			map.put(ParserUtil.HTML, htmlDir);
-			map.put(ParserUtil.URL, BasicUtil.getUrl());
-			map.put(ParserUtil.PAGE, page);
+            //获取模板中列表标签中的条件
+            Map<String, Object> map = new HashMap<>();
+            if (BasicUtil.getWebsiteApp() != null) {
+                map.put(ParserUtil.APP_DIR, BasicUtil.getWebsiteApp().getAppDir());
+            }
 
-			String columnListPath;
-			ModelEntity contentModel = null;
-			// 判断当前栏目是否有自定义模型
-			if (column.getMdiyModelId() != null) {
-				// 通过栏目模型编号获取自定义模型实体
-				contentModel = (ModelEntity) SpringUtil.getBean(ModelBizImpl.class).getEntity(column.getMdiyModelId());
-			}
+            map.put(ParserUtil.HTML, htmlDir);
+            map.put(ParserUtil.URL, BasicUtil.getUrl());
+            map.put(ParserUtil.PAGE, page);
 
-			//全局参数设置
-			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());
-			}
+            String columnListPath;
+            ModelEntity contentModel = null;
+            // 判断当前栏目是否有自定义模型
+            if (column.getMdiyModelId() != null) {
+                // 通过栏目模型编号获取自定义模型实体
+                contentModel = (ModelEntity) SpringUtil.getBean(ModelBizImpl.class).getEntity(column.getMdiyModelId());
+            }
 
-			int pageNo = 1;
-			//文章列表页没有写文章列表标签,总数为0
-			if (totalPageSize <= 0) {
-				// 数据库中第一页是从开始0*size
-				columnListPath = ParserUtil.buildHtmlPath(column.getCategoryPath() + File.separator + ParserUtil.INDEX,htmlDir);
-				// 设置分页的起始位置
-				page.setPageNo(pageNo);
-				String read = ParserUtil.rendering(File.separator + column.getCategoryListUrl(), parserParams);
-				FileUtil.writeString(read, columnListPath, Const.UTF8);
+            //全局参数设置
+            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());
+            }
 
-			} else {
-				// 遍历分页
-				for (int i = 0; i < totalPageSize; i++) {
-					if (i == 0) {
-						// 数据库中第一页是从开始0*size
-						// 首页路径index.html
-						columnListPath = ParserUtil
-								.buildHtmlPath(column.getCategoryPath() + File.separator + ParserUtil.INDEX,htmlDir);
-					} else {
-						// 其他路径list-2.html
-						columnListPath = ParserUtil
-								.buildHtmlPath(column.getCategoryPath() + File.separator + ParserUtil.PAGE_LIST + pageNo,htmlDir);
-					}
-					// 设置分页的起始位置
-					page.setPageNo(pageNo);
-					String read = ParserUtil.rendering(File.separator + column.getCategoryListUrl(), parserParams);
-					FileUtil.writeString(read, columnListPath, Const.UTF8);
-					pageNo++;
-				}
-			}
-		}catch (Exception e){
-			e.printStackTrace();
-		}
-	}
+            int pageNo = 1;
+            //文章列表页没有写文章列表标签,总数为0
+            if (totalPageSize <= 0) {
+                // 数据库中第一页是从开始0*size
+                columnListPath = ParserUtil.buildHtmlPath(column.getCategoryPath() + File.separator + ParserUtil.INDEX, htmlDir);
+                // 设置分页的起始位置
+                page.setPageNo(pageNo);
+                String read = ParserUtil.rendering(File.separator + column.getCategoryListUrl(), parserParams);
+                FileUtil.writeString(read, columnListPath, Const.UTF8);
 
-	/**
-	 * 生成内容
-	 *
-	 * @param articleIdList
-	 *            文章集合
-	 * @return
-	 * @throws IOException
-	 * @throws ParseException
-	 * @throws MalformedTemplateNameException
-	 * @throws TemplateNotFoundException
-	 */
-	public static void generateBasic(List<CategoryBean>  articleIdList,String htmlDir) {
+            } else {
+                // 遍历分页
+                for (int i = 0; i < totalPageSize; i++) {
+                    if (i == 0) {
+                        // 数据库中第一页是从开始0*size
+                        // 首页路径index.html
+                        columnListPath = ParserUtil
+                                .buildHtmlPath(column.getCategoryPath() + File.separator + ParserUtil.INDEX, htmlDir);
+                    } else {
+                        // 其他路径list-2.html
+                        columnListPath = ParserUtil
+                                .buildHtmlPath(column.getCategoryPath() + File.separator + ParserUtil.PAGE_LIST + pageNo, htmlDir);
+                    }
+                    // 设置分页的起始位置
+                    page.setPageNo(pageNo);
+                    String read = ParserUtil.rendering(File.separator + column.getCategoryListUrl(), parserParams);
+                    FileUtil.writeString(read, columnListPath, Const.UTF8);
+                    pageNo++;
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
 
-		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();) {
+    /**
+     * 生成内容
+     *
+     * @param articleIdList 文章集合
+     * @return
+     * @throws IOException
+     * @throws ParseException
+     * @throws MalformedTemplateNameException
+     * @throws TemplateNotFoundException
+     */
+    public static void generateBasic(List<CategoryBean> articleIdList, String 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(); ) {
 
 
-			String writePath = null;
-			//设置分页类
-			PageBean page = new PageBean();
-			// 文章编号
-			String articleId = articleIdList.get(artId).getArticleId();
-			// 文章的栏目路径
-			String articleColumnPath = articleIdList.get(artId).getCategoryPath();
-			// 该文章相关分类
-			String categoryParentId = articleIdList.get(artId).getId() ;
-			if(StringUtils.isNotBlank(articleIdList.get(artId).getCategoryParentId())){
-				categoryParentId += ','+articleIdList.get(artId).getCategoryParentId();
-			}
-			// 文章的模板路径
-			String columnUrl = articleIdList.get(artId).getCategoryUrl();
-			// 文章的栏目模型编号
-			Integer columnContentModelId = null;
-			if(articleIdList.get(artId).getMdiyModelId() != null && articleIdList.get(artId).getMdiyModelId() > 0){
-				columnContentModelId = articleIdList.get(artId).getMdiyModelId();
-			}
+            CategoryBean categoryBean = articleIdList.get(artId);
+            String writePath = null;
+            //设置分页类
+            PageBean page = new PageBean();
+            // 文章编号
+            String articleId = categoryBean.getArticleId();
+            // 文章的栏目路径
+            String articleColumnPath = categoryBean.getCategoryPath();
+            // 该文章相关分类
+            String categoryParentId = categoryBean.getId();
+            if (StringUtils.isNotBlank(categoryBean.getCategoryParentIds())) {
+                categoryParentId += ',' + categoryBean.getCategoryParentIds();
+            }
+            // 文章的模板路径
+            String columnUrl = categoryBean.getCategoryUrl();
+            // 文章的栏目模型编号
+            Integer columnContentModelId = null;
+            if (articleIdList.get(artId).getMdiyModelId() != null && categoryBean.getMdiyModelId() > 0) {
+                columnContentModelId = categoryBean.getMdiyModelId();
+            }
 
-			// 文章是否已经生成了,生成了就跳过
-			if (generateIds.contains(articleId)) {
-				artId++;
-				continue;
-			}
+            // 文章是否已经生成了,生成了就跳过
+            if (generateIds.contains(articleId)) {
+                artId++;
+                continue;
+            }
 
-			// 判断文件是否存在,若不存在弹出返回信息
-			if (!FileUtil.exist(ParserUtil.buildTempletPath(columnUrl))||articleIdList.get(artId).getId()==null||articleIdList.get(artId).getCategoryType()==null) {
-				artId++;
-				continue;
-			}
-			// 将
-			generateIds.add(articleId);
-			//如果是封面就生成index.html
-			if(Integer.parseInt(articleIdList.get(artId).getCategoryType()) == COLUMN_TYPE_COVER) {
-				writePath = ParserUtil.buildHtmlPath(articleColumnPath + File.separator + ParserUtil.INDEX,htmlDir);
-			} else {
+            // 判断文件是否存在,若不存在弹出返回信息
+            if (!FileUtil.exist(ParserUtil.buildTempletPath(columnUrl)) || categoryBean.getId() == null || categoryBean.getCategoryType() == null) {
+                artId++;
+                continue;
+            }
+            // 将
+            generateIds.add(articleId);
+            //如果是封面就生成index.html
+            if (categoryBean.getCategoryType().equals(CategoryTypeEnum.COVER.toString())) {
+                writePath = ParserUtil.buildHtmlPath(articleColumnPath + File.separator + ParserUtil.INDEX, htmlDir);
+            } else {
                 // 组合文章路径如:html/站点id/栏目id/文章id.html
-                writePath = ParserUtil.buildHtmlPath(articleColumnPath + File.separator + articleId,htmlDir);
+                writePath = ParserUtil.buildHtmlPath(articleColumnPath + File.separator + articleId, htmlDir);
             }
 
-			Map<String, Object> parserParams = new HashMap<String, Object>();
-			parserParams.put(ParserUtil.COLUMN, articleIdList.get(artId));
-			// 判断当前栏目是否有自定义模型
-			if (columnContentModelId != null) {
-				// 通过当前栏目的模型编号获取,自定义模型表名
-				if (contentModelMap.containsKey(columnContentModelId)) {
-					parserParams.put(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());
-				}
-			}
+            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());
+                } else {
+                    // 通过栏目模型编号获取自定义模型实体
+                    contentModel = (ModelEntity) SpringUtil.getBean(IModelBiz.class)
+                            .getEntity(columnContentModelId);
+                    // 将自定义模型编号设置为key值
+                    contentModelMap.put(columnContentModelId, contentModel.getModelTableName());
+                    parserParams.put(TABLE_NAME, contentModel.getModelTableName());
+                }
+            }
 
-			parserParams.put(ID, articleId);
-			// 第一篇文章没有上一篇
-			if (artId > 0) {
-				CategoryBean preCaBean = articleIdList.get(artId - 1);
-				//判断当前文档是否与上一页文章在同一栏目下,并且不能使用父栏目字符串,因为父栏目中没有所属栏目编号
+            parserParams.put(ID, articleId);
+            // 第一篇文章没有上一篇
+            if (artId > 0) {
+                CategoryBean preCaBean = articleIdList.get(artId - 1);
+                //判断当前文档是否与上一页文章在同一栏目下,并且不能使用父栏目字符串,因为父栏目中没有所属栏目编号
 //				if( categoryParentId.contains(preCaBean.getCategoryId()+"")){
-					page.setPreId(preCaBean.getArticleId());
+                page.setPreId(preCaBean.getArticleId());
 //				}
-			}
-			// 最后一篇文章没有下一篇
-			if (artId + 1 < articleIdList.size()) {
-				CategoryBean nextCaBean = articleIdList.get(artId + 1);
-				//判断当前文档是否与下一页文章在同一栏目下并且不能使用父栏目字符串,因为父栏目中没有所属栏目编号
+            }
+            // 最后一篇文章没有下一篇
+            if (artId + 1 < articleIdList.size()) {
+                CategoryBean nextCaBean = articleIdList.get(artId + 1);
+                //判断当前文档是否与下一页文章在同一栏目下并且不能使用父栏目字符串,因为父栏目中没有所属栏目编号
 //				if(categoryParentId.contains(nextCaBean.getCategoryId()+"")){
-					page.setNextId(nextCaBean.getArticleId());
+                page.setNextId(nextCaBean.getArticleId());
 //				}
-			}
+            }
 
-			parserParams.put(IS_DO, false);
-			parserParams.put(ParserUtil.PAGE, page);
-			String finalWritePath = writePath;
-			HashMap<Object, Object> cloneMap = CollUtil.newHashMap();
-			cloneMap.putAll(parserParams);
+            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();
-				}
-			});
-			artId++;
-		}
-	}
+                String content = null;
+                try {
+                    SpringUtil.setRequest(request);
+                    content = CmsParserUtil.generate(columnUrl, cloneMap, htmlDir);
+                    FileUtil.writeString(content, finalWritePath, Const.UTF8);
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            });
+            artId++;
+        }
+    }
 }

+ 2 - 0
src/main/resources/application.yml

@@ -12,6 +12,8 @@ logging:
     name: mcms.log #会在项目的根目录下生成对应的mcms.log文件,也可以根据实际情况写绝对路径,例如:d:/mcms.log
     path: log #会在项目的根目录下生成log目录,里面会生成对应的日期目录,日期目录下面生成日志压缩包备份文件,默认按每10M分割一个日志文件,例如:log/2020-01/app-2020-01-03-18.1.log.gz(表示2020年1月3号下午六点的第一个备份),也可以根据实际情况写绝对路径,例如:d:/log
 ms:
+  diy:
+    html-dir: html
   mstore:
     http: http://store.i.mingsoft.net/
     host: store.i.mingsoft.net