From 33fb9a2fdb0e6cd68a987bbdcbe22ef587fa5813 Mon Sep 17 00:00:00 2001 From: Administrator <15274802129@163.com> Date: Wed, 17 Sep 2025 16:30:32 +0800 Subject: [PATCH] refactor(mallMember): 修改会员列表中管理员字段的标题 --- src/main/java/cc/mrbird/febs/ai/service/impl/AiProductCategoryServiceImpl.java | 309 +++++++++++++++++++++++++++++++++------------------ 1 files changed, 198 insertions(+), 111 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/ai/service/impl/AiProductCategoryServiceImpl.java b/src/main/java/cc/mrbird/febs/ai/service/impl/AiProductCategoryServiceImpl.java index ca52aa9..23dd18f 100644 --- a/src/main/java/cc/mrbird/febs/ai/service/impl/AiProductCategoryServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/ai/service/impl/AiProductCategoryServiceImpl.java @@ -1,16 +1,29 @@ 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 cc.mrbird.febs.common.exception.FebsException; +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.List; +import java.util.*; +import java.util.stream.Collectors; /** * AI产品类别 Service实现类 @@ -27,135 +40,209 @@ @Override public AiProductCategory getById(String id) { - return this.getById(id); + return aiProductCategoryMapper.selectById(id); } @Override - public List<AiProductCategory> getByCompanyId(String companyId) { - LambdaQueryWrapper<AiProductCategory> queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(AiProductCategory::getCompanyId, companyId); - queryWrapper.orderByAsc(AiProductCategory::getSort); - queryWrapper.orderByDesc(AiProductCategory::getCreatedTime); - return this.list(queryWrapper); - } - - @Override - public AiProductCategory getByCode(String code) { - LambdaQueryWrapper<AiProductCategory> queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(AiProductCategory::getCode, code); - return this.getOne(queryWrapper); - } - - @Override - public List<AiProductCategory> getByName(String name) { - LambdaQueryWrapper<AiProductCategory> queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.like(AiProductCategory::getName, name); - queryWrapper.orderByAsc(AiProductCategory::getSort); - queryWrapper.orderByDesc(AiProductCategory::getCreatedTime); - return this.list(queryWrapper); - } - - @Override - public List<AiProductCategory> getByState(Integer state) { - LambdaQueryWrapper<AiProductCategory> queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(AiProductCategory::getState, state); - queryWrapper.orderByAsc(AiProductCategory::getSort); - queryWrapper.orderByDesc(AiProductCategory::getCreatedTime); - return this.list(queryWrapper); - } - - @Override - public List<AiProductCategory> getByHotState(Integer hotState) { - LambdaQueryWrapper<AiProductCategory> queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(AiProductCategory::getHotState, hotState); - queryWrapper.orderByAsc(AiProductCategory::getSort); - queryWrapper.orderByDesc(AiProductCategory::getCreatedTime); - return this.list(queryWrapper); - } - - @Override - public List<AiProductCategory> getByCompanyIdAndState(String companyId, Integer state) { - LambdaQueryWrapper<AiProductCategory> queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(AiProductCategory::getCompanyId, companyId); - queryWrapper.eq(AiProductCategory::getState, state); - queryWrapper.orderByAsc(AiProductCategory::getSort); - queryWrapper.orderByDesc(AiProductCategory::getCreatedTime); - return this.list(queryWrapper); - } - - @Override - public List<AiProductCategory> getByCompanyIdAndHotState(String companyId, Integer hotState) { - LambdaQueryWrapper<AiProductCategory> queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(AiProductCategory::getCompanyId, companyId); - queryWrapper.eq(AiProductCategory::getHotState, hotState); - queryWrapper.orderByAsc(AiProductCategory::getSort); - queryWrapper.orderByDesc(AiProductCategory::getCreatedTime); - return this.list(queryWrapper); - } - - @Override - public List<AiProductCategory> getEnabledCategories() { - LambdaQueryWrapper<AiProductCategory> queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(AiProductCategory::getState, 1); // 1-启用 - queryWrapper.orderByAsc(AiProductCategory::getSort); - queryWrapper.orderByDesc(AiProductCategory::getCreatedTime); - return this.list(queryWrapper); - } - - @Override - @Transactional(rollbackFor = Exception.class) - public boolean saveProductCategory(AiProductCategory aiProductCategory) { - try { - return this.save(aiProductCategory); - } catch (Exception e) { - log.error("保存AI产品类别失败: ", e); - return false; + public List<AiProductCategory> getList(String companyId) { + LambdaQueryWrapper<AiProductCategory> query = Wrappers.lambdaQuery(AiProductCategory.class); + if (StrUtil.isNotEmpty(companyId)){ + query.eq(AiProductCategory::getCompanyId, companyId); } + query.ne(AiProductCategory::getState, 2); + query.eq(AiProductCategory::getLevel, ProductCategoryLevelEnum.LEVEL_ONE.getLevel()); + query.orderByDesc(AiProductCategory::getHotState); + query.orderByAsc(AiProductCategory::getSort); + List<AiProductCategory> aiProductCategories = aiProductCategoryMapper.selectList(query); + if (CollUtil.isNotEmpty(aiProductCategories)){ + Set<String> parentIds = aiProductCategories.stream().map(AiProductCategory::getId).collect(Collectors.toSet()); + if (CollUtil.isNotEmpty(parentIds)){ + List<AiProductCategory> 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<ParentId,List<AiProductCategory>>,List<AiProductCategory>按照sort排序 + Map<String, List<AiProductCategory>> 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<AiProductCategory> collect = resultMap.get(aiProductCategory.getId()); + if (CollUtil.isNotEmpty(collect)){ + aiProductCategory.setChild(collect); + } + }); + } + } + } + return aiProductCategories; } @Override - @Transactional(rollbackFor = Exception.class) - public boolean saveBatchProductCategories(List<AiProductCategory> productCategories) { - try { - return this.saveBatch(productCategories); - } catch (Exception e) { - log.error("批量保存AI产品类别失败: ", e); - return false; + public Map<String, AiProductCategory> selectMapByIds(Set<String> collect) { + Map<String,AiProductCategory> map = new HashMap<>(); + if(CollUtil.isNotEmpty( collect)){ + List<AiProductCategory> 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 - @Transactional(rollbackFor = Exception.class) - public boolean updateProductCategory(AiProductCategory aiProductCategory) { - try { - return this.updateById(aiProductCategory); - } catch (Exception e) { - log.error("更新AI产品类别失败: ", e); - return false; + public IPage<AiProductCategory> listInPage(AiProductCategory dto, QueryRequest request) { + + + Page<AiProductCategory> page = new Page<>(request.getPageNum(), request.getPageSize()); + LambdaQueryWrapper<AiProductCategory> query = Wrappers.lambdaQuery(AiProductCategory.class); + if (StrUtil.isNotEmpty(dto.getCompanyId())){ + query.eq(AiProductCategory::getCompanyId, dto.getCompanyId()); } + query.ne(AiProductCategory::getState, 2); + query.orderByDesc(AiProductCategory::getHotState); + query.orderByAsc(AiProductCategory::getSort); + Page<AiProductCategory> pages = aiProductCategoryMapper.selectPage(page, query); + List<AiProductCategory> records = pages.getRecords(); + if (CollUtil.isNotEmpty( records)){ + //stream流获取全部的parentId + Set<String> parentIds = records.stream().map(AiProductCategory::getParentId).collect(Collectors.toSet()); + if (CollUtil.isNotEmpty(parentIds)){ + List<AiProductCategory> aiProductCategories = aiProductCategoryMapper.selectList( + Wrappers.lambdaUpdate(AiProductCategory.class) + .in(AiProductCategory::getId, parentIds) + ); + Map<String, AiProductCategory> 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 - @Transactional(rollbackFor = Exception.class) - public boolean deleteById(String id) { - try { - return this.removeById(id); - } catch (Exception e) { - log.error("删除AI产品类别失败: ", e); - return false; + 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 - @Transactional(rollbackFor = Exception.class) - public boolean deleteByCompanyId(String companyId) { - try { - LambdaQueryWrapper<AiProductCategory> queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(AiProductCategory::getCompanyId, companyId); - return this.remove(queryWrapper); - } catch (Exception e) { - log.error("根据公司ID删除AI产品类别失败: ", e); - return false; + 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); + dto.setLevel(ProductCategoryLevelEnum.LEVEL_ONE.getLevel()); + String parentId = dto.getParentId(); + if (parentId.equals( id)){ + throw new FebsException("父类不能选择自己"); } + if (StrUtil.isNotEmpty(parentId)){ + AiProductCategory parent = this.getById(parentId); + if ( + ObjectUtil.isNotNull(parent) + && parent.getLevel() < ProductCategoryLevelEnum.LEVEL_TWO.getLevel() + ){ + dto.setLevel(parent.getLevel() +1); + dto.setParentId(parentId); + } + } + 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()) + .set(AiProductCategory::getParentId, dto.getParentId()) + .set(AiProductCategory::getLevel, dto.getLevel()) + .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<AiProductCategory> categoryTree(String companyId) { + return this.getList(companyId) ; + } + + @Override + public List<AiProductCategory> parent(String companyId) { + LambdaQueryWrapper<AiProductCategory> query = Wrappers.lambdaQuery(AiProductCategory.class); + query.select(AiProductCategory::getId,AiProductCategory::getName); + if (StrUtil.isNotEmpty(companyId)){ + query.eq(AiProductCategory::getCompanyId, companyId); + } + query.eq(AiProductCategory::getLevel, 1); + query.ne(AiProductCategory::getState, 2); + return this.getBaseMapper().selectList(query); } } -- Gitblit v1.9.1