package com.xcong.farmer.cms.core.handler; import cn.hutool.core.collection.CollUtil; import com.xcong.farmer.cms.configurations.properties.CmsProperties; import com.xcong.farmer.cms.conversion.ColumnConversion; import com.xcong.farmer.cms.core.node.AttrNode; import com.xcong.farmer.cms.core.tag.data.NavData; import com.xcong.farmer.cms.core.tag.model.Nav; 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.vo.AdminColumnVo; import com.xcong.farmer.cms.utils.SpringContextHolder; import lombok.extern.slf4j.Slf4j; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @author wzy * @date 2022-06-28 **/ @Slf4j public class NavDataParserHandler implements DataParserHandler { private ColumnMapper columnMapper = SpringContextHolder.getBean(ColumnMapper.class); private ArticleMapper articleMapper = SpringContextHolder.getBean(ArticleMapper.class); private String baseUrl = ""; @Override public void dataParser(AttrNode node) { log.info("导航栏解析"); Long companyId = (Long) node.getSystemDataValue("companyId"); baseUrl = (String) node.getSystemDataValue("baseUrl"); List columns = columnMapper.selectColumnByParentId(0L, companyId, 1); if (CollUtil.isEmpty(columns)) { return; } List list = new ArrayList<>(); NavData index = new NavData(); index.setTitle("首页"); index.setUrl(baseUrl); index.setCode("index"); list.add(index); for (ColumnEntity column : columns) { NavData navData = columnToNav(column); List child = columnMapper.selectColumnByParentId(column.getId(), companyId, 1); if (CollUtil.isNotEmpty(child)) { List childNavData = columnsToNavs(child); navData.setChildren(childNavData); } list.add(navData); } node.setData(list); } public List columnsToNavs(List columns) { List list = new ArrayList<>(); for (ColumnEntity column : columns) { list.add(columnToNav(column)); } return list; } public NavData columnToNav(ColumnEntity column) { NavData navData = ColumnConversion.INSTANCE.columnToNav(column); navData.setUrl(baseUrl + column.getPath()); if (column.getType() == 2) { if (column.getTargetType() == 1) { ArticleEntity article = this.articleMapper.selectArticleById(Long.parseLong(column.getTargetUrl())); navData.setUrl(baseUrl + article.getPath() + "/" + article.getId() + ".html"); } else if (column.getTargetType() == 2) { ColumnEntity columnEntity = this.columnMapper.selectByCodeAndCompanyId(column.getTargetUrl(), column.getCompanyId()); navData.setUrl(baseUrl + columnEntity.getPath()); } else { navData.setUrl(column.getTargetUrl()); } } return navData; } }