diff --git a/README.md b/README.md index db58de06..74d1d6fc 100644 --- a/README.md +++ b/README.md @@ -143,6 +143,7 @@ git clone https://gitee.com/mingSoft/MCMS.git
# 文档 * 使用手册 http://doc.mingsoft.net/mcms/ +* 插件手册 http://doc.mingsoft.net/plugs-cms/ # 关于版本说明 [更多版本查看](https://www.mingsoft.net/html/default/cms/banben/index.html) 1. 开源版本永久免费发布源代码,开发者、企业可以终身免费使用,每个月团队会收集开源系统的问题并在每月的28号进行更新; diff --git a/pom.xml b/pom.xml index 1adda33a..966eb437 100644 --- a/pom.xml +++ b/pom.xml @@ -10,14 +10,14 @@ 4.0.0 net.mingsoft ms-mcms - 5.2.8 + 5.2.9 ${project.groupId}:${project.artifactId} 1.8 UTF-8 - 2.17.0 + 2.18.0 @@ -44,26 +44,30 @@ net.mingsoft ms-base - 2.1.13 + 2.1.14 net.mingsoft ms-basic - 2.1.13.4 + 2.1.14 net.mingsoft ms-mdiy - 2.1.13.1 + 2.1.14 net.mingsoft store-client - 2.1.13 + 2.1.14 + + + com.github.oshi + oshi-core + 6.2.2 - org.apache.logging.log4j log4j-core diff --git a/src/main/java/net/mingsoft/MSApplication.java b/src/main/java/net/mingsoft/MSApplication.java index 20bde750..7f2bf20f 100644 --- a/src/main/java/net/mingsoft/MSApplication.java +++ b/src/main/java/net/mingsoft/MSApplication.java @@ -32,7 +32,6 @@ import springfox.documentation.swagger2.annotations.EnableSwagger2; import java.util.Locale; - @SpringBootApplication(scanBasePackages = {"net.mingsoft"}) @MapperScan(basePackages={"**.dao","com.baomidou.**.mapper"}) @ServletComponentScan(basePackages = {"net.mingsoft"}) diff --git a/src/main/java/net/mingsoft/cms/action/CategoryAction.java b/src/main/java/net/mingsoft/cms/action/CategoryAction.java index 8dfe6017..5973562b 100755 --- a/src/main/java/net/mingsoft/cms/action/CategoryAction.java +++ b/src/main/java/net/mingsoft/cms/action/CategoryAction.java @@ -151,6 +151,10 @@ public class CategoryAction extends BaseAction { @LogAnn(title = "保存分类", businessType = BusinessTypeEnum.INSERT) @RequiresPermissions("cms:category:save") public ResultData save(@ModelAttribute @ApiIgnore CategoryEntity category) { + //验证缩略图参数值是否合法 + if (!category.getCategoryImg().matches("^\\[.{1,}]$") || category.getCategoryImg()==null){ + category.setCategoryImg(""); + } //验证栏目管理名称的值是否合法 if(StringUtil.isBlank(category.getCategoryTitle())){ return ResultData.build().error(getResString("err.empty", this.getResString("category.title"))); @@ -229,6 +233,10 @@ public class CategoryAction extends BaseAction { @LogAnn(title = "更新分类", businessType = BusinessTypeEnum.UPDATE) @RequiresPermissions("cms:category:update") public ResultData update(@ModelAttribute @ApiIgnore CategoryEntity category) { + //验证缩略图参数值是否合法 + if (!category.getCategoryImg().matches("^\\[.{1,}]$") || category.getCategoryImg()==null){ + category.setCategoryImg(""); + } //验证栏目管理名称的值是否合法 if(StringUtil.isBlank(category.getCategoryTitle())){ return ResultData.build().error(getResString("err.empty", this.getResString("category.title"))); @@ -298,7 +306,7 @@ public class CategoryAction extends BaseAction { @GetMapping("/verifyPingYin") @ResponseBody public ResultData verifyPingYin(@ModelAttribute @ApiIgnore CategoryEntity category){ - int count = categoryBiz.count(Wrappers.lambdaQuery() + long count = categoryBiz.count(Wrappers.lambdaQuery() .ne(StrUtil.isNotBlank(category.getId()), CategoryEntity::getId, category.getId()) .eq(CategoryEntity::getCategoryPinyin, category.getCategoryPinyin())); diff --git a/src/main/java/net/mingsoft/cms/action/ContentAction.java b/src/main/java/net/mingsoft/cms/action/ContentAction.java index 8b9fc51f..52ac72e7 100755 --- a/src/main/java/net/mingsoft/cms/action/ContentAction.java +++ b/src/main/java/net/mingsoft/cms/action/ContentAction.java @@ -31,7 +31,7 @@ import net.mingsoft.basic.annotation.LogAnn; import net.mingsoft.basic.bean.EUListBean; import net.mingsoft.basic.constant.e.BusinessTypeEnum; import net.mingsoft.basic.util.BasicUtil; -import net.mingsoft.basic.util.SqlInjectionUtil; +import net.mingsoft.base.util.SqlInjectionUtil; import net.mingsoft.basic.util.StringUtil; import net.mingsoft.cms.bean.ContentBean; import net.mingsoft.cms.biz.ICategoryBiz; @@ -40,6 +40,7 @@ import net.mingsoft.cms.entity.CategoryEntity; import net.mingsoft.cms.entity.ContentEntity; import net.mingsoft.mdiy.biz.IModelBiz; import net.mingsoft.mdiy.entity.ModelEntity; +import org.apache.commons.lang3.StringUtils; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; @@ -85,6 +86,7 @@ public class ContentAction extends BaseAction { /** * 返回主界面index */ + @ApiIgnore @GetMapping("/index") public String index(){ return "/cms/content/index"; @@ -93,6 +95,7 @@ public class ContentAction extends BaseAction { /** * 返回主界面main */ + @ApiIgnore @GetMapping("/main") public String main(){ return "/cms/content/main"; @@ -119,7 +122,7 @@ public class ContentAction extends BaseAction { // 检查SQL注入 SqlInjectionUtil.filterContent(content.getCategoryId()); BasicUtil.startPage(); - List contentList = contentBiz.query(content); + List contentList = contentBiz.queryContent(content); return ResultData.build().success(new EUListBean(contentList,(int) BasicUtil.endPage(contentList).getTotal())); } @@ -195,6 +198,10 @@ public class ContentAction extends BaseAction { @LogAnn(title = "保存文章", businessType = BusinessTypeEnum.INSERT) @RequiresPermissions("cms:content:save") public ResultData save(@ModelAttribute @ApiIgnore ContentEntity content) { + //验证缩略图参数值是否合法 + if (content.getContentImg()==null || !content.getContentImg().matches("^\\[.{1,}]$")){ + content.setContentImg(""); + } //验证文章标题的值是否合法 if(StringUtil.isBlank(content.getContentTitle())){ return ResultData.build().error(getResString("err.empty", this.getResString("content.title"))); @@ -238,7 +245,7 @@ public class ContentAction extends BaseAction { //获取栏目实体 CategoryEntity categoryEntity = categoryBiz.getById(contents.get(i).getCategoryId()); //如果栏目绑定的模型ID为空 - if (categoryEntity.getMdiyModelId() == null){ + if (StringUtils.isBlank(categoryEntity.getMdiyModelId())){ continue; } //获取到配置模型实体 @@ -279,6 +286,10 @@ public class ContentAction extends BaseAction { @LogAnn(title = "更新文章", businessType = BusinessTypeEnum.UPDATE) @RequiresPermissions("cms:content:update") public ResultData update(@ModelAttribute @ApiIgnore ContentEntity content) { + //验证缩略图参数值是否合法 + if (content.getContentImg()==null || !content.getContentImg().matches("^\\[.{1,}]$")){ + content.setContentImg(""); + } //验证文章标题的值是否合法 if(StringUtil.isBlank(content.getContentTitle())){ return ResultData.build().error(getResString("err.empty", this.getResString("content.title"))); diff --git a/src/main/java/net/mingsoft/cms/action/GeneraterAction.java b/src/main/java/net/mingsoft/cms/action/GeneraterAction.java index 90cb0e0a..250d3c56 100755 --- a/src/main/java/net/mingsoft/cms/action/GeneraterAction.java +++ b/src/main/java/net/mingsoft/cms/action/GeneraterAction.java @@ -99,7 +99,7 @@ public class GeneraterAction extends BaseAction { @Value("${ms.manager.path}") private String managerPath; - @Value("${ms.html-dir:html}") + @Value("${ms.diy.html-dir:html}") private String htmlDir; /** @@ -251,7 +251,7 @@ public class GeneraterAction extends BaseAction { contentBean.setCategoryId(category.getId()); contentBean.setCategoryType(category.getCategoryType()); //将文章列表标签中的中的参数 - articleIdList = contentBiz.queryIdsByCategoryIdForParser(contentBean); + articleIdList = contentBiz.queryIdsByCategoryIdForParserAndNotCover(contentBean); // 分类是列表 if (category.getCategoryType().equals(CategoryTypeEnum.LIST.toString())) { // 判断模板文件是否存在 diff --git a/src/main/java/net/mingsoft/cms/action/web/MCmsAction.java b/src/main/java/net/mingsoft/cms/action/web/MCmsAction.java index dceeec13..6f09bc9e 100755 --- a/src/main/java/net/mingsoft/cms/action/web/MCmsAction.java +++ b/src/main/java/net/mingsoft/cms/action/web/MCmsAction.java @@ -19,9 +19,6 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - - - package net.mingsoft.cms.action.web; import cn.hutool.core.util.ObjectUtil; @@ -31,24 +28,19 @@ import freemarker.core.ParseException; import freemarker.template.MalformedTemplateNameException; import freemarker.template.TemplateNotFoundException; import net.mingsoft.base.constant.Const; -import net.mingsoft.basic.exception.BusinessException; import net.mingsoft.basic.util.BasicUtil; -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.entity.CategoryEntity; -import net.mingsoft.cms.entity.ContentEntity; import net.mingsoft.mdiy.bean.PageBean; import net.mingsoft.mdiy.biz.IModelBiz; -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.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.MediaType; import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; @@ -75,12 +67,6 @@ import java.util.Map; @RequestMapping("/mcms") public class MCmsAction extends net.mingsoft.cms.action.BaseAction { - /** - * 自定义页面业务层 - */ - @Autowired - private IPageBiz pageBiz; - /** * 文章管理业务处理层 */ @@ -101,19 +87,16 @@ public class MCmsAction extends net.mingsoft.cms.action.BaseAction { private IModelBiz modelBiz; - @Value("${ms.html-dir:html}") + @Value("${ms.diy.html-dir:html}") private String htmlDir; - - - /** * 实现前端页面的文章搜索 * * @param request 搜索id * @param response */ - @RequestMapping(value = "search",method = {RequestMethod.GET, RequestMethod.POST}) + @RequestMapping(value = "search",method = {RequestMethod.GET, RequestMethod.POST},produces= MediaType.TEXT_HTML_VALUE+";charset=utf-8") @ResponseBody public String search(HttpServletRequest request, HttpServletResponse response) { String search = BasicUtil.getString("tmpl", "search.htm"); @@ -178,7 +161,7 @@ public class MCmsAction extends net.mingsoft.cms.action.BaseAction { column = (CategoryEntity) categoryBiz.getById(typeId); // 获取表单类型的id if (column != null && ObjectUtil.isNotNull(column.getMdiyModelId())) { - contentModel = (ModelEntity) modelBiz.getEntity(column.getMdiyModelId()); + contentModel = (ModelEntity) modelBiz.getById(column.getMdiyModelId()); if (contentModel != null) { // 保存自定义模型的数据 Map fieldMap = contentModel.getFieldMap(); diff --git a/src/main/java/net/mingsoft/cms/aop/CategoryAop.java b/src/main/java/net/mingsoft/cms/aop/CategoryAop.java index 81d359d8..5dc20dcf 100644 --- a/src/main/java/net/mingsoft/cms/aop/CategoryAop.java +++ b/src/main/java/net/mingsoft/cms/aop/CategoryAop.java @@ -7,14 +7,22 @@ package net.mingsoft.cms.aop; import cn.hutool.core.io.FileUtil; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import net.mingsoft.base.entity.ResultData; +import net.mingsoft.basic.exception.BusinessException; import net.mingsoft.basic.util.BasicUtil; +import net.mingsoft.cms.constant.e.CategoryTypeEnum; +import net.mingsoft.cms.dao.ICategoryDao; +import net.mingsoft.cms.dao.IContentDao; import net.mingsoft.cms.entity.CategoryEntity; -import net.mingsoft.mdiy.biz.IDictBiz; -import net.mingsoft.mdiy.entity.DictEntity; +import net.mingsoft.cms.entity.ContentEntity; import org.apache.commons.lang3.StringUtils; import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.After; +import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.springframework.beans.factory.annotation.Autowired; @@ -23,7 +31,6 @@ import org.springframework.stereotype.Component; import java.io.File; import java.util.List; -import java.util.stream.Collectors; /** @@ -38,11 +45,73 @@ public class CategoryAop extends net.mingsoft.basic.aop.BaseAop { @Value("${ms.diy.html-dir:html}") private String htmlDir; + @Autowired + private ICategoryDao categoryDao; + + @Autowired + private IContentDao contentDao; @Pointcut("execution(* net.mingsoft.cms.action.CategoryAction.delete(..)) ") public void delete() { } + /** + * 栏目保存接口切面 + */ + @Pointcut("execution(* net.mingsoft.cms.action.CategoryAction.save(..)) ") + public void save() {} + + /** + * 栏目更新接口切面 + */ + @Pointcut("execution(* net.mingsoft.cms.action.CategoryAction.update(..)) ") + public void update() {} + + + + @Around("save() || update()") + public ResultData move(ProceedingJoinPoint pjp) throws Throwable { + CategoryEntity category = getType(pjp, CategoryEntity.class); + if (category == null) { + throw new BusinessException("栏目不存在!"); + } + + // 获取返回值 + Object obj = pjp.proceed(pjp.getArgs()); + ResultData resultData = JSONObject.parseObject(JSONObject.toJSON(obj).toString(), ResultData.class); + CategoryEntity parent = categoryDao.selectById(category.getCategoryId()); + if (parent == null) { + return resultData; + } + // 用于判断父级栏目之前是否是子栏目 + // 只有父节点之前为子节点 && 父栏目类型为列表 && 子栏目为列表 + boolean flag = parent.getLeaf() && StringUtils.equals(parent.getCategoryType(), CategoryTypeEnum.LIST.toString()); + if (flag) { + // 将父栏目的内容模板清空 + parent.setCategoryUrl(""); + categoryDao.updateById(parent); + CategoryEntity returnCategory = JSONObject.parseObject(resultData.get(ResultData.DATA_KEY).toString(), CategoryEntity.class); + // 获取父栏目ID集合 + String categoryIds = StringUtils.isEmpty(parent.getCategoryParentIds()) + ? returnCategory.getId() : parent.getCategoryParentIds() + "," + returnCategory.getId(); + if (!StringUtils.equals(returnCategory.getCategoryType(), CategoryTypeEnum.LIST.toString())) { + // 如果子栏目不为列表,将直接删除父栏目下的文章 + LambdaUpdateWrapper contentDeleteWrapper = new UpdateWrapper().lambda(); + contentDeleteWrapper.eq(ContentEntity::getCategoryId, parent.getId()); + contentDao.delete(contentDeleteWrapper); + } + // 将父栏目下的文章移动到子栏目下 + LambdaUpdateWrapper contentWrapper = new UpdateWrapper().lambda(); + contentWrapper.set(ContentEntity::getCategoryId, returnCategory.getId()); + contentWrapper.eq(ContentEntity::getCategoryId, parent.getId()); + contentDao.update(new ContentEntity(), contentWrapper); + + return resultData; + } + return resultData; + } + + /** * 删除栏目后并删除文章对应的静态化文件 * diff --git a/src/main/java/net/mingsoft/cms/biz/IContentBiz.java b/src/main/java/net/mingsoft/cms/biz/IContentBiz.java index 2bdbcc14..8fbba24e 100755 --- a/src/main/java/net/mingsoft/cms/biz/IContentBiz.java +++ b/src/main/java/net/mingsoft/cms/biz/IContentBiz.java @@ -40,12 +40,32 @@ import java.util.Map; */ public interface IContentBiz extends IBaseBiz { + /** * 根据文章属性查询 * @param contentBean * @return */ List queryIdsByCategoryIdForParser(ContentBean contentBean); + /** + * 查询文章,不包括单篇 + * @param contentBean + * @return + */ + List queryContent(ContentBean contentBean); int getSearchCount(ModelEntity contentModel, List diyList, Map whereMap, int appId, String categoryIds); + /** + * 根据文章属性查询,不包括单篇 + * @param contentBean + * @return + */ + List queryIdsByCategoryIdForParserAndNotCover(ContentBean contentBean); + + /** + * 根据解析标签arclist的sql获取list + * @return + */ + List list(Map map); + } diff --git a/src/main/java/net/mingsoft/cms/biz/impl/ContentBizImpl.java b/src/main/java/net/mingsoft/cms/biz/impl/ContentBizImpl.java index ad3dcc50..edb954a7 100755 --- a/src/main/java/net/mingsoft/cms/biz/impl/ContentBizImpl.java +++ b/src/main/java/net/mingsoft/cms/biz/impl/ContentBizImpl.java @@ -24,6 +24,8 @@ package net.mingsoft.cms.biz.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import freemarker.template.TemplateException; import net.mingsoft.base.biz.impl.BaseBizImpl; import net.mingsoft.base.dao.IBaseDao; import net.mingsoft.cms.bean.CategoryBean; @@ -32,13 +34,16 @@ import net.mingsoft.cms.biz.IContentBiz; import net.mingsoft.cms.dao.ICategoryDao; import net.mingsoft.cms.dao.IContentDao; import net.mingsoft.cms.entity.ContentEntity; +import net.mingsoft.mdiy.biz.ITagBiz; import net.mingsoft.mdiy.entity.ModelEntity; +import net.mingsoft.mdiy.entity.TagEntity; +import net.mingsoft.mdiy.util.ParserUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import java.io.IOException; import java.util.List; import java.util.Map; @@ -64,9 +69,9 @@ public class ContentBizImpl extends BaseBizImpl imp @Autowired private ICategoryDao categoryDao; - @Value("${ms.html-dir:html}") - private String htmlDir; + @Autowired + private ITagBiz tagBiz; @Override protected IBaseDao getDao() { @@ -74,11 +79,18 @@ public class ContentBizImpl extends BaseBizImpl imp return contentDao; } + @Override public List queryIdsByCategoryIdForParser(ContentBean contentBean) { return this.contentDao.queryIdsByCategoryIdForParser(contentBean); } + @Override + public List queryContent(ContentBean contentBean) { + return this.contentDao.queryContent(contentBean); + + } + @Override public int getSearchCount(ModelEntity contentModel, List diyList, Map whereMap, int appId, String categoryIds) { if (contentModel!=null) { @@ -87,5 +99,30 @@ public class ContentBizImpl extends BaseBizImpl imp return contentDao.getSearchCount(null,null,whereMap, appId,categoryIds); } + @Override + public List queryIdsByCategoryIdForParserAndNotCover(ContentBean contentBean) { + return this.contentDao.queryIdsByCategoryIdForParser(contentBean); + } + + @Override + public List list(Map map ) { + //通过tagSqlBiz获取arclist对应的sql + QueryWrapper tagWrapper = new QueryWrapper<>(); + tagWrapper.eq("tag_name", "arclist"); + TagEntity tagEntity = tagBiz.getOne(tagWrapper); + String sqlFtl = tagEntity.getTagSql(); + List contentEntities = null; + //通过ParserUtil + try { + String sql = ParserUtil.rendering(map,sqlFtl); + //执行原生的sql + contentEntities = (List) tagBiz.excuteSql(sql); + } catch (IOException e) { + e.printStackTrace(); + } catch (TemplateException e) { + e.printStackTrace(); + } + return contentEntities; + } } diff --git a/src/main/java/net/mingsoft/cms/constant/e/CategoryTypeEnum.java b/src/main/java/net/mingsoft/cms/constant/e/CategoryTypeEnum.java index 69d77925..06b60195 100755 --- a/src/main/java/net/mingsoft/cms/constant/e/CategoryTypeEnum.java +++ b/src/main/java/net/mingsoft/cms/constant/e/CategoryTypeEnum.java @@ -43,7 +43,12 @@ public enum CategoryTypeEnum implements BaseEnum { /** * 链接 */ - LINK("3"); + LINK("3"), + + /** + * 未知类型 + */ + UN_KNOW("0"); CategoryTypeEnum(String type) { @@ -58,7 +63,7 @@ public enum CategoryTypeEnum implements BaseEnum { return e; } } - return null; + return CategoryTypeEnum.UN_KNOW; } @Override diff --git a/src/main/java/net/mingsoft/cms/dao/ICategoryDao.xml b/src/main/java/net/mingsoft/cms/dao/ICategoryDao.xml index c6fd4642..77093543 100755 --- a/src/main/java/net/mingsoft/cms/dao/ICategoryDao.xml +++ b/src/main/java/net/mingsoft/cms/dao/ICategoryDao.xml @@ -40,6 +40,7 @@ leaf=#{leaf}, category_id=#{categoryId}, category_parent_ids=#{categoryParentIds}, + mdiy_model_id=#{mdiyModelId}, category_type=#{categoryType}, category_sort=#{categorySort}, category_list_url=#{categoryListUrl}, @@ -48,7 +49,6 @@ category_descrip=#{categoryDescrip}, category_img=#{categoryImg}, category_diy_url=#{categoryDiyUrl}, - mdiy_model_id=#{mdiyModelId}, dict_id=#{dictId}, category_flag=#{categoryFlag}, category_path=#{categoryPath}, @@ -98,18 +98,20 @@ diff --git a/src/main/java/net/mingsoft/cms/dao/IContentDao.java b/src/main/java/net/mingsoft/cms/dao/IContentDao.java index 4a9edf44..caf53ed7 100755 --- a/src/main/java/net/mingsoft/cms/dao/IContentDao.java +++ b/src/main/java/net/mingsoft/cms/dao/IContentDao.java @@ -39,6 +39,8 @@ import java.util.Map; */ public interface IContentDao extends IBaseDao { + + /** * 查询文章编号集合 * @contentBean @@ -46,6 +48,20 @@ public interface IContentDao extends IBaseDao { */ public List queryIdsByCategoryIdForParser(ContentBean contentBean); + /** + * 查询文章编号集合,不包括单篇 + * @contentBean + * @return + */ + public List queryIdsByCategoryIdForParserAndNotCover(ContentBean contentBean); + + /** + * 查询文章,不包括单篇 + * @contentBean + * @return + */ + public List queryContent(ContentBean contentBean); + /** * 根据查询文章实体总数 * diff --git a/src/main/java/net/mingsoft/cms/dao/IContentDao.xml b/src/main/java/net/mingsoft/cms/dao/IContentDao.xml index b5f8fb91..3b1b3ff3 100755 --- a/src/main/java/net/mingsoft/cms/dao/IContentDao.xml +++ b/src/main/java/net/mingsoft/cms/dao/IContentDao.xml @@ -207,6 +207,45 @@ + + + + + + + + +