package cc.mrbird.febs.ai.service.impl; import cc.mrbird.febs.ai.entity.AiMemberRole; import cc.mrbird.febs.ai.entity.AiProductCategory; import cc.mrbird.febs.ai.enums.ProductCategoryLevelEnum; import cc.mrbird.febs.ai.mapper.AiProductCategoryMapper; import cc.mrbird.febs.ai.service.AiProductCategoryService; 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.ObjectUtil; 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 org.springframework.transaction.annotation.Transactional; import java.util.*; import java.util.stream.Collectors; /** * AI产品类别 Service实现类 * * @author yourname * @date 2025-07-29 */ @Slf4j @Service @RequiredArgsConstructor public class AiProductCategoryServiceImpl extends ServiceImpl implements AiProductCategoryService { private final AiProductCategoryMapper aiProductCategoryMapper; @Override public AiProductCategory getById(String id) { return aiProductCategoryMapper.selectById(id); } @Override public List getList() { LambdaQueryWrapper query = Wrappers.lambdaQuery(AiProductCategory.class); query.ne(AiProductCategory::getState, 2); query.eq(AiProductCategory::getLevel, ProductCategoryLevelEnum.LEVEL_ONE.getLevel()); query.orderByDesc(AiProductCategory::getHotState); query.orderByAsc(AiProductCategory::getSort); List aiProductCategories = aiProductCategoryMapper.selectList(query); if (CollUtil.isNotEmpty(aiProductCategories)){ Set parentIds = aiProductCategories.stream().map(AiProductCategory::getId).collect(Collectors.toSet()); if (CollUtil.isNotEmpty(parentIds)){ List aiProductCategoriesChild = aiProductCategoryMapper.selectList( Wrappers.lambdaQuery(AiProductCategory.class) .in(AiProductCategory::getParentId, parentIds) .ne(AiProductCategory::getState, 2) .eq(AiProductCategory::getLevel, ProductCategoryLevelEnum.LEVEL_TWO.getLevel()) .orderByAsc(AiProductCategory::getSort) ); //Stream流操作aiProductCategoriesChild,返回一个Map>,List按照sort排序 Map> resultMap = aiProductCategoriesChild.stream() .collect(Collectors.groupingBy( AiProductCategory::getParentId, Collectors.collectingAndThen( Collectors.toList(), list -> list.stream() .sorted(Comparator.comparing(AiProductCategory::getSort)) .collect(Collectors.toList()) ) )); if (CollUtil.isNotEmpty(resultMap)){ aiProductCategories.forEach(aiProductCategory -> { List collect = resultMap.get(aiProductCategory.getId()); if (CollUtil.isNotEmpty(collect)){ aiProductCategory.setChild(collect); } }); } } } return aiProductCategories; } @Override public Map selectMapByIds(Set collect) { Map map = new HashMap<>(); if(CollUtil.isNotEmpty( collect)){ List aiProductCategories = aiProductCategoryMapper.selectList( Wrappers.lambdaQuery(AiProductCategory.class) .in(AiProductCategory::getId,collect) ); if(CollUtil.isNotEmpty(aiProductCategories)){ aiProductCategories.forEach(aiProductCategory -> map.put(aiProductCategory.getId(),aiProductCategory)); } } return map; } @Override public IPage listInPage(AiProductCategory dto, QueryRequest request) { Page page = new Page<>(request.getPageNum(), request.getPageSize()); LambdaQueryWrapper query = Wrappers.lambdaQuery(AiProductCategory.class); query.ne(AiProductCategory::getState, 2); query.orderByDesc(AiProductCategory::getHotState); query.orderByAsc(AiProductCategory::getSort); Page pages = aiProductCategoryMapper.selectPage(page, query); List records = pages.getRecords(); if (CollUtil.isNotEmpty( records)){ //stream流获取全部的parentId Set parentIds = records.stream().map(AiProductCategory::getParentId).collect(Collectors.toSet()); if (CollUtil.isNotEmpty(parentIds)){ List aiProductCategories = aiProductCategoryMapper.selectList( Wrappers.lambdaUpdate(AiProductCategory.class) .in(AiProductCategory::getId, parentIds) ); Map map = aiProductCategories.stream().collect( Collectors.toMap(AiProductCategory::getId, aiProductCategory -> aiProductCategory)); records.forEach(aiProductCategory -> { AiProductCategory orDefault = map.getOrDefault(aiProductCategory.getParentId(), null); if(ObjectUtil.isNotNull(orDefault)){ aiProductCategory.setParentName(orDefault.getName()); } }); } } return pages; } @Override public FebsResponse changeState(String id, Integer type, Integer state) { AiProductCategory entity = this.getById(id); if(ObjectUtil.isNotNull(entity)){ if(1 == type){ aiProductCategoryMapper.update(null, Wrappers.lambdaUpdate(AiProductCategory.class) .set(AiProductCategory::getState, state) .eq(AiProductCategory::getId, id) ); } if(2 == type){ aiProductCategoryMapper.update(null, Wrappers.lambdaUpdate(AiProductCategory.class) .set(AiProductCategory::getHotState, state) .eq(AiProductCategory::getId, id) ); } } return new FebsResponse().success().message("操作成功"); } @Override public FebsResponse add(AiProductCategory dto) { AiProductCategory entity = new AiProductCategory(); entity.setId(UUID.getSimpleUUIDString()); entity.setCompanyId(dto.getCompanyId()); entity.setCode(dto.getCode()); entity.setName(dto.getName()); entity.setBackImg(dto.getBackImg()); entity.setIconImg(dto.getIconImg()); entity.setSort(dto.getSort()); entity.setCreatedTime(new Date()); entity.setParentId(dto.getParentId()); entity.setLevel(StrUtil.isNotEmpty(dto.getParentId()) ? 2 : 1); this.save(entity); return new FebsResponse().success().message("操作成功"); } @Override public FebsResponse update(AiProductCategory dto) { String id = dto.getId(); AiProductCategory entity = this.getById(id); if (ObjectUtil.isNotNull( entity)){ this.update(null, Wrappers.lambdaUpdate(AiProductCategory.class) .set(AiProductCategory::getCode, dto.getCode()) .set(AiProductCategory::getName, dto.getName()) .set(AiProductCategory::getBackImg, dto.getBackImg()) .set(AiProductCategory::getIconImg, dto.getIconImg()) .set(AiProductCategory::getSort, dto.getSort()) .set(AiProductCategory::getUpdatedTime, new Date()) .eq(AiProductCategory::getId, id) ); } return new FebsResponse().success().message("操作成功"); } @Override public FebsResponse delete(String id) { AiProductCategory entity = this.getById(id); if(ObjectUtil.isNotNull( entity)){ this.update(null, Wrappers.lambdaUpdate(AiProductCategory.class) .set(AiProductCategory::getState, 2) .set(AiProductCategory::getUpdatedTime, new Date()) .eq(AiProductCategory::getId, id)); } return new FebsResponse().success().message("操作成功"); } @Override public List categoryTree() { return this.getList() ; } @Override public List parent() { LambdaQueryWrapper query = Wrappers.lambdaQuery(AiProductCategory.class); query.select(AiProductCategory::getId,AiProductCategory::getName); query.eq(AiProductCategory::getLevel, 1); query.ne(AiProductCategory::getState, 2); return this.getBaseMapper().selectList(query); } }