package cc.mrbird.febs.ai.service.impl; import cc.mrbird.febs.ai.entity.AiProduct; import cc.mrbird.febs.ai.entity.AiProductCategory; import cc.mrbird.febs.ai.entity.AiProductDependency; import cc.mrbird.febs.ai.entity.AiProductPoint; import cc.mrbird.febs.ai.mapper.AiProductCategoryMapper; import cc.mrbird.febs.ai.mapper.AiProductDependencyMapper; import cc.mrbird.febs.ai.mapper.AiProductMapper; import cc.mrbird.febs.ai.service.AiProductDependencyService; import cc.mrbird.febs.ai.util.UUID; import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.common.entity.QueryRequest; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import java.util.Date; import java.util.List; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; @Slf4j @Service @RequiredArgsConstructor public class AiProductDependencyServiceImpl extends ServiceImpl implements AiProductDependencyService { private final AiProductDependencyMapper aiProductDependencyMapper; private final AiProductMapper aiProductMapper; private final AiProductCategoryMapper aiProductCategoryMapper; @Override public IPage listInPage(AiProductDependency dto, QueryRequest request) { Page page = new Page<>(request.getPageNum(), request.getPageSize()); LambdaQueryWrapper query = Wrappers.lambdaQuery(AiProductDependency.class); if (StrUtil.isNotEmpty(dto.getCompanyId())){ query.eq(AiProductDependency::getCompanyId, dto.getCompanyId()); } Page pages = aiProductDependencyMapper.selectPage(page, query); List records = pages.getRecords(); if (CollUtil.isNotEmpty(records)){ //stream获取全部的productId Set collectCategoryIdList = records.stream().map(AiProductDependency::getProductCategoryId).collect(Collectors.toSet()); List aiProductCategories = aiProductCategoryMapper.selectList( Wrappers.lambdaQuery(AiProductCategory.class) .select(AiProductCategory::getId, AiProductCategory::getName) .in(AiProductCategory::getId, collectCategoryIdList) ); Map aiProductCategoryMap = aiProductCategories.stream().collect(Collectors.toMap(AiProductCategory::getId, aiProductCategory -> aiProductCategory)); Set collectPrerequisiteProductIdList = records.stream().map(AiProductDependency::getPrerequisiteProductId).collect(Collectors.toSet()); List aiProductPoints = aiProductMapper.selectList( Wrappers.lambdaQuery(AiProduct.class) .select(AiProduct::getId, AiProduct::getName) .in(AiProduct::getId, collectPrerequisiteProductIdList) ); Map aiProductPointMap = aiProductPoints.stream().collect(Collectors.toMap(AiProduct::getId, aiProduct -> aiProduct)); Set collectTargetProductIdList = records.stream().map(AiProductDependency::getTargetProductId).collect(Collectors.toSet()); List aiProductTargets = aiProductMapper.selectList( Wrappers.lambdaQuery(AiProduct.class) .select(AiProduct::getId, AiProduct::getName) .in(AiProduct::getId, collectTargetProductIdList) ); Map aiProductTargetMap = aiProductTargets.stream().collect(Collectors.toMap(AiProduct::getId, aiProduct -> aiProduct)); for (AiProductDependency record : records){ record.setProductCategoryName(aiProductCategoryMap.get(record.getProductCategoryId()).getName()); record.setPrerequisiteProductName(aiProductPointMap.get(record.getPrerequisiteProductId()).getName()); record.setTargetProductName(aiProductTargetMap.get(record.getTargetProductId()).getName()); } } return pages; } @Override public FebsResponse add(AiProductDependency dto) { dto.setId(UUID.getSimpleUUIDString()); dto.setCreatedTime(new Date()); aiProductDependencyMapper.insert(dto); return new FebsResponse().success(); } @Override public FebsResponse delete(String id) { AiProductDependency aiProductDependency = aiProductDependencyMapper.selectById(id); if (aiProductDependency != null){ aiProductDependencyMapper.deleteById(id); } return new FebsResponse().success(); } }