From 19befbb8b6ba0f12f7fec0e597edd0f9bce3ec0f Mon Sep 17 00:00:00 2001 From: xiaoyong931011 <15274802129@163.com> Date: Tue, 12 Jul 2022 11:39:35 +0800 Subject: [PATCH] Merge branch 'master' of http://120.27.238.55:7000/r/farmer-cms --- src/main/java/com/xcong/farmer/cms/modules/core/controller/CmsCoreController.java | 14 src/main/java/com/xcong/farmer/cms/core/handler/ChildDataParserHandler.java | 3 src/main/java/com/xcong/farmer/cms/modules/system/entity/ArticleEntity.java | 8 src/main/java/com/xcong/farmer/cms/modules/system/vo/AdminSeeWebSetInfoVo.java | 31 + src/main/java/com/xcong/farmer/cms/modules/system/controller/AdminWebSetController.java | 31 + src/main/java/com/xcong/farmer/cms/core/tag/model/Articles.java | 13 src/main/java/com/xcong/farmer/cms/modules/core/service/ICmsCoreService.java | 2 src/main/java/com/xcong/farmer/cms/modules/system/dto/SetWebSettingDto.java | 40 + src/main/java/com/xcong/farmer/cms/core/handler/ArticlesDataParserHandler.java | 20 src/main/java/com/xcong/farmer/cms/modules/core/service/impl/CmsCoreServiceImpl.java | 57 ++ src/main/java/com/xcong/farmer/cms/core/tag/model/TimeTag.java | 28 + src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/ColumnServiceImpl.java | 19 src/main/resources/mapper/ColumnMapper.xml | 3 src/main/resources/application-test.yml | 2 src/main/java/com/xcong/farmer/cms/modules/system/service/IWebSettingService.java | 12 src/main/java/com/xcong/farmer/cms/core/template/Configuration.java | 6 src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/ArticleServiceImpl.java | 14 src/test/java/com/xcong/farmer/cms/ArticleTest.java | 28 + src/test/java/com/xcong/farmer/cms/KssframeworkApplicationTests.java | 2 src/main/java/com/xcong/farmer/cms/modules/system/controller/AdminColumnController.java | 4 src/main/java/com/xcong/farmer/cms/conversion/WebSettingConversion.java | 20 src/main/java/com/xcong/farmer/cms/core/handler/PageDataParserHandler.java | 76 +- src/main/java/com/xcong/farmer/cms/modules/system/service/IReleaseService.java | 11 src/main/java/com/xcong/farmer/cms/utils/GroovySingleton.java | 27 + src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/ReleaseServiceImpl.java | 161 +++++- src/main/java/com/xcong/farmer/cms/configurations/CmsConfig.java | 7 src/main/java/com/xcong/farmer/cms/modules/system/entity/ColumnEntity.java | 15 src/main/java/com/xcong/farmer/cms/core/tag/data/ArticleData.java | 40 + src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/WebSettingServiceImpl.java | 50 ++ src/main/java/com/xcong/farmer/cms/modules/system/mapper/ArticleMapper.java | 2 src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/CmsTemplateServiceImpl.java | 93 ++- src/main/java/com/xcong/farmer/cms/core/node/Template.java | 22 src/main/java/com/xcong/farmer/cms/core/template/TemplateConfiguration.java | 13 src/main/java/com/xcong/farmer/cms/core/node/AttrNode.java | 87 +-- src/main/java/com/xcong/farmer/cms/modules/system/vo/AdminSeeColumnInfoVo.java | 3 src/main/java/com/xcong/farmer/cms/core/handler/ArticleDataParserHandler.java | 47 + src/main/java/com/xcong/farmer/cms/configurations/properties/CmsProperties.java | 18 src/main/resources/mapper/ArticleMapper.xml | 30 + src/main/java/com/xcong/farmer/cms/common/utils/FileUtils.java | 6 src/main/java/com/xcong/farmer/cms/core/handler/ColumnDataParserHandler.java | 11 src/main/java/com/xcong/farmer/cms/core/handler/NavDataParserHandler.java | 15 src/main/java/com/xcong/farmer/cms/modules/system/entity/WebSettingEntity.java | 67 ++ src/test/java/com/xcong/farmer/cms/TemplateTest.java | 52 ++ /dev/null | 79 --- src/main/java/com/xcong/farmer/cms/conversion/ArticleConversion.java | 2 src/main/resources/mapper/WebSetMapper.xml | 27 + src/main/java/com/xcong/farmer/cms/modules/system/mapper/ColumnMapper.java | 2 src/main/java/com/xcong/farmer/cms/modules/system/mapper/WebSetMapper.java | 11 src/main/resources/application.yml | 12 49 files changed, 1,024 insertions(+), 319 deletions(-) diff --git a/src/main/java/com/xcong/farmer/cms/common/utils/FileUtils.java b/src/main/java/com/xcong/farmer/cms/common/utils/FileUtils.java index 32d768d..17c62ad 100644 --- a/src/main/java/com/xcong/farmer/cms/common/utils/FileUtils.java +++ b/src/main/java/com/xcong/farmer/cms/common/utils/FileUtils.java @@ -22,10 +22,14 @@ public static String path(String path, String fileName) { File file = new File(path); - if (!file.isDirectory()){ + if (file.exists() && !file.isDirectory()){ return ""; } + if (!file.exists()) { + file.mkdirs(); + } + String dir = path(path); return dir + fileName; } diff --git a/src/main/java/com/xcong/farmer/cms/configurations/CmsConfig.java b/src/main/java/com/xcong/farmer/cms/configurations/CmsConfig.java index 8b5873f..5e2896e 100644 --- a/src/main/java/com/xcong/farmer/cms/configurations/CmsConfig.java +++ b/src/main/java/com/xcong/farmer/cms/configurations/CmsConfig.java @@ -3,11 +3,15 @@ import com.xcong.farmer.cms.configurations.properties.CmsProperties; import com.xcong.farmer.cms.core.template.TemplateConfiguration; import com.xcong.farmer.cms.core.template.TemplateLoader; +import com.xcong.farmer.cms.modules.system.entity.DataDictionaryCustom; +import com.xcong.farmer.cms.modules.system.mapper.DataDictionaryCustomMapper; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; + +import java.util.List; /** * @author wzy @@ -23,7 +27,8 @@ @Bean public TemplateConfiguration templateConfiguration() { log.info("CMS管理系统"); - TemplateConfiguration cfg = new TemplateConfiguration(cmsProperties.getTemplatePath(), cmsProperties.getStaticPath(), cmsProperties.getOutputPath(), cmsProperties.getBaseUrl(), cmsProperties.getStaticUrl()); + + TemplateConfiguration cfg = new TemplateConfiguration(cmsProperties.getTemplatePath(), cmsProperties.getStaticPath(), cmsProperties.getOutputPath(), cmsProperties.getApiUrl(), cmsProperties.getStaticUrl()); TemplateLoader loader = new TemplateLoader(cfg); cfg.templateLoader(loader); return cfg; diff --git a/src/main/java/com/xcong/farmer/cms/configurations/properties/CmsProperties.java b/src/main/java/com/xcong/farmer/cms/configurations/properties/CmsProperties.java index 22b0fc9..440a51c 100644 --- a/src/main/java/com/xcong/farmer/cms/configurations/properties/CmsProperties.java +++ b/src/main/java/com/xcong/farmer/cms/configurations/properties/CmsProperties.java @@ -3,19 +3,35 @@ import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Component; @Data @Configuration @ConfigurationProperties(prefix = "cms") public class CmsProperties { + /** + * 模板保存地址 + */ private String templatePath; + /** + * 静态文件保存地址 + */ private String staticPath; + /** + * html输出地址 + */ private String outputPath; + /** + * 静态文件访问地址 + */ private String staticUrl; - private String baseUrl; + /** + * api请求地址 + */ + private String apiUrl; } diff --git a/src/main/java/com/xcong/farmer/cms/conversion/ArticleConversion.java b/src/main/java/com/xcong/farmer/cms/conversion/ArticleConversion.java index cdb6610..9b65930 100644 --- a/src/main/java/com/xcong/farmer/cms/conversion/ArticleConversion.java +++ b/src/main/java/com/xcong/farmer/cms/conversion/ArticleConversion.java @@ -18,7 +18,9 @@ @Mapping(source = "visits", target = "views") @Mapping(source = "mainDiagram", target = "thumb") @Mapping(source = "releaseTime", target = "createTime") + @Mapping(source = "authorBelong", target = "company") @Mapping(source = "articleDetails", target = "content") @Mapping(source = "uploadFile", target = "filePath") + @Mapping(source = "remark", target = "description") public abstract ArticleData entityToData(ArticleEntity article); } diff --git a/src/main/java/com/xcong/farmer/cms/conversion/WebSettingConversion.java b/src/main/java/com/xcong/farmer/cms/conversion/WebSettingConversion.java new file mode 100644 index 0000000..b358a51 --- /dev/null +++ b/src/main/java/com/xcong/farmer/cms/conversion/WebSettingConversion.java @@ -0,0 +1,20 @@ +package com.xcong.farmer.cms.conversion; + +import com.xcong.farmer.cms.modules.system.dto.SetWebSettingDto; +import com.xcong.farmer.cms.modules.system.entity.WebSettingEntity; +import com.xcong.farmer.cms.modules.system.vo.AdminSeeWebSetInfoVo; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +/** + * @author wzy + * @date 2022-07-11 + **/ +@Mapper +public abstract class WebSettingConversion { + public static WebSettingConversion INSTANCE = Mappers.getMapper(WebSettingConversion.class); + + public abstract WebSettingEntity dtoToEntity(SetWebSettingDto setWebSettingDto); + + public abstract AdminSeeWebSetInfoVo entityToVo(WebSettingEntity webSettingEntity); +} diff --git a/src/main/java/com/xcong/farmer/cms/core/handler/ArticleDataParserHandler.java b/src/main/java/com/xcong/farmer/cms/core/handler/ArticleDataParserHandler.java index b5b5b7f..1beb535 100644 --- a/src/main/java/com/xcong/farmer/cms/core/handler/ArticleDataParserHandler.java +++ b/src/main/java/com/xcong/farmer/cms/core/handler/ArticleDataParserHandler.java @@ -2,11 +2,15 @@ import com.alibaba.fastjson.JSONObject; +import com.xcong.farmer.cms.configurations.properties.CmsProperties; +import com.xcong.farmer.cms.conversion.ArticleConversion; import com.xcong.farmer.cms.core.node.AttrNode; +import com.xcong.farmer.cms.core.tag.data.ArticleData; import com.xcong.farmer.cms.core.tag.model.Article; import com.xcong.farmer.cms.modules.system.entity.ArticleEntity; import com.xcong.farmer.cms.modules.system.mapper.ArticleMapper; import com.xcong.farmer.cms.utils.SpringContextHolder; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -17,25 +21,48 @@ * @author wzy * @date 2022-06-24 **/ +@Slf4j public class ArticleDataParserHandler implements DataParserHandler { private final ArticleMapper articleMapper = SpringContextHolder.getBean(ArticleMapper.class); - @Override public void dataParser(AttrNode node) { - System.out.println("ArticleDataParserHandler"); + log.info("######文章解析########"); + String baseUrl = (String) node.getSystemDataValue("baseUrl"); + Article tag = (Article) node.getParam(); ArticleEntity data = articleMapper.selectById(tag.getId()); - ArticleEntity prev = articleMapper.selectPrevOrNextArticle(data.getId(), data.getColumnId(), 1); - ArticleEntity next = articleMapper.selectPrevOrNextArticle(data.getId(), data.getColumnId(), 2); + ArticleData articleData = ArticleConversion.INSTANCE.entityToData(data); - Map map = JSONObject.parseObject(JSONObject.toJSONString(data), Map.class); -// Map<String, Object> map = new HashMap<>(); -// map.put("title", "这是单个文章标题"); + ArticleEntity prevEntity = articleMapper.selectPrevOrNextArticle(data.getId(), data.getColumnId(), 1); + if (prevEntity != null) { + ArticleData prev = ArticleConversion.INSTANCE.entityToData(prevEntity); + if (prevEntity.getType() == 2) { + prev.setUrl(prevEntity.getArticleUrl()); + } else { + prev.setUrl(baseUrl + prevEntity.getPath() + "/" + prevEntity.getId() + ".html"); + } - map.put("prev", prev); - map.put("next", next); - node.setData(map); + articleData.setPrev(prev); + } else { + articleData.setPrev(new ArticleData()); + } + + ArticleEntity nextEntity = articleMapper.selectPrevOrNextArticle(data.getId(), data.getColumnId(), 2); + if (nextEntity != null) { + ArticleData next = ArticleConversion.INSTANCE.entityToData(nextEntity); + if (nextEntity.getType() == 2) { + next.setUrl(nextEntity.getArticleUrl()); + } else { + next.setUrl(baseUrl + nextEntity.getPath() + "/" + nextEntity.getId() + ".html"); + } + + articleData.setNext(next); + } else { + articleData.setNext(new ArticleData()); + } + + node.setData(articleData); } } diff --git a/src/main/java/com/xcong/farmer/cms/core/handler/ArticlesDataParserHandler.java b/src/main/java/com/xcong/farmer/cms/core/handler/ArticlesDataParserHandler.java index 9135964..df2f1e9 100644 --- a/src/main/java/com/xcong/farmer/cms/core/handler/ArticlesDataParserHandler.java +++ b/src/main/java/com/xcong/farmer/cms/core/handler/ArticlesDataParserHandler.java @@ -27,20 +27,19 @@ public class ArticlesDataParserHandler implements DataParserHandler { private ArticleMapper articleMapper = SpringContextHolder.getBean(ArticleMapper.class); - private CmsProperties cmsProperties = SpringContextHolder.getBean(CmsProperties.class); @Override public void dataParser(AttrNode node) { log.info("文章列表解析"); Long companyId = (Long) node.getSystemDataValue("companyId"); - Articles param = (Articles) node.getParam(); + String companyCode = (String) node.getSystemDataValue("companyCode"); + String baseUrl = (String) node.getSystemDataValue("baseUrl"); + Articles param = (Articles) node.getParam(); ArticleEntity article = new ArticleEntity(); Page<ArticleEntity> page = new Page<>(Integer.parseInt(param.getPage()), Integer.parseInt(param.getLimit())); if (StrUtil.isEmpty(param.getColId())) { - article.setColumnCode(param.getCode()); - } else { List<String> colIdsStr = StrUtil.split(param.getColId(), ','); List<Long> colIds = new ArrayList<>(); @@ -51,24 +50,31 @@ article.setColumnIds(colIds); } article.setCompanyId(companyId); + + if (StrUtil.isNotBlank(param.getType())) { + if ("hot".equals(param.getType())) { + article.setIsTop(1); + } + } + IPage<ArticleEntity> listPage = articleMapper.selectArticleInPage(page, article); List<ArticleData> list = new ArrayList<>(); for (ArticleEntity record : listPage.getRecords()) { - ArticleData articleData = entityToData(record); + ArticleData articleData = entityToData(record, baseUrl); list.add(articleData); } node.setData(list); } - public ArticleData entityToData(ArticleEntity article) { + public ArticleData entityToData(ArticleEntity article, String baseUrl) { ArticleData articleData = ArticleConversion.INSTANCE.entityToData(article); if (article.getType() == 2) { articleData.setUrl(article.getArticleUrl()); } else { - articleData.setUrl(cmsProperties.getBaseUrl() + article.getPath() + "/" + article.getId() + ".html"); + articleData.setUrl(baseUrl + article.getPath() + "/" + article.getId() + ".html"); } diff --git a/src/main/java/com/xcong/farmer/cms/core/handler/ChildDataParserHandler.java b/src/main/java/com/xcong/farmer/cms/core/handler/ChildDataParserHandler.java index 94a06e2..7e27891 100644 --- a/src/main/java/com/xcong/farmer/cms/core/handler/ChildDataParserHandler.java +++ b/src/main/java/com/xcong/farmer/cms/core/handler/ChildDataParserHandler.java @@ -25,6 +25,9 @@ String obj = param.getObj(); Object o = parserData.get(obj); + if (o == null) { + return; + } Object state = JSONObject.parseObject(JSONObject.toJSONString(o)).get("state"); List children = JSONObject.parseObject(JSONObject.toJSONString(state)).getObject("children", List.class); attrNode.setData(children); diff --git a/src/main/java/com/xcong/farmer/cms/core/handler/ColumnDataParserHandler.java b/src/main/java/com/xcong/farmer/cms/core/handler/ColumnDataParserHandler.java index 99705b7..2a2643f 100644 --- a/src/main/java/com/xcong/farmer/cms/core/handler/ColumnDataParserHandler.java +++ b/src/main/java/com/xcong/farmer/cms/core/handler/ColumnDataParserHandler.java @@ -26,12 +26,13 @@ private ColumnMapper columnMapper = SpringContextHolder.getBean(ColumnMapper.class); private ArticleMapper articleMapper = SpringContextHolder.getBean(ArticleMapper.class); - private CmsProperties cmsProperties = SpringContextHolder.getBean(CmsProperties.class); + private String baseUrl = ""; @Override public void dataParser(AttrNode attrNode) { log.info("栏目解析"); Long companyId = (Long) attrNode.getSystemDataValue("companyId"); + baseUrl = (String) attrNode.getSystemDataValue("baseUrl"); Column param = (Column) attrNode.getParam(); @@ -42,7 +43,7 @@ } ColumnData columnData = columnToData(columnEntity); if (columnEntity.getParentId() == 0L) { - List<ColumnEntity> child = columnMapper.selectColumnByParentId(columnEntity.getId(), companyId); + List<ColumnEntity> child = columnMapper.selectColumnByParentId(columnEntity.getId(), companyId, 1); if (CollUtil.isNotEmpty(child)) { List<ColumnData> list = new ArrayList<>(); for (ColumnEntity entity : child) { @@ -59,14 +60,14 @@ public ColumnData columnToData(ColumnEntity column) { ColumnData columnData = ColumnConversion.INSTANCE.entityToData(column); - columnData.setUrl(cmsProperties.getBaseUrl() + column.getPath()); + columnData.setUrl(baseUrl + column.getPath()); if (column.getType() == 2) { if (column.getTargetType() == 1) { ArticleEntity article = this.articleMapper.selectArticleById(Long.parseLong(column.getTargetUrl())); - columnData.setUrl(cmsProperties.getBaseUrl() + article.getPath() + "/" + article.getId() + ".html"); + columnData.setUrl(baseUrl + article.getPath() + "/" + article.getId() + ".html"); } else if (column.getTargetType() == 2) { ColumnEntity columnEntity = this.columnMapper.selectByCodeAndCompanyId(column.getTargetUrl(), column.getCompanyId()); - columnData.setUrl(cmsProperties.getBaseUrl() + columnEntity.getPath()); + columnData.setUrl(baseUrl + columnEntity.getPath()); } else { columnData.setUrl(column.getTargetUrl()); } diff --git a/src/main/java/com/xcong/farmer/cms/core/handler/NavDataParserHandler.java b/src/main/java/com/xcong/farmer/cms/core/handler/NavDataParserHandler.java index b50a231..fbb19e3 100644 --- a/src/main/java/com/xcong/farmer/cms/core/handler/NavDataParserHandler.java +++ b/src/main/java/com/xcong/farmer/cms/core/handler/NavDataParserHandler.java @@ -28,14 +28,15 @@ private ColumnMapper columnMapper = SpringContextHolder.getBean(ColumnMapper.class); private ArticleMapper articleMapper = SpringContextHolder.getBean(ArticleMapper.class); - private CmsProperties cmsProperties = SpringContextHolder.getBean(CmsProperties.class); + private String baseUrl = ""; @Override public void dataParser(AttrNode node) { log.info("导航栏解析"); Long companyId = (Long) node.getSystemDataValue("companyId"); + baseUrl = (String) node.getSystemDataValue("baseUrl"); - List<ColumnEntity> columns = columnMapper.selectColumnByParentId(0L, companyId); + List<ColumnEntity> columns = columnMapper.selectColumnByParentId(0L, companyId, 1); if (CollUtil.isEmpty(columns)) { return; @@ -45,14 +46,14 @@ NavData index = new NavData(); index.setTitle("首页"); - index.setUrl(cmsProperties.getBaseUrl()); + index.setUrl(baseUrl); index.setCode("index"); list.add(index); for (ColumnEntity column : columns) { NavData navData = columnToNav(column); - List<ColumnEntity> child = columnMapper.selectColumnByParentId(column.getId(), companyId); + List<ColumnEntity> child = columnMapper.selectColumnByParentId(column.getId(), companyId, 1); if (CollUtil.isNotEmpty(child)) { List<NavData> childNavData = columnsToNavs(child); navData.setChildren(childNavData); @@ -75,14 +76,14 @@ public NavData columnToNav(ColumnEntity column) { NavData navData = ColumnConversion.INSTANCE.columnToNav(column); - navData.setUrl(cmsProperties.getBaseUrl() + column.getPath()); + navData.setUrl(baseUrl + column.getPath()); if (column.getType() == 2) { if (column.getTargetType() == 1) { ArticleEntity article = this.articleMapper.selectArticleById(Long.parseLong(column.getTargetUrl())); - navData.setUrl(cmsProperties.getBaseUrl() + article.getPath() + "/" + article.getId() + ".html"); + navData.setUrl(baseUrl + article.getPath() + "/" + article.getId() + ".html"); } else if (column.getTargetType() == 2) { ColumnEntity columnEntity = this.columnMapper.selectByCodeAndCompanyId(column.getTargetUrl(), column.getCompanyId()); - navData.setUrl(cmsProperties.getBaseUrl() + columnEntity.getPath()); + navData.setUrl(baseUrl + columnEntity.getPath()); } else { navData.setUrl(column.getTargetUrl()); } diff --git a/src/main/java/com/xcong/farmer/cms/core/handler/PageDataParserHandler.java b/src/main/java/com/xcong/farmer/cms/core/handler/PageDataParserHandler.java index 4b97d98..e49892f 100644 --- a/src/main/java/com/xcong/farmer/cms/core/handler/PageDataParserHandler.java +++ b/src/main/java/com/xcong/farmer/cms/core/handler/PageDataParserHandler.java @@ -27,57 +27,59 @@ public class PageDataParserHandler implements DataParserHandler { private ArticleMapper articleMapper = SpringContextHolder.getBean(ArticleMapper.class); - private CmsProperties cmsProperties = SpringContextHolder.getBean(CmsProperties.class); @Override public void dataParser(AttrNode attrNode) { log.info("分页解析"); - Template.HAS_PAGING = true; + synchronized (this) { + Template.HAS_PAGING = true; + String baseUrl = (String) attrNode.getSystemDataValue("baseUrl"); - Long companyId = (Long) attrNode.getSystemDataValue("companyId"); - Pagination param = (Pagination) attrNode.getParam(); + Long companyId = (Long) attrNode.getSystemDataValue("companyId"); + Pagination param = (Pagination) attrNode.getParam(); - Page<ArticleEntity> page = new Page<>(Integer.parseInt(param.getPage()), Integer.parseInt(param.getLimit())); - ArticleEntity article = new ArticleEntity(); - article.setColumnCode(param.getCode()); - article.setCompanyId(companyId); - IPage<ArticleEntity> pageList = articleMapper.selectArticleInPage(page, article); + Page<ArticleEntity> page = new Page<>(Integer.parseInt(param.getPage()), Integer.parseInt(param.getLimit())); + ArticleEntity article = new ArticleEntity(); + article.setColumnCode(param.getCode()); + article.setCompanyId(companyId); + IPage<ArticleEntity> pageList = articleMapper.selectArticleInPage(page, article); - PageData pageData = new PageData(); - pageData.setTotalPage((int) pageList.getPages()); - pageData.setIndex(Integer.parseInt(param.getPage())); - pageData.setTotalCnt((int) pageList.getSize()); + PageData pageData = new PageData(); + pageData.setTotalPage((int) pageList.getPages()); + pageData.setIndex(Integer.parseInt(param.getPage())); + pageData.setTotalCnt((int) pageList.getSize()); - if (CollUtil.isNotEmpty(pageList.getRecords())) { - String path = cmsProperties.getBaseUrl() + "/" + param.getCode(); - String filename = "index_{}.html"; + if (CollUtil.isNotEmpty(pageList.getRecords())) { + String path = baseUrl + "/" + param.getCode(); + String filename = "index_{}.html"; - List<PageChildData> list = new ArrayList<>(); - int pageNo = Integer.parseInt(param.getPage()); + List<PageChildData> list = new ArrayList<>(); + int pageNo = Integer.parseInt(param.getPage()); - // 计算出页面显示分页的最大和最小值 - int[] startAndEnd = pageStartAndEnd(pageNo, (int) pageList.getPages(), Integer.parseInt(param.getSize())); - for (int i = startAndEnd[0]; i <= startAndEnd[1] ; i++) { - PageChildData child = new PageChildData(); - child.setIndex(i); - if (pageNo == 1) { - child.setPath(path + "/index.html"); - } else { - child.setPath(path + "/" + StrUtil.format(filename, i)); + // 计算出页面显示分页的最大和最小值 + int[] startAndEnd = pageStartAndEnd(pageNo, (int) pageList.getPages(), Integer.parseInt(param.getSize())); + for (int i = startAndEnd[0]; i <= startAndEnd[1]; i++) { + PageChildData child = new PageChildData(); + child.setIndex(i); + if (pageNo == 1) { + child.setPath(path + "/index.html"); + } else { + child.setPath(path + "/" + StrUtil.format(filename, i)); + } + list.add(child); } - list.add(child); + + pageData.setChildren(list); + } else { + pageData.setNext("javascript:void(0)"); + pageData.setPrev("javascript:void(0)"); } - pageData.setChildren(list); - } else { - pageData.setNext("javascript:void(0)"); - pageData.setPrev("javascript:void(0)"); - } + if (Integer.parseInt(param.getPage()) >= pageList.getPages()) { + Template.HAS_PAGING = false; + } - if (Integer.parseInt(param.getPage()) == pageList.getPages()) { - Template.HAS_PAGING = false; + attrNode.setData(pageData); } - - attrNode.setData(pageData); } /** diff --git a/src/main/java/com/xcong/farmer/cms/core/node/AttrNode.java b/src/main/java/com/xcong/farmer/cms/core/node/AttrNode.java index c85e75e..436b082 100644 --- a/src/main/java/com/xcong/farmer/cms/core/node/AttrNode.java +++ b/src/main/java/com/xcong/farmer/cms/core/node/AttrNode.java @@ -2,20 +2,28 @@ import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONObject; import com.xcong.farmer.cms.core.handler.DataParserHandler; import com.xcong.farmer.cms.core.tag.TagsEnum; +import com.xcong.farmer.cms.core.tag.model.TimeTag; import com.xcong.farmer.cms.core.template.Configuration; import com.xcong.farmer.cms.core.template.TemplateConfiguration; +import com.xcong.farmer.cms.utils.GroovySingleton; import groovy.lang.Binding; import groovy.lang.GroovyShell; +import groovy.lang.Script; import org.apache.commons.text.StringSubstitutor; import org.jsoup.nodes.Attribute; import org.jsoup.nodes.Attributes; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; +import java.time.format.DateTimeFormatter; +import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.regex.Matcher; @@ -72,32 +80,7 @@ return false; } - public void staticPath() { - // 设置img的链接访问 - if ("img".equals(this.element.tagName())) { - String src = this.element.attr("src"); - if (StrUtil.isNotBlank(STATIC_URL)) { - this.element.attr("src", STATIC_URL + src); - } - } - - if ("link".equals(this.element.tagName())) { - String src = this.element.attr("href"); - if (StrUtil.isNotBlank(STATIC_URL)) { - this.element.attr("href", STATIC_URL + src); - } - } - - if ("script".equals(this.element.tagName())) { - String src = this.element.attr("src"); - if (StrUtil.isNotBlank(STATIC_URL)) { - this.element.attr("src", STATIC_URL + src); - } - } - } - public void parser() { - staticPath(); // 判断是否为最小节点,如果是且没有特殊标签,则跳过清空 if (!isNeedEmpty()) { return; @@ -145,6 +128,7 @@ } } + runDataInject(); } @@ -158,15 +142,17 @@ String key = attribute.getKey().replaceAll("\\$", ""); String value = attribute.getValue(); + String result = attrValueFormat(value); // @{} 为java表达式; ${}为需要注入的数据项 if (value.startsWith("@{")) { - value = value.replaceAll("\\@\\{", "").replaceAll("}", ""); + value = result.replaceAll("\\@\\{", "").replaceAll("}", ""); Binding binding = new Binding(); for (Map.Entry<String, Object> entry : this.parserData.entrySet()) { String fieldKey = entry.getKey(); Map<String, Object> data = (Map<String, Object>) entry.getValue(); - binding.setProperty(fieldKey, data); - binding.setVariable(fieldKey + ".index", 1); + binding.setProperty(fieldKey, data.get("state")); + int index = (int) data.get("index"); + binding.setVariable( "index", index); } GroovyShell shell = new GroovyShell(binding); String evaluate = (String) shell.evaluate(value); @@ -174,9 +160,14 @@ this.element.removeAttr("class"); this.element.attr("class", evaluate); } else if (value.contains( "${")) { - String result = attrValueFormat(value); if ("text".equals(key)) { this.element.text(result); + } else if ("html".equals(key)) { + this.element.html(result); + } else if ("time".equals(key)) { + TimeTag time = parserTag(result, TimeTag.class); + String timeStr = DateUtil.format(DateUtil.parse(time.getDate(), DatePattern.NORM_DATETIME_PATTERN), time.getFormat()); + this.element.text(timeStr); } else { this.element.attr(key, result); } @@ -191,24 +182,8 @@ Map<String, String> targetData = new HashMap<>(); while (matcher.find()) { String group = matcher.group(); -// String splitValue = group.replaceAll("\\$\\{", "").replaceAll("}", ""); -// String[] split = splitValue.split("\\."); -// if (split.length == 0) { -// continue; -// } -// -// for (Map.Entry<String, Object> entry : this.parserData.entrySet()) { -// String fieldKey = entry.getKey(); -// Map<String, Object> data = (Map<String, Object>) entry.getValue(); -// JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(data.get("state"))); -// -// for (Map.Entry<String, Object> map : jsonObject.entrySet()) { -// if (map.getValue() instanceof String) { -// targetData.put(fieldKey + "." + map.getKey(), (String) map.getValue()); -// } -// } -// } + GroovyShell groovyShell = GroovySingleton.getSingleton(); Binding binding = new Binding(); for (Map.Entry<String, Object> entry : this.parserData.entrySet()) { String fieldKey = entry.getKey(); @@ -220,12 +195,20 @@ binding.setProperty("system", systemData); } - GroovyShell shell = new GroovyShell(binding); - Object evaluate = shell.evaluate(group); - if (evaluate == null) { - targetData.put(group, ""); - } else { - targetData.put(group, evaluate.toString()); + synchronized (this) { + Script parse = groovyShell.parse(group); + parse.setBinding(binding); + Object evaluate = parse.run(); + if (evaluate instanceof Date) { + evaluate = DateUtil.format((Date) evaluate, DatePattern.NORM_DATETIME_PATTERN); + } + + if (evaluate == null) { + targetData.put(group, ""); + } else { + targetData.put(group, evaluate.toString()); + } + groovyShell.getClassLoader().clearCache(); } } diff --git a/src/main/java/com/xcong/farmer/cms/core/node/Template.java b/src/main/java/com/xcong/farmer/cms/core/node/Template.java index e1ef6e0..ab9b54e 100644 --- a/src/main/java/com/xcong/farmer/cms/core/node/Template.java +++ b/src/main/java/com/xcong/farmer/cms/core/node/Template.java @@ -31,7 +31,7 @@ // 页面中包含的标签 public static Set<String> TAGS; - public static boolean HAS_PAGING = false; + public volatile static boolean HAS_PAGING = false; public Template() { TAGS = new HashSet<>(); @@ -70,8 +70,20 @@ if (!new Integer(1).equals(page)) { this.name = name + "_" + page; } - } else { - + } else if ("search".equals(templateType)){ + Object templateName = system.get("templateName"); + if (templateName != null) { + this.name = String.valueOf(templateName); + } else { + this.name = "search"; + } + } else if ("message".equals(templateType)) { + Object templateName = system.get("templateName"); + if (templateName != null) { + this.name = String.valueOf(templateName); + } else { + this.name = "message"; + } } } @@ -97,7 +109,7 @@ sb.append(partNode.getHtml()); } document = Jsoup.parse(sb.toString()); - String outPath = path(outputPath); + String outPath = path(outputPath) + system.get("companyCode"); String html = document.html(); try { @@ -107,7 +119,7 @@ file.mkdirs(); } - FileOutputStream outputStream = new FileOutputStream(path +this.name + suffix); + FileOutputStream outputStream = new FileOutputStream(path + this.name + suffix); outputStream.write(html.getBytes()); outputStream.close(); } catch (IOException e) { diff --git a/src/main/java/com/xcong/farmer/cms/core/tag/data/ArticleData.java b/src/main/java/com/xcong/farmer/cms/core/tag/data/ArticleData.java index d0d345d..37f9d8f 100644 --- a/src/main/java/com/xcong/farmer/cms/core/tag/data/ArticleData.java +++ b/src/main/java/com/xcong/farmer/cms/core/tag/data/ArticleData.java @@ -28,11 +28,43 @@ private String views; + private String company; + private String filePath; private List<String> images; private String url; + + private String description; + + private ArticleData next; + + private ArticleData prev; + + public String getCompany() { + return company; + } + + public void setCompany(String company) { + this.company = company; + } + + public ArticleData getNext() { + return next; + } + + public void setNext(ArticleData next) { + this.next = next; + } + + public ArticleData getPrev() { + return prev; + } + + public void setPrev(ArticleData prev) { + this.prev = prev; + } public String getFilePath() { return filePath; @@ -121,4 +153,12 @@ public void setViews(String views) { this.views = views; } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } } diff --git a/src/main/java/com/xcong/farmer/cms/core/tag/model/Articles.java b/src/main/java/com/xcong/farmer/cms/core/tag/model/Articles.java index 509e369..d7cc322 100644 --- a/src/main/java/com/xcong/farmer/cms/core/tag/model/Articles.java +++ b/src/main/java/com/xcong/farmer/cms/core/tag/model/Articles.java @@ -28,6 +28,11 @@ private String field; + /** + * hot-热点 + */ + private String type; + public String getColId() { return colId; } @@ -67,4 +72,12 @@ public void setField(String field) { this.field = field; } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } } diff --git a/src/main/java/com/xcong/farmer/cms/core/tag/model/TimeTag.java b/src/main/java/com/xcong/farmer/cms/core/tag/model/TimeTag.java new file mode 100644 index 0000000..069d80f --- /dev/null +++ b/src/main/java/com/xcong/farmer/cms/core/tag/model/TimeTag.java @@ -0,0 +1,28 @@ +package com.xcong.farmer.cms.core.tag.model; + +/** + * @author wzy + * @date 2022-07-09 + **/ +public class TimeTag { + + private String date; + + private String format; + + public String getDate() { + return date; + } + + public void setDate(String date) { + this.date = date; + } + + public String getFormat() { + return format; + } + + public void setFormat(String format) { + this.format = format; + } +} diff --git a/src/main/java/com/xcong/farmer/cms/core/template/Configuration.java b/src/main/java/com/xcong/farmer/cms/core/template/Configuration.java index 766240b..ade1636 100644 --- a/src/main/java/com/xcong/farmer/cms/core/template/Configuration.java +++ b/src/main/java/com/xcong/farmer/cms/core/template/Configuration.java @@ -6,7 +6,7 @@ public abstract class Configuration { - protected static String BASE_URL; + protected static String API_URL; protected static String STATIC_URL; protected static String staticPath; protected static String templatePath; @@ -15,11 +15,11 @@ public Configuration() { } - public Configuration(String templatePath, String staticPath, String outputPath, String baseUrl, String staticUrl) { + public Configuration(String templatePath, String staticPath, String outputPath, String apiUrl, String staticUrl) { Configuration.staticPath = staticPath; Configuration.templatePath = templatePath; Configuration.outputPath = outputPath; - Configuration.BASE_URL = baseUrl; + Configuration.API_URL = apiUrl; Configuration.STATIC_URL = staticUrl; } diff --git a/src/main/java/com/xcong/farmer/cms/core/template/TemplateConfiguration.java b/src/main/java/com/xcong/farmer/cms/core/template/TemplateConfiguration.java index 7dbc81c..22ac0dc 100644 --- a/src/main/java/com/xcong/farmer/cms/core/template/TemplateConfiguration.java +++ b/src/main/java/com/xcong/farmer/cms/core/template/TemplateConfiguration.java @@ -1,7 +1,9 @@ package com.xcong.farmer.cms.core.template; +import com.xcong.farmer.cms.common.utils.FileUtils; import com.xcong.farmer.cms.core.node.PartNode; import com.xcong.farmer.cms.core.node.Template; +import lombok.extern.slf4j.Slf4j; import org.jsoup.nodes.Document; import java.io.File; @@ -14,6 +16,7 @@ * @author wzy * @date 2022-07-01 **/ +@Slf4j public class TemplateConfiguration extends Configuration{ private TemplateLoader templateLoader; @@ -30,9 +33,13 @@ if (this.templateLoader == null) { throw new RuntimeException("TemplateLoader do not able to be null"); } + map.put("apiUrl", API_URL); + String companyCode = (String) map.get("companyCode"); + + log.info("解析开始执行--#类型:{}#--#模板名称:{}#--#ID:{}#", map.get("templateType"), templateName, map.get("id")); this.templateLoader.data(map); - Template template = template(templateName); + Template template = template(FileUtils.path(templatePath, companyCode), templateName); template.output(outputPath); // 判断是否有分页,有则执行。从第二页开始 @@ -40,13 +47,13 @@ while(Template.HAS_PAGING) { map.put("page", i); this.templateLoader.data(map); - Template pageTemplate = template(templateName); + Template pageTemplate = template(FileUtils.path(templatePath, companyCode), templateName); pageTemplate.output(outputPath); i++; } } - public Template template(String templateName) { + public Template template(String templatePath, String templateName) { return template(new File(path(templatePath) + templateName)); } diff --git a/src/main/java/com/xcong/farmer/cms/modules/core/controller/CmsCoreController.java b/src/main/java/com/xcong/farmer/cms/modules/core/controller/CmsCoreController.java index 0212677..f65150f 100644 --- a/src/main/java/com/xcong/farmer/cms/modules/core/controller/CmsCoreController.java +++ b/src/main/java/com/xcong/farmer/cms/modules/core/controller/CmsCoreController.java @@ -4,6 +4,7 @@ import com.xcong.farmer.cms.modules.core.service.ICmsCoreService; import com.xcong.farmer.cms.modules.system.service.IArticleService; import com.xcong.farmer.cms.modules.system.service.IReleaseService; +import com.xcong.farmer.cms.modules.system.util.LoginUserUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; @@ -17,7 +18,7 @@ **/ @Slf4j @RestController -@RequestMapping(value = "/cms") +@RequestMapping(value = "/api") @Api(value = "CmsCoreController", tags = "CMS核心类") public class CmsCoreController { @@ -27,21 +28,26 @@ @ApiOperation(value = "发布文章", notes = "发布文章") @PostMapping(value = "releaseArticle/{id}") public Result releaseArticle(@PathVariable("id") Long id) { - releaseService.releaseArticle(id); + Long companyId = LoginUserUtil.getCompanyId(); + releaseService.releaseArticle(id, companyId); return Result.ok("success"); } @ApiOperation(value = "发布栏目", notes = "发布栏目") @PostMapping(value = "releaseColumn/{type}/{id}") public Result releaseColumn(@PathVariable("id") Long id, @PathVariable("type") Integer type) { - releaseService.releaseColumn(id, type); + Long companyId = LoginUserUtil.getCompanyId(); + releaseService.releaseColumn(id, type, companyId); return Result.ok("success"); } @ApiOperation(value = "发布首页", notes = "发布首页") @PostMapping(value = "/releaseIndex") public Result releaseIndex() { - releaseService.releaseIndex(); + Long companyId = LoginUserUtil.getCompanyId(); + releaseService.releaseIndex(companyId, true); return Result.ok("success"); } + + } diff --git a/src/main/java/com/xcong/farmer/cms/modules/core/service/ICmsCoreService.java b/src/main/java/com/xcong/farmer/cms/modules/core/service/ICmsCoreService.java index 08b0e1e..9eceba7 100644 --- a/src/main/java/com/xcong/farmer/cms/modules/core/service/ICmsCoreService.java +++ b/src/main/java/com/xcong/farmer/cms/modules/core/service/ICmsCoreService.java @@ -38,4 +38,6 @@ void indexProcess(Map<String, Object> map, String templateName); + void process(Map<String, Object> map, String templateType, String templateName); + } diff --git a/src/main/java/com/xcong/farmer/cms/modules/core/service/impl/CmsCoreServiceImpl.java b/src/main/java/com/xcong/farmer/cms/modules/core/service/impl/CmsCoreServiceImpl.java index a405ee4..21dd11e 100644 --- a/src/main/java/com/xcong/farmer/cms/modules/core/service/impl/CmsCoreServiceImpl.java +++ b/src/main/java/com/xcong/farmer/cms/modules/core/service/impl/CmsCoreServiceImpl.java @@ -4,6 +4,7 @@ import cn.hutool.core.util.StrUtil; import com.xcong.farmer.cms.core.template.TemplateConfiguration; import com.xcong.farmer.cms.modules.core.service.ICmsCoreService; +import com.xcong.farmer.cms.modules.system.mapper.WebSetMapper; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -28,17 +29,26 @@ @Autowired private TemplateConfiguration cfg; + @Autowired + private WebSetMapper webSetMapper; + @Override public void articleProcess(Map<String, Object> data, String templateName, String templatePath) { data.put("templateType", "article"); data.put("templatePath", templatePath); data.put("templateName", data.get("id")); + globalData(data); if (StrUtil.isEmpty(templateName)) { templateName = "defualt.article.html"; } - cfg.process(data, templateName); + try { + cfg.process(data, templateName); + } catch (Exception e) { + e.printStackTrace(); + log.error("发布文章出错", e); + } } @Override @@ -69,19 +79,60 @@ public void columnProcess(Map<String, Object> data, String templateName) { data.put("templateType", "column"); data.put("page", 1); + globalData(data); if (StrUtil.isEmpty(templateName)) { templateName = "defualt.list.html"; } - cfg.process(data, templateName); + try { + cfg.process(data, templateName); + } catch (Exception e) { + e.printStackTrace(); + log.error("发布栏目错误", e); + } } @Override public void indexProcess(@NotNull Map<String, Object> data, String templateName) { + data.put("templateType", "index"); + globalData(data); if (StrUtil.isEmpty(templateName)) { templateName = "index.html"; } - cfg.process(data, templateName); + try { + cfg.process(data, templateName); + } catch (Exception e) { + e.printStackTrace(); + log.error("发布首页错误", e); + } + } + + @Override + public void process(Map<String, Object> data, String templateType, String templateName) { + data.put("templateType", templateType); + globalData(data); + + if ("search".equals(templateType) && StrUtil.isBlank(templateName)) { + templateName = "search.html"; + } + + if ("message".equals(templateType) && StrUtil.isBlank(templateName)) { + templateName = "message.html"; + } + + try { + cfg.process(data, templateName); + } catch (Exception e) { + e.printStackTrace(); + log.error("发布错误", e); + } + } + + private void globalData(Map<String, Object> data) { + Long companyId = (Long) data.get("companyId"); + Map<String, String> globalSetting = webSetMapper.selectSiteGlobalSetting(companyId); + + data.putAll(globalSetting); } } diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/controller/AdminColumnController.java b/src/main/java/com/xcong/farmer/cms/modules/system/controller/AdminColumnController.java index 2ae35b5..c90acb6 100644 --- a/src/main/java/com/xcong/farmer/cms/modules/system/controller/AdminColumnController.java +++ b/src/main/java/com/xcong/farmer/cms/modules/system/controller/AdminColumnController.java @@ -4,6 +4,7 @@ import com.xcong.farmer.cms.modules.system.dto.*; import com.xcong.farmer.cms.modules.system.service.IColumnService; import com.xcong.farmer.cms.modules.system.service.IReleaseService; +import com.xcong.farmer.cms.modules.system.util.LoginUserUtil; import com.xcong.farmer.cms.modules.system.vo.AdminColumnVo; import com.xcong.farmer.cms.modules.system.vo.AdminSeeColumnInfoVo; import com.xcong.farmer.cms.modules.system.vo.WebColumnVo; @@ -76,7 +77,8 @@ @ApiOperation(value = "发布栏目", notes = "发布栏目") @PostMapping(value = "/release") public Result release(@RequestBody @Valid ReleaseColumnDto releaseColumnDto) { - releaseService.releaseColumn(releaseColumnDto.getId(), releaseColumnDto.getType()); + Long companyId = LoginUserUtil.getCompanyId(); + releaseService.releaseColumn(releaseColumnDto.getId(), releaseColumnDto.getType(), companyId); return Result.ok("发布成功"); } diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/controller/AdminWebSetController.java b/src/main/java/com/xcong/farmer/cms/modules/system/controller/AdminWebSetController.java index 22e733e..9016746 100644 --- a/src/main/java/com/xcong/farmer/cms/modules/system/controller/AdminWebSetController.java +++ b/src/main/java/com/xcong/farmer/cms/modules/system/controller/AdminWebSetController.java @@ -1,10 +1,15 @@ package com.xcong.farmer.cms.modules.system.controller; import com.xcong.farmer.cms.common.response.Result; -import com.xcong.farmer.cms.modules.system.dto.AdminUpdateWebSetDto; -import com.xcong.farmer.cms.modules.system.service.IWebSetService; +import com.xcong.farmer.cms.modules.system.dto.SetWebSettingDto; +import com.xcong.farmer.cms.modules.system.service.IReleaseService; +import com.xcong.farmer.cms.modules.system.service.IWebSettingService; +import com.xcong.farmer.cms.modules.system.util.LoginUserUtil; +import com.xcong.farmer.cms.modules.system.vo.AdminSeeWebSetInfoVo; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiResponse; +import io.swagger.annotations.ApiResponses; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; @@ -18,17 +23,31 @@ public class AdminWebSetController { @Resource - private IWebSetService iWebSetService; + private IWebSettingService iWebSetService; + + @Resource + private IReleaseService releaseService; @ApiOperation(value = "查看网页设置", notes = "查看网页设置") + @ApiResponses({ + @ApiResponse(code = 200, message = "success", response = AdminSeeWebSetInfoVo.class) + }) @GetMapping(value = "/seeWebSetInfo") public Result seeWebSetInfo() { - return iWebSetService.seeWebSetInfo(); + return iWebSetService.getWebSetting(); } @ApiOperation(value = "更新网页设置", notes = "更新网页设置") @PostMapping(value = "/updateWebSet") - public Result updateWebSet(@RequestBody @Valid AdminUpdateWebSetDto adminUpdateWebSetDto) { - return iWebSetService.updateWebSet(adminUpdateWebSetDto); + public Result updateWebSet(@RequestBody @Valid SetWebSettingDto setWebSettingDto) { + return iWebSetService.setWebSetting(setWebSettingDto); + } + + @ApiOperation(value = "发布全站", notes = "发布全站") + @PostMapping(value = "/releaseAll") + public Result releaseAll() { + Long companyId = LoginUserUtil.getCompanyId(); + releaseService.releaseAll(companyId); + return Result.ok("发布成功"); } } diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminUpdateWebSetDto.java b/src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminUpdateWebSetDto.java deleted file mode 100644 index d22e9a0..0000000 --- a/src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminUpdateWebSetDto.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.xcong.farmer.cms.modules.system.dto; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotBlank; - -@Data -@ApiModel(value = "AdminUpdateWebSetDto", description = "参数接收类") -public class AdminUpdateWebSetDto { - - @ApiModelProperty(value = "ID") - private Long id; - - @ApiModelProperty(value = "网页标题") - @NotBlank(message = "请输入网页标题") - private String webTitle; - - @ApiModelProperty(value = "网页关键字") - @NotBlank(message = "请输入网页关键字") - private String webKeyword; - - @ApiModelProperty(value = "网页描述") - private String webRemark; - - @ApiModelProperty(value = "网页LOGO") - private String webPic; -} diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/dto/SetWebSettingDto.java b/src/main/java/com/xcong/farmer/cms/modules/system/dto/SetWebSettingDto.java new file mode 100644 index 0000000..e339339 --- /dev/null +++ b/src/main/java/com/xcong/farmer/cms/modules/system/dto/SetWebSettingDto.java @@ -0,0 +1,40 @@ +package com.xcong.farmer.cms.modules.system.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; + +@Data +@ApiModel(value = "AdminUpdateWebSetDto", description = "参数接收类") +public class SetWebSettingDto { + + @ApiModelProperty(value = "ID") + private Long id; + + @ApiModelProperty(value = "网页标题") + @NotBlank(message = "请输入网页标题") + private String title; + + @ApiModelProperty(value = "网页关键字") + private String seoTitle; + + @ApiModelProperty(value = "网页描述") + private String seoDescription; + + @ApiModelProperty(value = "网页描述") + private String seoKeyword; + + @ApiModelProperty(value = "网页LOGO") + private String logoUrl; + + @ApiModelProperty(value = "首页模板") + private String indexTemplate; + + @ApiModelProperty(value = "搜索模板") + private String searchTemplate; + + @ApiModelProperty(value = "在线留言模板") + private String msgTemplate; +} diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/entity/ArticleEntity.java b/src/main/java/com/xcong/farmer/cms/modules/system/entity/ArticleEntity.java index 318d444..70d85ee 100644 --- a/src/main/java/com/xcong/farmer/cms/modules/system/entity/ArticleEntity.java +++ b/src/main/java/com/xcong/farmer/cms/modules/system/entity/ArticleEntity.java @@ -85,6 +85,11 @@ //内容类型 1:文章 2:图片 3:文件 4:音频" private Integer contentType; + /** + * 更新前栏目编码 + */ + private Long beforeColumnId; + @TableField(exist = false) private String columnCode; @@ -103,4 +108,7 @@ @TableField(exist = false) private String timeType; + @TableField(exist = false) + private Integer releaseType; + } diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/entity/ColumnEntity.java b/src/main/java/com/xcong/farmer/cms/modules/system/entity/ColumnEntity.java index 90fa975..f8c87d3 100644 --- a/src/main/java/com/xcong/farmer/cms/modules/system/entity/ColumnEntity.java +++ b/src/main/java/com/xcong/farmer/cms/modules/system/entity/ColumnEntity.java @@ -60,4 +60,19 @@ @TableField(exist = false) private List<Long> ids; + + /** + * 更新前栏目ID + */ + private Long beforeParentId; + + /** + * 更新前栏目编码 + */ + private String beforeColumnCode; + + /** + * 发布状态 1-已发布 2-未发布 + */ + private Integer releaseState; } diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/entity/WebSetEntity.java b/src/main/java/com/xcong/farmer/cms/modules/system/entity/WebSetEntity.java deleted file mode 100644 index 451d831..0000000 --- a/src/main/java/com/xcong/farmer/cms/modules/system/entity/WebSetEntity.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.xcong.farmer.cms.modules.system.entity; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; - -/** - * 网页配置表 - */ -@Data -@TableName("t_web_set") -public class WebSetEntity { - //ID - - @TableId(value = "id",type = IdType.AUTO) - private Long id; - //网页标题 - private String webTitle; - //网页关键字 - private String webKeyword; - //网页描述 - private String webRemark; - //网页LOGO - private String webPic; - //所属ID - private Long companyId; -} diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/entity/WebSettingEntity.java b/src/main/java/com/xcong/farmer/cms/modules/system/entity/WebSettingEntity.java new file mode 100644 index 0000000..631923e --- /dev/null +++ b/src/main/java/com/xcong/farmer/cms/modules/system/entity/WebSettingEntity.java @@ -0,0 +1,67 @@ +package com.xcong.farmer.cms.modules.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +/** + * 网页配置表 + */ +@Data +@TableName("t_web_setting") +public class WebSettingEntity { + //ID + + @TableId(value = "id",type = IdType.AUTO) + private Long id; + + /** + * 网站标题 + */ + private String title; + + /** + * seo标题 + */ + private String seoTitle; + + /** + * seo关键词 + */ + private String seoKeyword; + + /** + * seo描述 + */ + private String seoDescription; + + /** + * logo地址 + */ + private String logoUrl; + + /** + * 首页模板 + */ + private String indexTemplate; + + /** + * 搜索模板 + */ + private String searchTemplate; + + /** + * 在线留言模板 + */ + private String msgTemplate; + + private Long companyId; + + @TableField(exist = false) + private String companyCode; + + @TableField(exist = false) + private String companyUrl; +} diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/mapper/ArticleMapper.java b/src/main/java/com/xcong/farmer/cms/modules/system/mapper/ArticleMapper.java index a5ca4ce..d15896e 100644 --- a/src/main/java/com/xcong/farmer/cms/modules/system/mapper/ArticleMapper.java +++ b/src/main/java/com/xcong/farmer/cms/modules/system/mapper/ArticleMapper.java @@ -27,4 +27,6 @@ IPage<WebArticleVo> selectWebArticleInPage(Page<WebArticleVo> page, @Param("record") ArticleEntity articleEntity); List<Long> selectArticleIdsByColumnId(@Param("columnId") Long columnId, @Param("companyId") Long companyId, @Param("type") Integer type); + + List<ArticleEntity> selectArticleByColumnId(@Param("columnId") Long columnId, @Param("companyId") Long companyId, @Param("type") Integer type); } diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/mapper/ColumnMapper.java b/src/main/java/com/xcong/farmer/cms/modules/system/mapper/ColumnMapper.java index 7c2327d..0ddbb20 100644 --- a/src/main/java/com/xcong/farmer/cms/modules/system/mapper/ColumnMapper.java +++ b/src/main/java/com/xcong/farmer/cms/modules/system/mapper/ColumnMapper.java @@ -18,7 +18,7 @@ ColumnEntity selectByCodeAndCompanyId(@Param("code") String code, @Param("companyId") Long companyId); - List<ColumnEntity> selectColumnByParentId(@Param("parentId") Long parentId, @Param("companyId") Long companyId); + List<ColumnEntity> selectColumnByParentId(@Param("parentId") Long parentId, @Param("companyId") Long companyId, @Param("isNav") Integer isNav); IPage<ColumnEntity> selectColumnInPage(Page<ColumnEntity> page, @Param("record") ColumnEntity column); diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/mapper/WebSetMapper.java b/src/main/java/com/xcong/farmer/cms/modules/system/mapper/WebSetMapper.java index a927324..fa83417 100644 --- a/src/main/java/com/xcong/farmer/cms/modules/system/mapper/WebSetMapper.java +++ b/src/main/java/com/xcong/farmer/cms/modules/system/mapper/WebSetMapper.java @@ -1,7 +1,14 @@ package com.xcong.farmer.cms.modules.system.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.xcong.farmer.cms.modules.system.entity.WebSetEntity; +import com.xcong.farmer.cms.modules.system.entity.WebSettingEntity; +import org.apache.ibatis.annotations.Param; -public interface WebSetMapper extends BaseMapper<WebSetEntity> { +import java.util.Map; + +public interface WebSetMapper extends BaseMapper<WebSettingEntity> { + + WebSettingEntity selectByCompanyId(@Param("companyId") Long companyId); + + Map<String, String> selectSiteGlobalSetting(@Param("companyId") Long companyId); } diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/service/IReleaseService.java b/src/main/java/com/xcong/farmer/cms/modules/system/service/IReleaseService.java index 6d3f296..2af8ed0 100644 --- a/src/main/java/com/xcong/farmer/cms/modules/system/service/IReleaseService.java +++ b/src/main/java/com/xcong/farmer/cms/modules/system/service/IReleaseService.java @@ -3,9 +3,14 @@ public interface IReleaseService { - void releaseArticle(Long id); + void releaseArticle(Long id, Long companyId); - void releaseColumn(Long id, int type); + void releaseColumn(Long id, int type, Long companyId); - void releaseIndex(); + void releaseColumns(int type, Long companyId); + + void releaseIndex(Long companyId, boolean hasSearch); + + void releaseAll(Long companyId); + } diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/service/IWebSetService.java b/src/main/java/com/xcong/farmer/cms/modules/system/service/IWebSetService.java deleted file mode 100644 index cc4e59f..0000000 --- a/src/main/java/com/xcong/farmer/cms/modules/system/service/IWebSetService.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.xcong.farmer.cms.modules.system.service; - -import com.baomidou.mybatisplus.extension.service.IService; -import com.xcong.farmer.cms.common.response.Result; -import com.xcong.farmer.cms.modules.system.dto.AdminUpdateWebSetDto; -import com.xcong.farmer.cms.modules.system.entity.WebSetEntity; - -public interface IWebSetService extends IService<WebSetEntity> { - Result seeWebSetInfo(); - - Result updateWebSet(AdminUpdateWebSetDto adminUpdateWebSetDto); -} diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/service/IWebSettingService.java b/src/main/java/com/xcong/farmer/cms/modules/system/service/IWebSettingService.java new file mode 100644 index 0000000..081cac9 --- /dev/null +++ b/src/main/java/com/xcong/farmer/cms/modules/system/service/IWebSettingService.java @@ -0,0 +1,12 @@ +package com.xcong.farmer.cms.modules.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.xcong.farmer.cms.common.response.Result; +import com.xcong.farmer.cms.modules.system.dto.SetWebSettingDto; +import com.xcong.farmer.cms.modules.system.entity.WebSettingEntity; + +public interface IWebSettingService extends IService<WebSettingEntity> { + Result getWebSetting(); + + Result setWebSetting(SetWebSettingDto adminUpdateWebSetDto); +} diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/ArticleServiceImpl.java b/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/ArticleServiceImpl.java index eaf6ad1..13427ba 100644 --- a/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/ArticleServiceImpl.java +++ b/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/ArticleServiceImpl.java @@ -115,6 +115,9 @@ String atlas = adminAddArticleDto.getAtlas(); articleEntity.setAtlas(atlas); Date releaseTime = adminAddArticleDto.getReleaseTime(); + if (releaseTime == null) { + releaseTime = new Date(); + } articleEntity.setReleaseTime(releaseTime); Integer isTop = adminAddArticleDto.getIsTop(); articleEntity.setIsTop(isTop); @@ -178,7 +181,12 @@ if(ObjectUtil.isEmpty(columnEntity)){ return Result.fail("请选择文章栏目"); } + + if (!articleEntity.getColumnId().equals(columnId) && articleEntity.getBeforeColumnId() == -1) { + articleEntity.setBeforeColumnId(articleEntity.getColumnId()); + } articleEntity.setColumnId(columnId); + Integer visits = adminUpdateArticleDto.getVisits() == null ? 0 : adminUpdateArticleDto.getVisits(); articleEntity.setVisits(visits); String mainDiagram = adminUpdateArticleDto.getMainDiagram(); @@ -199,6 +207,7 @@ articleEntity.setArticleUrl(adminUpdateArticleDto.getArticleUrl()); articleEntity.setType(adminUpdateArticleDto.getType()); articleEntity.setContentType(adminUpdateArticleDto.getContentType()); + String authorBelong = adminUpdateArticleDto.getAuthorBelong(); articleEntity.setAuthorBelong(authorBelong); this.baseMapper.updateById(articleEntity); @@ -229,6 +238,8 @@ } articleEntity.setReleaseStatus(ArticleEntity.RELEASE_STATUS_NO); this.baseMapper.updateById(articleEntity); + + releaseService.releaseColumn(articleEntity.getColumnId(), 2, articleEntity.getCompanyId()); return Result.ok("操作成功"); } @@ -295,6 +306,7 @@ @Override public Result updateStatusOn(Long id) { + Long companyId = LoginUserUtil.getCompanyId(); ArticleEntity articleEntity = this.baseMapper.selectById(id); if(ObjectUtil.isEmpty(articleEntity)){ return Result.fail("文章不存在"); @@ -302,7 +314,7 @@ articleEntity.setReleaseStatus(ArticleEntity.RELEASE_STATUS_YES); this.baseMapper.updateById(articleEntity); - releaseService.releaseArticle(articleEntity.getId()); + releaseService.releaseArticle(articleEntity.getId(), companyId); return Result.ok("操作成功"); } diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/CmsTemplateServiceImpl.java b/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/CmsTemplateServiceImpl.java index 5c20554..4c2a1bc 100644 --- a/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/CmsTemplateServiceImpl.java +++ b/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/CmsTemplateServiceImpl.java @@ -15,17 +15,22 @@ import com.xcong.farmer.cms.modules.system.dto.AdminSaveTemplateInfoDto; import com.xcong.farmer.cms.modules.system.dto.TemplateListDto; import com.xcong.farmer.cms.modules.system.entity.CmsTemplateEntity; +import com.xcong.farmer.cms.modules.system.entity.CompanyEntity; import com.xcong.farmer.cms.modules.system.mapper.CmsTemplateMapper; +import com.xcong.farmer.cms.modules.system.mapper.CompanyMapper; import com.xcong.farmer.cms.modules.system.service.ICmsTemplateService; import com.xcong.farmer.cms.modules.system.util.LoginUserUtil; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; +import org.jsoup.nodes.Element; +import org.jsoup.select.Elements; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import java.io.File; +import java.io.FileOutputStream; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; @@ -43,6 +48,10 @@ @Autowired private CmsProperties properties; + @Autowired + private CompanyMapper companyMapper; + + private List<String> fileSuffix = Arrays.asList(".zip", ".html"); @Override @@ -50,6 +59,11 @@ String templatePath = properties.getTemplatePath(); String staticPath = properties.getStaticPath(); Long companyId = LoginUserUtil.getCompanyId(); + CompanyEntity company = companyMapper.selectById(companyId); + + String companyCode = company.getCode(); + templatePath = FileUtils.path(templatePath, companyCode); + staticPath = FileUtils.path(staticPath, companyCode); String filename = upload.getOriginalFilename(); String suffix = filename.substring(filename.lastIndexOf(".")); @@ -88,46 +102,59 @@ continue; } - Document parse = Jsoup.parse(templateFile, null); - String attr = parse.head().attr("name"); - CmsTemplateEntity cmsTemplate = new CmsTemplateEntity(); - cmsTemplate.setCompanyId(companyId); - if (name.endsWith(".list.html")) { - cmsTemplate.setType(2); - } else if (name.endsWith(".article.html")) { - cmsTemplate.setType(3); - } else { - cmsTemplate.setType(1); - } - cmsTemplate.setName(StrUtil.isNotBlank(attr) ? attr : templateFile.getName()); - cmsTemplate.setPath(templateFile.getName()); - - this.baseMapper.insert(cmsTemplate); + insertTemplate(templateFile, companyId, companyCode); } - } if (".html".equals(suffix)) { FileUtil.touch(file); - Document parse = Jsoup.parse(file, null); - String attr = parse.head().attr("name"); - CmsTemplateEntity cmsTemplate = new CmsTemplateEntity(); - cmsTemplate.setCompanyId(companyId); - if (file.getName().endsWith(".list.html")) { - cmsTemplate.setType(2); - } else if (file.getName().endsWith(".article.html")) { - cmsTemplate.setType(3); - } else { - cmsTemplate.setType(1); - } - cmsTemplate.setName(StrUtil.isNotBlank(attr) ? attr : file.getName()); - cmsTemplate.setPath(file.getName()); - - this.baseMapper.insert(cmsTemplate); + insertTemplate(file, companyId, companyCode); } } catch (IOException e) { e.printStackTrace(); + throw new GlobalException("模板上传失败"); + } + } + + private void insertTemplate(File file, Long companyId, String companyCode) throws IOException { + Document parse = Jsoup.parse(file, null); + String attr = parse.head().attr("name"); + + staticPathParser(parse, "img", "src", companyCode); + staticPathParser(parse, "link", "href", companyCode); + staticPathParser(parse, "script", "src", companyCode); + + FileOutputStream outputStream = new FileOutputStream(file); + outputStream.write(parse.html().getBytes()); + outputStream.close(); + + CmsTemplateEntity cmsTemplate = new CmsTemplateEntity(); + cmsTemplate.setCompanyId(companyId); + if (file.getName().endsWith(".list.html")) { + cmsTemplate.setType(2); + } else if (file.getName().endsWith(".article.html")) { + cmsTemplate.setType(3); + } else { + cmsTemplate.setType(1); + } + cmsTemplate.setName(StrUtil.isNotBlank(attr) ? attr : file.getName()); + cmsTemplate.setPath(file.getName()); + + this.baseMapper.insert(cmsTemplate); + } + + private void staticPathParser(Document document, String tagName, String attrKey, String companyCode) { + Elements elements = document.getElementsByTag(tagName); + if (elements.isEmpty()) { + return; + } + + for (Element element : elements) { + String attr = element.attr(attrKey); + if (StrUtil.isNotBlank(attr) && !attr.contains("http://") && !attr.contains("https://")) { + element.attr(attrKey, cmsProperties.getStaticUrl() + companyCode + "/" + attr); + } } } @@ -162,8 +189,10 @@ @Override public Result viewTemplateInfo(Long id) { Result result = new Result(); + + CompanyEntity companyEntity = companyMapper.selectById(LoginUserUtil.getCompanyId()); CmsTemplateEntity cmsTemplateEntity = this.baseMapper.selectById(id); - String templatePath = cmsProperties.getTemplatePath(); + String templatePath = FileUtils.path(cmsProperties.getTemplatePath(), companyEntity.getCode()); String pathName = FileUtils.path(templatePath, cmsTemplateEntity.getPath()); byte[] bytes = new byte[0]; diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/ColumnServiceImpl.java b/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/ColumnServiceImpl.java index 7510d74..7498eb2 100644 --- a/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/ColumnServiceImpl.java +++ b/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/ColumnServiceImpl.java @@ -164,14 +164,21 @@ adminSeeColumnInfoVo.setType(columnEntity.getType()); adminSeeColumnInfoVo.setTargetType(columnEntity.getTargetType()); adminSeeColumnInfoVo.setContentType(columnEntity.getContentType()); + + CompanyEntity companyEntity = companyMapper.selectById(LoginUserUtil.getCompanyId()); + if (columnEntity.getType() == 2) { if (columnEntity.getTargetType() == 1) { ArticleEntity articleEntity = articleMapper.selectById(Long.parseLong(columnEntity.getTargetUrl())); adminSeeColumnInfoVo.setTargetName(articleEntity.getTitle()); + adminSeeColumnInfoVo.setUrl(companyEntity.getWebAddress() + columnEntity.getPath() + "/" + columnEntity.getTargetUrl() + ".html"); } else if (columnEntity.getTargetType() == 2) { ColumnEntity column = this.baseMapper.selectByCodeAndCompanyId(columnEntity.getTargetUrl(), LoginUserUtil.getCompanyId()); adminSeeColumnInfoVo.setTargetName(column.getColumnName()); + adminSeeColumnInfoVo.setUrl(companyEntity.getWebAddress() + column.getPath()); } + } else { + adminSeeColumnInfoVo.setUrl(companyEntity.getWebAddress() + columnEntity.getPath()); } adminSeeColumnInfoVo.setTargetUrl(columnEntity.getTargetUrl()); return Result.ok(adminSeeColumnInfoVo); @@ -202,7 +209,13 @@ if(CollUtil.isNotEmpty(columnEntities) && columnEntities.size() > 1){ return Result.fail("栏目编码不能重复"); } + + // 判断是否编辑了栏目编码且此时栏目处于已发布的状态,然后保存之前的编码。因为如果是未发布状态,多次保存的话,容易覆盖真正的最开始的栏目编码 + if (!columnEntity.getColumnCode().equals(columnCode) && columnEntity.getReleaseState() == 1) { + columnEntity.setBeforeColumnCode(columnCode); + } columnEntity.setColumnCode(columnCode); + String remark = adminUpdateColumnDto.getRemark(); columnEntity.setRemark(remark); String pic = adminUpdateColumnDto.getPic(); @@ -212,6 +225,11 @@ columnEntity.setOrderNum(orderNum); } Long parentId = adminUpdateColumnDto.getParentId(); + // 同栏目编码 + if (!columnEntity.getParentId().equals(parentId) && columnEntity.getReleaseState() == 1) { + columnEntity.setBeforeParentId(columnEntity.getParentId()); + } + if(ObjectUtil.isEmpty(parentId)){ columnEntity.setParentId(ColumnEntity.PARENTID_DEFAULT); columnEntity.setPath("/" + columnEntity.getColumnCode()); @@ -228,6 +246,7 @@ columnEntity.setTargetUrl(adminUpdateColumnDto.getTargetUrl()); columnEntity.setIsNav(adminUpdateColumnDto.getIsNav()); columnEntity.setContentType(adminUpdateColumnDto.getContentType()); + columnEntity.setReleaseState(2); this.baseMapper.updateById(columnEntity); return Result.ok("更新成功"); } diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/ReleaseServiceImpl.java b/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/ReleaseServiceImpl.java index d156360..2c01d97 100644 --- a/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/ReleaseServiceImpl.java +++ b/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/ReleaseServiceImpl.java @@ -4,8 +4,11 @@ import com.xcong.farmer.cms.modules.core.service.ICmsCoreService; import com.xcong.farmer.cms.modules.system.entity.ArticleEntity; import com.xcong.farmer.cms.modules.system.entity.ColumnEntity; +import com.xcong.farmer.cms.modules.system.entity.WebSettingEntity; import com.xcong.farmer.cms.modules.system.mapper.ArticleMapper; import com.xcong.farmer.cms.modules.system.mapper.ColumnMapper; +import com.xcong.farmer.cms.modules.system.mapper.CompanyMapper; +import com.xcong.farmer.cms.modules.system.mapper.WebSetMapper; import com.xcong.farmer.cms.modules.system.service.IReleaseService; import com.xcong.farmer.cms.modules.system.util.LoginUserUtil; import lombok.extern.slf4j.Slf4j; @@ -13,6 +16,7 @@ import org.springframework.stereotype.Service; import java.util.HashMap; +import java.util.Hashtable; import java.util.List; import java.util.Map; import java.util.concurrent.Executor; @@ -22,6 +26,7 @@ /** * @author wzy + * @TODO 发布时,index存在重复发布的情况,可优化。用线程notify唤醒。 * @date 2022-07-05 **/ @Slf4j @@ -37,34 +42,125 @@ @Autowired private ICmsCoreService cmsCoreService; - private final Executor executor = new ThreadPoolExecutor(5, 10, 600, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>()); + @Autowired + private WebSetMapper webSetMapper; + + private final Executor executor = new ThreadPoolExecutor(5, 20, 600, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>()); @Override - public void releaseArticle(Long id) { - Long companyId = LoginUserUtil.getCompanyId(); + public void releaseArticle(Long id, Long companyId) { ArticleEntity article = articleMapper.selectById(id); ColumnEntity column = columnMapper.selectById(article.getColumnId()); - Map<String, Object> data = new HashMap<>(); + Long beforeColumnId = article.getBeforeColumnId(); + article.setBeforeColumnId(-1L); + articleMapper.updateById(article); + + Map<String, Object> data = new Hashtable<>(); data.put("id", article.getId()); data.put("companyId", companyId); - executor.execute(()->{ + executor.execute(() -> { log.info("执行文章发布"); cmsCoreService.articleProcess(data, column.getArticleTemplate(), column.getPath()); - this.releaseColumn(column.getId(), 1); + this.releaseColumn(column.getId(), 1, companyId); if (column.getParentId() != 0L) { - releaseColumn(column.getParentId(), 1); + releaseColumn(column.getParentId(), 1, companyId); } - this.releaseIndex(); + + if (beforeColumnId != null && !article.getColumnId().equals(beforeColumnId)) { + ColumnEntity beforeColumn = columnMapper.selectById(beforeColumnId); + this.releaseColumn(beforeColumnId, 1, companyId); + if (beforeColumn.getParentId() != 0L) { + this.releaseColumn(beforeColumn.getParentId(), 1, companyId); + } + } + + this.releaseIndex(companyId, false); }); } @Override - public void releaseColumn(Long id, int type) { - Long companyId = LoginUserUtil.getCompanyId(); + public void releaseColumn(Long id, int type, Long companyId) { ColumnEntity columnEntity = columnMapper.selectById(id); - Map<String, Object> map = new HashMap<>(); + Map<String, Object> map = buildColumnData(columnEntity); + + executor.execute(() -> { + List<ArticleEntity> articles = articleMapper.selectArticleByColumnId(columnEntity.getId(), companyId, type); + if (CollUtil.isNotEmpty(articles)) { + for (ArticleEntity article : articles) { + if (article.getReleaseStatus() == 0) { + article.setReleaseStatus(1); + articleMapper.updateById(article); + } + + if (article.getType() == 1) { + map.put("id", article.getId()); + cmsCoreService.articleProcess(map, columnEntity.getArticleTemplate(), columnEntity.getPath()); + } + } + } + + map.put("id", columnEntity.getId()); + cmsCoreService.columnProcess(map, columnEntity.getListTemplate()); + if (columnEntity.getParentId() != 0L) { + ColumnEntity parentColumn = columnMapper.selectById(columnEntity.getParentId()); + Map<String, Object> parentMap = buildColumnData(parentColumn); + parentMap.put("id", parentColumn.getId()); + cmsCoreService.columnProcess(parentMap, parentColumn.getListTemplate()); + } + + releaseIndex(companyId, false); + }); + + if (type != 1) { + executor.execute(() -> { + if (columnEntity.getParentId() == 0L) { + List<ColumnEntity> columns = columnMapper.selectColumnByParentId(columnEntity.getId(), companyId, 2); + if (CollUtil.isNotEmpty(columns)) { + for (ColumnEntity column : columns) { + List<ArticleEntity> articles = articleMapper.selectArticleByColumnId(column.getId(), companyId, type); + if (CollUtil.isNotEmpty(articles)) { + for (ArticleEntity article : articles) { + if (article.getReleaseStatus() == 0) { + article.setReleaseStatus(1); + articleMapper.updateById(article); + } + + if (article.getType() == 1) { + map.put("id", article.getId()); + cmsCoreService.articleProcess(map, column.getArticleTemplate(), column.getPath()); + } + } + } + + Map<String, Object> data = buildColumnData(column); + cmsCoreService.columnProcess(data, column.getListTemplate()); + } + } + } + + releaseIndex(companyId, false); + }); + + } + } + + @Override + public void releaseColumns(int type, Long companyId) { + List<ColumnEntity> columns = columnMapper.selectColumnByParentId(0L, companyId, 2); + + if (CollUtil.isEmpty(columns)) { + return; + } + + for (ColumnEntity column : columns) { + releaseColumn(column.getId(), type, companyId); + } + } + + private Map<String, Object> buildColumnData(ColumnEntity columnEntity) { + Map<String, Object> map = new Hashtable<>(); map.put("id", columnEntity.getId()); map.put("code", columnEntity.getColumnCode()); if (columnEntity.getParentId() == 0L) { @@ -73,43 +169,34 @@ ColumnEntity parent = columnMapper.selectById(columnEntity.getParentId()); map.put("parentCode", parent.getColumnCode()); } + map.put("columnTitle", columnEntity.getColumnName()); map.put("templatePath", columnEntity.getPath()); + map.put("companyId", columnEntity.getCompanyId()); + return map; + } + + @Override + public void releaseIndex(Long companyId, boolean hasSearch) { + Map<String, Object> map = new HashMap<>(); map.put("companyId", companyId); - if (type != 1) { + WebSettingEntity webSetting = webSetMapper.selectByCompanyId(companyId); + + cmsCoreService.indexProcess(map, webSetting.getIndexTemplate()); + if (hasSearch) { executor.execute(() -> { - if (columnEntity.getParentId() == 0L) { - List<ColumnEntity> columns = columnMapper.selectColumnByParentId(columnEntity.getParentId(), companyId); - if (CollUtil.isNotEmpty(columns)) { - for (ColumnEntity column : columns) { - map.put("id", column.getId()); - cmsCoreService.columnProcess(map, column.getListTemplate()); - - List<Long> ids = articleMapper.selectArticleIdsByColumnId(column.getId(), companyId,type); - cmsCoreService.articlesProcess(map, ids, column.getArticleTemplate(), column.getPath()); - } - } - } - - List<Long> ids = articleMapper.selectArticleIdsByColumnId(columnEntity.getId(), companyId, type); - cmsCoreService.articlesProcess(map, ids, columnEntity.getArticleTemplate(), columnEntity.getPath()); - - releaseIndex(); - }); - - executor.execute(() -> { - cmsCoreService.columnProcess(map, columnEntity.getListTemplate()); - releaseIndex(); + cmsCoreService.process(map, "search", webSetting.getSearchTemplate()); + cmsCoreService.process(map, "message", webSetting.getMsgTemplate()); }); } } @Override - public void releaseIndex() { + public void releaseAll(Long companyId) { Map<String, Object> map = new HashMap<>(); - Long companyId = LoginUserUtil.getCompanyId(); map.put("companyId", companyId); - cmsCoreService.indexProcess(map, null); + releaseColumns(4, companyId); + releaseIndex(companyId, true); } } diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/WebSetServiceImpl.java b/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/WebSetServiceImpl.java deleted file mode 100644 index ed8d8bc..0000000 --- a/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/WebSetServiceImpl.java +++ /dev/null @@ -1,79 +0,0 @@ -package com.xcong.farmer.cms.modules.system.service.Impl; - -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.xcong.farmer.cms.common.response.Result; -import com.xcong.farmer.cms.modules.system.dto.AdminUpdateWebSetDto; -import com.xcong.farmer.cms.modules.system.entity.UserEntity; -import com.xcong.farmer.cms.modules.system.entity.WebSetEntity; -import com.xcong.farmer.cms.modules.system.mapper.WebSetMapper; -import com.xcong.farmer.cms.modules.system.service.IWebSetService; -import com.xcong.farmer.cms.modules.system.util.LoginUserUtil; -import com.xcong.farmer.cms.modules.system.vo.AdminSeeWebSetInfoVo; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -import java.util.List; - -import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.StrUtil; -import cn.hutool.core.collection.CollUtil; - -@Service -@Slf4j -public class WebSetServiceImpl extends ServiceImpl<WebSetMapper, WebSetEntity> implements IWebSetService { - @Override - public Result seeWebSetInfo() { - UserEntity userlogin = LoginUserUtil.getLoginUser(); - long companyId = userlogin.getCompanyId() == null ? UserEntity.USER_BELONG_TOP : userlogin.getCompanyId(); - AdminSeeWebSetInfoVo adminSeeWebSetInfoVo = new AdminSeeWebSetInfoVo(); - QueryWrapper<WebSetEntity> objectQueryWrapper = new QueryWrapper<>(); - objectQueryWrapper.eq("company_id",companyId); - List<WebSetEntity> webSetEntities = this.baseMapper.selectList(objectQueryWrapper); - if(CollUtil.isNotEmpty(webSetEntities)){ - WebSetEntity webSetEntity = webSetEntities.get(0); - adminSeeWebSetInfoVo.setId(webSetEntity.getId()); - adminSeeWebSetInfoVo.setWebTitle(webSetEntity.getWebTitle()); - adminSeeWebSetInfoVo.setWebKeyword(webSetEntity.getWebKeyword()); - adminSeeWebSetInfoVo.setWebRemark(webSetEntity.getWebRemark()); - adminSeeWebSetInfoVo.setWebPic(webSetEntity.getWebPic()); - } - return Result.ok(adminSeeWebSetInfoVo); - } - - @Override - public Result updateWebSet(AdminUpdateWebSetDto adminUpdateWebSetDto) { - UserEntity userlogin = LoginUserUtil.getLoginUser(); - long companyId = userlogin.getCompanyId() == null ? UserEntity.USER_BELONG_TOP : userlogin.getCompanyId(); - String webTitle = adminUpdateWebSetDto.getWebTitle(); - String webKeyword = adminUpdateWebSetDto.getWebKeyword(); - Long id = adminUpdateWebSetDto.getId() == null ? 0L : adminUpdateWebSetDto.getId(); - QueryWrapper<WebSetEntity> objectQueryWrapper = new QueryWrapper<>(); - objectQueryWrapper.eq("company_id",companyId); - WebSetEntity webSetEntity = this.baseMapper.selectOne(objectQueryWrapper); - if(ObjectUtil.isEmpty(webSetEntity)){ - WebSetEntity webSetEntityAdd = new WebSetEntity(); - webSetEntityAdd.setWebTitle(webTitle); - webSetEntityAdd.setWebKeyword(webKeyword); - String webRemark = adminUpdateWebSetDto.getWebRemark(); - if(StrUtil.isNotEmpty(webRemark)){ - webSetEntityAdd.setWebRemark(webRemark); - } - String webPic = adminUpdateWebSetDto.getWebPic(); - if(StrUtil.isNotEmpty(webPic)){ - webSetEntityAdd.setWebPic(webPic); - } - webSetEntityAdd.setCompanyId(companyId); - this.baseMapper.insert(webSetEntityAdd); - return Result.ok("保存成功"); - } - webSetEntity.setWebTitle(webTitle); - webSetEntity.setWebKeyword(webKeyword); - String webRemark = adminUpdateWebSetDto.getWebRemark(); - webSetEntity.setWebRemark(webRemark); - String webPic = adminUpdateWebSetDto.getWebPic(); - webSetEntity.setWebPic(webPic); - this.baseMapper.updateById(webSetEntity); - return Result.ok("保存成功"); - } -} diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/WebSettingServiceImpl.java b/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/WebSettingServiceImpl.java new file mode 100644 index 0000000..644e05d --- /dev/null +++ b/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/WebSettingServiceImpl.java @@ -0,0 +1,50 @@ +package com.xcong.farmer.cms.modules.system.service.Impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.xcong.farmer.cms.common.response.Result; +import com.xcong.farmer.cms.conversion.WebSettingConversion; +import com.xcong.farmer.cms.modules.system.dto.SetWebSettingDto; +import com.xcong.farmer.cms.modules.system.entity.UserEntity; +import com.xcong.farmer.cms.modules.system.entity.WebSettingEntity; +import com.xcong.farmer.cms.modules.system.mapper.WebSetMapper; +import com.xcong.farmer.cms.modules.system.service.IWebSettingService; +import com.xcong.farmer.cms.modules.system.util.LoginUserUtil; +import com.xcong.farmer.cms.modules.system.vo.AdminSeeWebSetInfoVo; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +@Service +@Slf4j +public class WebSettingServiceImpl extends ServiceImpl<WebSetMapper, WebSettingEntity> implements IWebSettingService { + @Override + public Result getWebSetting() { + Long companyId = LoginUserUtil.getCompanyId(); + WebSettingEntity webSetting = this.baseMapper.selectByCompanyId(companyId); + if (webSetting == null) { + webSetting = new WebSettingEntity(); + } + + AdminSeeWebSetInfoVo adminSeeWebSetInfoVo = WebSettingConversion.INSTANCE.entityToVo(webSetting); + return Result.ok(adminSeeWebSetInfoVo); + } + + @Override + public Result setWebSetting(SetWebSettingDto setWebSettingDto) { + Long companyId = LoginUserUtil.getCompanyId(); + + WebSettingEntity webSetting = WebSettingConversion.INSTANCE.dtoToEntity(setWebSettingDto); + webSetting.setCompanyId(companyId); + if (setWebSettingDto.getId() == null) { + WebSettingEntity hasExist = this.baseMapper.selectByCompanyId(companyId); + if (hasExist != null) { + webSetting.setId(hasExist.getId()); + this.baseMapper.updateById(webSetting); + } else { + this.baseMapper.insert(webSetting); + } + } else { + this.baseMapper.updateById(webSetting); + } + return Result.ok("保存成功"); + } +} diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/vo/AdminSeeColumnInfoVo.java b/src/main/java/com/xcong/farmer/cms/modules/system/vo/AdminSeeColumnInfoVo.java index c75d84a..ec74019 100644 --- a/src/main/java/com/xcong/farmer/cms/modules/system/vo/AdminSeeColumnInfoVo.java +++ b/src/main/java/com/xcong/farmer/cms/modules/system/vo/AdminSeeColumnInfoVo.java @@ -52,4 +52,7 @@ @ApiModelProperty(value = "内容类型 1:文章 2:图片 3:文件 4:音频") private Integer contentType; + @ApiModelProperty(value = "栏目地址") + private String url; + } diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/vo/AdminSeeWebSetInfoVo.java b/src/main/java/com/xcong/farmer/cms/modules/system/vo/AdminSeeWebSetInfoVo.java index 3073ff3..ce9ccfb 100644 --- a/src/main/java/com/xcong/farmer/cms/modules/system/vo/AdminSeeWebSetInfoVo.java +++ b/src/main/java/com/xcong/farmer/cms/modules/system/vo/AdminSeeWebSetInfoVo.java @@ -1,5 +1,6 @@ package com.xcong.farmer.cms.modules.system.vo; +import com.baomidou.mybatisplus.annotation.TableField; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -12,14 +13,32 @@ private Long id; @ApiModelProperty(value = "网页标题") - private String webTitle; + private String title; - @ApiModelProperty(value = "网页关键字") - private String webKeyword; + @ApiModelProperty(value = "seo关键字") + private String seoKeyword; - @ApiModelProperty(value = "网页描述") - private String webRemark; + @ApiModelProperty(value = "seo描述") + private String seoRemark; + + @ApiModelProperty(value = "seo描述") + private String seoDescription; @ApiModelProperty(value = "网页LOGO") - private String webPic; + private String logoUrl; + + @ApiModelProperty(value = "首页模板") + private String indexTemplate; + + @ApiModelProperty(value = "搜索模板") + private String searchTemplate; + + @ApiModelProperty(value = "在线留言模板") + private String msgTemplate; + + @ApiModelProperty(value = "公司编码") + private String companyCode; + + @ApiModelProperty(value = "公司URL") + private String companyUrl; } diff --git a/src/main/java/com/xcong/farmer/cms/utils/GroovySingleton.java b/src/main/java/com/xcong/farmer/cms/utils/GroovySingleton.java new file mode 100644 index 0000000..744de71 --- /dev/null +++ b/src/main/java/com/xcong/farmer/cms/utils/GroovySingleton.java @@ -0,0 +1,27 @@ +package com.xcong.farmer.cms.utils; + +import groovy.lang.Binding; +import groovy.lang.GroovyShell; + +/** + * @author wzy + * @date 2022-07-08 + **/ +public class GroovySingleton { + private volatile static GroovyShell groovyShell; + + private GroovySingleton (){} + + public static GroovyShell getSingleton() { + if (groovyShell == null) { + synchronized (GroovySingleton.class) { + if (groovyShell == null) { + Binding binding = new Binding(); + groovyShell = new GroovyShell(binding); + } + } + } + return groovyShell; + } + +} diff --git a/src/main/resources/application-test.yml b/src/main/resources/application-test.yml index a444118..3c2ef33 100644 --- a/src/main/resources/application-test.yml +++ b/src/main/resources/application-test.yml @@ -93,7 +93,7 @@ path: /home/javaweb/webresource/uploadeFile/image/ cms: - base-url: http://120.27.238.55:8000/cms/output + api-url: http://120.27.238.55:8878 static-url: http://120.27.238.55:8000/cms/static/ template-path: /home/javaweb/webresource/cms/template static-path: /home/javaweb/webresource/cms/static diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index fb5980a..6adb6f3 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -78,6 +78,8 @@ max-request-size: 100MB mybatis-plus: mapper-locations: classpath:mapper/*.xml +# configuration: +# log-impl: org.apache.ibatis.logging.stdout.StdOutImpl app: @@ -97,9 +99,9 @@ path: /image/ cms: - base-url: http://localhost - static-url: http://localhost/ - template-path: /Users/helius/Desktop/template - static-path: /Users/helius/Desktop/static - output-path: /Users/helius/Desktop/web/output + api-url: http://120.27.238.55:8878 + static-url: http://120.27.238.55:8000/cms/static/ + template-path: /Users/helius/Desktop/template-online/template + static-path: /Users/helius/Desktop/template-online/static + output-path: /Users/helius/Desktop/template-online/output diff --git a/src/main/resources/mapper/ArticleMapper.xml b/src/main/resources/mapper/ArticleMapper.xml index 32631ff..02ee778 100644 --- a/src/main/resources/mapper/ArticleMapper.xml +++ b/src/main/resources/mapper/ArticleMapper.xml @@ -48,14 +48,17 @@ <select id="selectPrevOrNextArticle" resultType="com.xcong.farmer.cms.modules.system.entity.ArticleEntity"> select * from t_article a, t_column b - where a.id!=#{id} and (a.column_id=b.id or a.column_id=b.parent_id) and a.column_id=#{columnId} + where (a.column_id=b.id or a.column_id=b.parent_id) and a.column_id=#{columnId} and release_status=1 + and del_status = 1 <!--上一篇--> <if test="type == 1"> - order by a.id + and #{id} > a.id + order by a.id desc </if> <!--下一篇--> <if test="type == 2"> - order by a.id desc + and a.id > #{id} + order by a.id </if> limit 1 </select> @@ -76,7 +79,7 @@ inner join t_column b on a.column_id=b.id inner join t_column c on b.parent_id=c.id or c.id=b.id <where> - a.company_id=#{record.companyId} and a.del_status = 1 + a.company_id=#{record.companyId} and a.del_status = 1 and release_status = 1 <if test="record.columnCode != null and record.columnCode != ''"> and c.column_code=#{record.columnCode} </if> @@ -86,7 +89,11 @@ ${item} </foreach> </if> + <if test="record.isTop != null and record.isTop != ''"> + and a.is_top=#{record.isTop} + </if> </where> + order by release_time desc </select> <select id="selectWebArticleInPage" resultType="com.xcong.farmer.cms.modules.system.vo.WebArticleVo"> @@ -122,8 +129,21 @@ </select> <select id="selectArticleIdsByColumnId" resultType="java.lang.Long"> + select a.id from t_article a + where a.column_id=#{columnId} and a.company_id=#{companyId} and a.del_status = 1 + <if test="type != 4"> + <if test="type == 2"> + and release_status=1 + </if> + <if test="type == 3"> + and release_status=0 + </if> + </if> + </select> + + <select id="selectArticleByColumnId" resultType="com.xcong.farmer.cms.modules.system.entity.ArticleEntity"> select * from t_article a - where a.column_id=#{columnId} and a.company_id=#{companyId} + where a.column_id=#{columnId} and a.company_id=#{companyId} and a.del_status = 1 <if test="type != 4"> <if test="type == 2"> and release_status=1 diff --git a/src/main/resources/mapper/ColumnMapper.xml b/src/main/resources/mapper/ColumnMapper.xml index 9301d93..e4022c0 100644 --- a/src/main/resources/mapper/ColumnMapper.xml +++ b/src/main/resources/mapper/ColumnMapper.xml @@ -37,6 +37,9 @@ <select id="selectColumnByParentId" resultType="com.xcong.farmer.cms.modules.system.entity.ColumnEntity"> select * from t_column where parent_id=#{parentId} and company_id=#{companyId} + <if test="isNav == 1"> + and is_nav=1 + </if> </select> <select id="selectColumnInPage" resultType="com.xcong.farmer.cms.modules.system.entity.ColumnEntity"> diff --git a/src/main/resources/mapper/WebSetMapper.xml b/src/main/resources/mapper/WebSetMapper.xml new file mode 100644 index 0000000..c802dc4 --- /dev/null +++ b/src/main/resources/mapper/WebSetMapper.xml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.xcong.farmer.cms.modules.system.mapper.WebSetMapper"> + + <select id="selectByCompanyId" resultType="com.xcong.farmer.cms.modules.system.entity.WebSettingEntity"> + select + a.*, + b.web_address companyUrl, + b.code companyCode + from t_web_setting a, t_company b + where a.company_id=#{companyId} and a.company_id=b.id + </select> + + <select id="selectSiteGlobalSetting" resultType="java.util.Map"> + select + a.title title, + a.seo_title seoTitle, + a.seo_keyword seoKeyword, + a.seo_description seoDescription, + a.logo_url logo, + b.web_address baseUrl, + b.code companyCode + from t_web_setting a, t_company b + where a.company_id=#{companyId} and a.company_id=b.id + </select> + +</mapper> \ No newline at end of file diff --git a/src/test/java/com/xcong/farmer/cms/ArticleTest.java b/src/test/java/com/xcong/farmer/cms/ArticleTest.java new file mode 100644 index 0000000..12778d0 --- /dev/null +++ b/src/test/java/com/xcong/farmer/cms/ArticleTest.java @@ -0,0 +1,28 @@ +package com.xcong.farmer.cms; + +import com.xcong.farmer.cms.modules.system.entity.ArticleEntity; +import com.xcong.farmer.cms.modules.system.mapper.ArticleMapper; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +/** + * @author wzy + * @date 2022-07-11 + **/ +@SpringBootTest +public class ArticleTest { + + @Autowired + private ArticleMapper articleMapper; + + @Test + public void articleColumnIdUpdateTest() { + Long columnId = 83L; + ArticleEntity article = articleMapper.selectById(88L); + + article.setBeforeColumnId(-1L); + articleMapper.updateById(article); + } + +} diff --git a/src/test/java/com/xcong/farmer/cms/KssframeworkApplicationTests.java b/src/test/java/com/xcong/farmer/cms/KssframeworkApplicationTests.java index a571fb4..888ee4a 100644 --- a/src/test/java/com/xcong/farmer/cms/KssframeworkApplicationTests.java +++ b/src/test/java/com/xcong/farmer/cms/KssframeworkApplicationTests.java @@ -108,7 +108,7 @@ public void viewTemplateInfo() { Long id = 4L; CmsTemplateEntity cmsTemplateEntity = cmsTemplateMapper.selectById(id); - String htmlUrl = cmsProperties.getBaseUrl() + cmsProperties.getTemplatePath(); + String htmlUrl = "" + cmsProperties.getTemplatePath(); File uploadDir = new File(htmlUrl); if (!uploadDir.isDirectory()) { uploadDir.mkdir(); diff --git a/src/test/java/com/xcong/farmer/cms/TemplateTest.java b/src/test/java/com/xcong/farmer/cms/TemplateTest.java new file mode 100644 index 0000000..f072ef2 --- /dev/null +++ b/src/test/java/com/xcong/farmer/cms/TemplateTest.java @@ -0,0 +1,52 @@ +package com.xcong.farmer.cms; + +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.util.StrUtil; +import org.jsoup.Jsoup; +import org.jsoup.nodes.Document; +import org.jsoup.nodes.Element; +import org.jsoup.select.Elements; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; + +/** + * @author wzy + * @date 2022-07-09 + **/ +@SpringBootTest +public class TemplateTest { + + String baseUrl = "http://120.27.238.55:8000/cms/static/"; + + @Test + public void staticFileTest() throws IOException { + File file = new File("/Users/helius/Desktop/template-online/index-test.html"); + Document parse = Jsoup.parse(file, "utf-8"); + + staticPathParser(parse, "img", "src"); + staticPathParser(parse, "href", "link"); + staticPathParser(parse, "script", "src"); + + FileOutputStream outputStream = new FileOutputStream(file); + outputStream.write(parse.html().getBytes()); + outputStream.close(); + } + + public void staticPathParser(Document document, String tagName, String attrKey) { + Elements elements = document.getElementsByTag(tagName); + if (elements.isEmpty()) { + return; + } + + for (Element element : elements) { + String attr = element.attr(attrKey); + if (StrUtil.isNotBlank(attr) && !attr.contains("http://") && !attr.contains("https://")) { + element.attr(attrKey, baseUrl + attr); + } + } + } +} -- Gitblit v1.9.1