package com.xcong.farmer.cms.modules.system.service.Impl; import cn.hutool.core.collection.CollUtil; 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.mapper.ArticleMapper; import com.xcong.farmer.cms.modules.system.mapper.ColumnMapper; import com.xcong.farmer.cms.modules.system.service.IReleaseService; import com.xcong.farmer.cms.modules.system.util.LoginUserUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.Executor; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; /** * @author wzy * @date 2022-07-05 **/ @Slf4j @Service public class ReleaseServiceImpl implements IReleaseService { @Autowired private ArticleMapper articleMapper; @Autowired private ColumnMapper columnMapper; @Autowired private ICmsCoreService cmsCoreService; private final Executor executor = new ThreadPoolExecutor(5, 10, 600, TimeUnit.SECONDS, new LinkedBlockingQueue()); @Override public void releaseArticle(Long id) { Long companyId = LoginUserUtil.getCompanyId(); ArticleEntity article = articleMapper.selectById(id); ColumnEntity column = columnMapper.selectById(article.getColumnId()); Map data = new HashMap<>(); data.put("id", article.getId()); data.put("companyId", companyId); executor.execute(()->{ cmsCoreService.articleProcess(data, column.getArticleTemplate(), column.getPath()); this.releaseColumn(column.getId(), 1); if (column.getParentId() != 0L) { releaseColumn(column.getParentId(), 1); } this.releaseIndex(); }); } @Override public void releaseColumn(Long id, int type) { Long companyId = LoginUserUtil.getCompanyId(); ColumnEntity columnEntity = columnMapper.selectById(id); Map map = new HashMap<>(); map.put("id", columnEntity.getId()); map.put("code", columnEntity.getColumnCode()); if (columnEntity.getParentId() == 0L) { map.put("parentCode", columnEntity.getColumnCode()); } else { ColumnEntity parent = columnMapper.selectById(columnEntity.getParentId()); map.put("parentCode", parent.getColumnCode()); } map.put("templatePath", columnEntity.getPath()); map.put("companyId", companyId); if (type != 1) { executor.execute(() -> { if (columnEntity.getParentId() == 0L) { List 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 ids = articleMapper.selectArticleIdsByColumnId(column.getId(), companyId,type); cmsCoreService.articlesProcess(map, ids, column.getArticleTemplate(), column.getPath()); } } } List ids = articleMapper.selectArticleIdsByColumnId(columnEntity.getId(), companyId, type); cmsCoreService.articlesProcess(map, ids, columnEntity.getArticleTemplate(), columnEntity.getPath()); releaseIndex(); }); executor.execute(() -> { cmsCoreService.columnProcess(map, columnEntity.getListTemplate()); releaseIndex(); }); } } @Override public void releaseIndex() { Map map = new HashMap<>(); Long companyId = LoginUserUtil.getCompanyId(); map.put("companyId", companyId); cmsCoreService.indexProcess(map, null); } }