package com.thinkit.cms.service.content;
import cn.hutool.core.io.FileUtil;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.common.collect.Lists;
import com.thinkit.cms.api.category.CategoryModelRelationService;
import com.thinkit.cms.api.category.CategoryService;
import com.thinkit.cms.api.content.ContentAttachService;
import com.thinkit.cms.api.content.ContentAttrService;
import com.thinkit.cms.api.content.ContentRelatedService;
import com.thinkit.cms.api.content.ContentService;
import com.thinkit.cms.api.model.ModelService;
import com.thinkit.cms.api.site.SiteService;
import com.thinkit.cms.api.tag.TagService;
import com.thinkit.cms.config.ActuatorComponent;
import com.thinkit.cms.dto.category.CategoryDto;
import com.thinkit.cms.dto.content.*;
import com.thinkit.cms.dto.model.ModelDto;
import com.thinkit.cms.dto.tag.TagDto;
import com.thinkit.cms.entity.content.Content;
import com.thinkit.cms.mapper.content.ContentMapper;
import com.thinkit.cms.strategy.checker.ContentChecker;
import com.thinkit.cms.strategy.checker.PublishChecker;
import com.thinkit.core.base.BaseContextKit;
import com.thinkit.core.base.BaseServiceImpl;
import com.thinkit.core.constant.Channel;
import com.thinkit.core.constant.Constants;
import com.thinkit.core.handler.CustomException;
import com.thinkit.nosql.base.BaseRedisService;
import com.thinkit.nosql.base.BaseSolrService;
import com.thinkit.nosql.enums.SolrCoreEnum;
import com.thinkit.processor.channel.ChannelThreadLocal;
import com.thinkit.processor.message.MessageSend;
import com.thinkit.utils.enums.*;
import com.thinkit.utils.model.*;
import com.thinkit.utils.properties.ThinkItProperties;
import com.thinkit.utils.utils.Checker;
import com.thinkit.utils.utils.ModelFieldUtil;
import org.apache.commons.lang3.StringUtils;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.common.SolrDocument;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Transactional;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.*;
import java.util.concurrent.CompletableFuture;
/**
* <p>
* 内容 服务实现类
* </p>
*
* @author lg
* @since 2020-08-15
*/
@Service
public class ContentServiceImpl extends BaseServiceImpl<ContentDto, Content, ContentMapper> implements ContentService {
@Autowired
CategoryService categoryService;
@Autowired
ContentAttrService contentAttrService;
@Autowired
ContentAttachService attachService;
@Autowired
ModelService modelService;
@Autowired
MessageSend messageSend;
@Autowired
SiteService siteService;
@Autowired
CategoryModelRelationService modelRelationService;
@Autowired
ContentRelatedService relatedService;
@Autowired
TagService tagService;
@Autowired
BaseRedisService baseRedisService;
@Autowired
ActuatorComponent actuatorComponent;
@Autowired
BaseSolrService baseSolrService;
// @Autowired
// ArticleService articleService;
@Autowired
ThinkItProperties thinkItProperties;
@Override
public PageDto<ContentDto> listPage(PageDto<ContentDto> pageDto){
filterCategory(pageDto);
IPage<ContentDto> pages = new Page<>(pageDto.getPageNo(), pageDto.getPageSize());
IPage<ContentDto> result = baseMapper.listPage(pages, pageDto.getDto());
if(Checker.BeNotEmpty(result.getRecords()))filterCover(result.getRecords());
PageDto<ContentDto> resultSearch = new PageDto(result.getTotal(), result.getPages(), result.getCurrent(), Checker.BeNotEmpty(result.getRecords()) ? result.getRecords() : Lists.newArrayList());
return resultSearch;
}
@Override
public PageDto<ContentDto> pageRecycler(PageDto<ContentDto> pageDto) {
filterCategory(pageDto);
IPage<ContentDto> pages = new Page<>(pageDto.getPageNo(), pageDto.getPageSize());
IPage<ContentDto> result = baseMapper.pageRecycler(pages, pageDto.getDto());
if(Checker.BeNotEmpty(result.getRecords()))filterCover(result.getRecords());
PageDto<ContentDto> resultSearch = new PageDto(result.getTotal(), result.getPages(), result.getCurrent(), Checker.BeNotEmpty(result.getRecords()) ? result.getRecords() : Lists.newArrayList());
return resultSearch;
}
private void filterCover(List<ContentDto> contents){
for(ContentDto content:contents){
if(Checker.BeNotBlank(content.getCoverStr())){
content.setCover(JSONUtil.toList(JSONUtil.parseArray(content.getCoverStr()),Map.class));
}
}
}
private void filterCategory(PageDto<ContentDto> pageDto){
if (Checker.BeNotBlank(pageDto.getDto().getCategoryId())) {
List<String> childcategoryIds = new ArrayList<>();
childcategoryIds.add(pageDto.getDto().getCategoryId());
List<String> newChildCategoryIds = new ArrayList<>();
recursionCategoryIds(childcategoryIds, newChildCategoryIds);
pageDto.getDto().setCategoryIds(newChildCategoryIds);
}
}
private void recursionCategoryIds(List<String> childcategoryIds, List<String> newChildcategoryIds) {
if (Checker.BeNotEmpty(childcategoryIds)) {
newChildcategoryIds.addAll(childcategoryIds);
for (String categoryId : childcategoryIds) {
if (Checker.BeNotBlank(categoryId)) {
List<String> childCategs = getCategoryChildByParentId(categoryId);
recursionCategoryIds(childCategs, newChildcategoryIds);
}
}
}
}
private List<String> getCategoryChildByParentId(String categoryId) {
List<String> categoryIds = new ArrayList<>();
List<CategoryDto> cmsCategoryDtos = categoryService.listCategoryByPid(categoryId);
if (Checker.BeNotEmpty(cmsCategoryDtos)) {
for (CategoryDto cmsCategoryDto : cmsCategoryDtos) {
categoryIds.add(cmsCategoryDto.getId());
}
}
return categoryIds;
}
@Override
public IPage<ContentDto> pageContentForNoSql(Integer pageNo, Integer pageSize) {
IPage<Map<String,String>> pages = new Page<>(pageNo, pageSize);
IPage<ContentDto> result = baseMapper.pageContentForNoSql(pages, getSiteId());
if (Checker.BeNotEmpty(result.getRecords())) {
// 处理格式化
for(ContentDto contentDto:result.getRecords()){
if(Checker.BeNotBlank(contentDto.getAttrData())){
Map<String,Object> params = ModelFieldUtil.jsonStrToMap(contentDto.getAttrData());
contentDto.setParams(params);
}
if(Checker.BeNotBlank(contentDto.getCoverStr())){
contentDto.setCover(JSONUtil.toList(JSONUtil.parseArray(contentDto.getCoverStr()),Map.class));
}
}
return result;
}
return null;
}
@Override
public Tree<CategoryDto> treeCategory() {
return categoryService.treeCategoryForContent();
}
@Override
public List<DynamicModel> getFormDesign(String modelId) {
ModelDto model = modelService.getModel(modelId);
Boolean hasfile =model.getHasFiles();
List<DynamicModel> dynamicModels=ModelFieldUtil.jsonStrToModel(model.getAllFieldList());
if(hasfile){
List<DynamicModel> attachField = ModelFieldUtil.loadModel(BelongEnum.ATTACH);
if(Checker.BeNotEmpty(attachField)){
dynamicModels.addAll(attachField);
}
}
return dynamicModels;
}
@Transactional
@Override
public void save(ContentDto
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
ThinkItCMS 是一款面向模板开发,支持静态生成的CMS 系统,其支持前后端分离部署,是一款好用的 cms 系统。 ThinkItCMS 采用 SpringBoot + Mybatis Plus + Redis+ Spring Security + OAuth2 + Freemark 搭建的一套cms 系统,数据库采用 mysql 数据库,文件服务器采用 Fastdfs 全文检索采用 Solr 。 前端架构采用ant design vue 前后端分离的系统架构。 门户系统采用的 静态模板生成技术,直接生成的静态 html 模板,js + jQuery 作相应的辅助。 部署服务 采用 nginx 门户系统和 后台 管理系统 采用正向代理正常部署,服务端采用反向代理暴露接口。ThinkItCMS 的服务端在接口限制方面都可以灵活配置分配权限,保证系统的最大安全。无特殊要求亦可以内网部署服务端。ThinkItCMS 采用目前最流行的 JEE 架构 SpringBoot 开发的一个CMS 系统
资源推荐
资源详情
资源评论
收起资源包目录
一款面向模板开发,支持静态生成的CMS 系统,其支持前后端分离部署,是一款好用的 cms 系统 (548个子文件)
license.dat 330B
index.vue.ftl 4KB
handle.vue.ftl 3KB
entity.java.ftl 2KB
controller.java.ftl 2KB
dto.java.ftl 2KB
mapper.xml.ftl 1KB
index.js.ftl 1KB
serviceImpl.java.ftl 846B
mapper.java.ftl 485B
service.java.ftl 334B
.gitignore 516B
ContentServiceImpl.java 46KB
TemplateServiceImpl.java 29KB
CategoryServiceImpl.java 20KB
ApiResult.java 19KB
BaseRedisServiceImpl.java 18KB
BaseRedisService.java 15KB
BaseSolrServiceImpl.java 13KB
BaseServiceImpl.java 12KB
JobUtil.java 12KB
ModelFieldUtil.java 12KB
UserServiceImpl.java 12KB
LocalClient.java 11KB
Wrapper.java 11KB
MethodWrapper.java 11KB
OnlineServiceImpl.java 11KB
SiteServiceImpl.java 11KB
RSAUtils.java 10KB
WebStaticFileServiceImpl.java 10KB
MenuServiceImpl.java 9KB
BaseChannelAdaptService.java 9KB
FragmentAttrServiceImpl.java 8KB
HardWareMonitor.java 8KB
FastdfsClient.java 8KB
AliYunOSSClient.java 8KB
ApiSourceServiceImpl.java 7KB
FragmentModelServiceImpl.java 7KB
ModelServiceImpl.java 7KB
RoleMenuServiceImpl.java 6KB
ResolvingKey.java 6KB
ValidateCodeUtil.java 6KB
ContentController.java 6KB
ActuatorComponent.java 5KB
LogServiceImpl.java 5KB
SnowflakeIdWorker.java 5KB
PasswordGenerator.java 5KB
ContentMapper.java 5KB
OrgServiceImpl.java 5KB
TemplateController.java 5KB
ThinkItCMSApplication.java 5KB
ReturnAdviceHandler.java 5KB
SolrStoreActuator.java 5KB
SysResourceServiceImpl.java 5KB
FileLoopUtil.java 5KB
SiteTemplateServiceImpl.java 5KB
ContentDto.java 5KB
ChannelNotifyImpl.java 5KB
ContentService.java 4KB
AbsCustomJwtHandler.java 4KB
Constants.java 4KB
OAuth2AuthorizationServerConfig.java 4KB
CmsTagsTypeServiceImpl.java 4KB
LogServiceImpl.java 4KB
SocketStompConfig.java 4KB
PermissionLoader.java 4KB
TagServiceImpl.java 4KB
RenderWrapper.java 4KB
OAuth2ResourceServerConfig.java 4KB
Content.java 4KB
BeanConfig.java 4KB
PathRule.java 3KB
TemplateTypeServiceImpl.java 3KB
LicenseProperties.java 3KB
Base64Utils.java 3KB
JobExecute.java 3KB
JobServiceImpl.java 3KB
Checker.java 3KB
SecurityConstants.java 3KB
MessageHandler.java 3KB
UploadClient.java 3KB
HandleShakeInterceptors.java 3KB
LicenseServiceImpl.java 3KB
NextContentActuator.java 3KB
UserController.java 3KB
AuthBeanConfig.java 3KB
MessageSend.java 3KB
ApiClientServiceImpl.java 3KB
SiteAspect.java 3KB
CustomVerifyCodeFilter.java 3KB
GlobalExceptionHandler.java 3KB
AuthInterceptor.java 3KB
RedisConfig.java 3KB
ContentConvert.java 3KB
ThinkItProperties.java 3KB
MessageResolveHandler.java 3KB
CategoryDto.java 3KB
ContentActuator.java 3KB
BeanEqUtil.java 3KB
ContentChannelService.java 3KB
共 548 条
- 1
- 2
- 3
- 4
- 5
- 6
资源评论
Java程序员-张凯
- 粉丝: 1w+
- 资源: 7451
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 5G SRM815模组原理框图.jpg
- T型3电平逆变器,lcl滤波器滤波器参数计算,半导体损耗计算,逆变电感参数设计损耗计算 mathcad格式输出,方便修改 同时支持plecs损耗仿真,基于plecs的闭环仿真,电压外环,电流内环
- 毒舌(解锁版).apk
- 显示HEX、S19、Bin、VBF等其他汽车制造商特定的文件格式
- 8bit逐次逼近型SAR ADC电路设计成品 入门时期的第三款sarADC,适合新手学习等 包括电路文件和详细设计文档 smic0.18工艺,单端结构,3.3V供电 整体采样率500k,可实现基
- 操作系统实验 ucorelab4内核线程管理
- 脉冲注入法,持续注入,启动低速运行过程中注入,电感法,ipd,力矩保持,无霍尔无感方案,媲美有霍尔效果 bldc控制器方案,无刷电机 提供源码,原理图
- Matlab Simulink#直驱永磁风电机组并网仿真模型 基于永磁直驱式风机并网仿真模型 采用背靠背双PWM变流器,先整流,再逆变 不仅实现电机侧的有功、无功功率的解耦控制和转速调节,而且能实
- 157389节奏盒子地狱模式第三阶段7.apk
- 操作系统实验ucore lab3
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功