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<Runnable>());
|
|
@Override
|
public void releaseArticle(Long id) {
|
Long companyId = LoginUserUtil.getCompanyId();
|
ArticleEntity article = articleMapper.selectById(id);
|
ColumnEntity column = columnMapper.selectById(article.getColumnId());
|
|
Map<String, Object> data = new HashMap<>();
|
data.put("id", article.getId());
|
data.put("companyId", companyId);
|
|
executor.execute(()->{
|
log.info("执行文章发布");
|
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<String, Object> 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<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();
|
});
|
}
|
}
|
|
@Override
|
public void releaseIndex() {
|
Map<String, Object> map = new HashMap<>();
|
Long companyId = LoginUserUtil.getCompanyId();
|
map.put("companyId", companyId);
|
|
cmsCoreService.indexProcess(map, null);
|
}
|
}
|