package org.jeecg.modules.dnc.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.apache.shiro.SecurityUtils; import org.jeecg.common.system.vo.LoginUser; import org.jeecg.modules.dnc.entity.ProductMix; import org.jeecg.modules.dnc.mapper.ProductMixMapper; import org.jeecg.modules.dnc.service.IPermissionStreamNewService; import org.jeecg.modules.dnc.service.IProductMixService; import org.jeecg.modules.dnc.utils.TreeBuilder; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.*; @Service public class ProductMixServiceImpl extends ServiceImpl implements IProductMixService { @Autowired private IPermissionStreamNewService permissionStreamNewService; @Override public List getTree() { LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); List rawData = new ArrayList<>(); if (loginUser.getUsername().equals("admin")) { //不需要权限过滤 rawData=permissionStreamNewService.loadProductMixAll(loginUser.getId()); }else{ //需要权限过滤 String productIds = loginUser.getProductionIds(); if (productIds != null && !productIds.isEmpty()) { List productIdList = Arrays.asList(productIds.split(",")); rawData = permissionStreamNewService.loadProductMix(loginUser.getId(),productIdList); } } TreeBuilder builder = new TreeBuilder(); TreeBuilder.CleanResult cleanResult = builder.preprocessData(rawData); List sorted = builder.topologicalSort( cleanResult.getValidNodes(), cleanResult.getNodeMap() ); List result =builder.assembleTree(sorted, cleanResult.getNodeMap()); result.sort(Comparator.comparing(ProductMix::getCreateTime, Comparator.nullsLast(Date::compareTo))); return result; } }