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.AiProductPoint; import cc.mrbird.febs.ai.mapper.AiProductPointMapper; import cc.mrbird.febs.ai.service.AiProductCategoryService; import cc.mrbird.febs.ai.service.AiProductPointLinkService; import cc.mrbird.febs.ai.service.AiProductPointService; 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 java.util.Date; import java.util.List; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; /** * AI产品知识点 Service实现类 * * @author yourname * @date 2025-07-29 */ @Slf4j @Service @RequiredArgsConstructor public class AiProductPointServiceImpl extends ServiceImpl implements AiProductPointService { private final AiProductPointMapper aiProductPointMapper; private final AiProductPointLinkService aiProductPointLinkService; private final AiProductCategoryService aiProductCategoryService; @Override public AiProductPoint getById(String id) { return aiProductPointMapper.selectById(id); } @Override public IPage listInPage(AiProductPoint dto, QueryRequest request) { Page page = new Page<>(request.getPageNum(), request.getPageSize()); LambdaQueryWrapper query = Wrappers.lambdaQuery(AiProductPoint.class); if (StrUtil.isNotEmpty(dto.getCompanyId())){ query.eq(AiProductPoint::getCompanyId, dto.getCompanyId()); } Page pages = aiProductPointMapper.selectPage(page, query); List records = pages.getRecords(); if (CollUtil.isNotEmpty( records)){ Set collect = records.stream().map(AiProductPoint::getProductCategoryId).collect(Collectors.toSet()); if(CollUtil.isNotEmpty( collect)){ Map map = aiProductCategoryService.selectMapByIds(collect); for (AiProductPoint record : records){ AiProductCategory orDefault = map.getOrDefault(record.getProductCategoryId(), null); if(ObjectUtil.isNotNull(orDefault)){ record.setProductCategoryName(orDefault.getName()); } } } } return pages; } @Override public FebsResponse add(AiProductPoint dto) { AiProductPoint entity = new AiProductPoint(); entity.setId(UUID.getSimpleUUIDString()); entity.setProductCategoryId(dto.getProductCategoryId()); entity.setCompanyId(dto.getCompanyId()); entity.setIsNormal(dto.getIsNormal() ); entity.setFinderUserName(dto.getFinderUserName()); entity.setFeedId(dto.getFeedId()); entity.setFeedImg(dto.getFeedImg()); entity.setTitle(dto.getTitle()); entity.setDescription(dto.getDescription()); entity.setCreatedTime(new Date()); this.save(entity); return new FebsResponse().success().message("操作成功"); } @Override public FebsResponse update(AiProductPoint dto) { String id = dto.getId(); AiProductPoint entity = this.getById(id); if (ObjectUtil.isNotNull( entity)){ this.update(null, Wrappers.lambdaUpdate(AiProductPoint.class) .set(AiProductPoint::getIsNormal, dto.getIsNormal()) .set(AiProductPoint::getProductCategoryId, dto.getProductCategoryId()) .set(AiProductPoint::getFinderUserName, dto.getFinderUserName()) .set(AiProductPoint::getFeedId, dto.getFeedId()) .set(AiProductPoint::getTitle, dto.getTitle()) .set(AiProductPoint::getFeedImg, dto.getFeedImg()) .set(AiProductPoint::getDescription, dto.getDescription()) .set(AiProductPoint::getUpdatedTime, new Date()) .eq(AiProductPoint::getId, id) ); } return new FebsResponse().success().message("操作成功"); } @Override public FebsResponse delete(String id) { AiProductPoint entity = this.getById(id); if(ObjectUtil.isNotNull( entity)){ // 删除 aiProductPointMapper.deleteById( id); aiProductPointLinkService.deleteByProductPointId(id); } return new FebsResponse().success().message("操作成功"); } @Override public List pointTree(String companyId) { LambdaQueryWrapper query = Wrappers.lambdaQuery(AiProductPoint.class); if (StrUtil.isNotEmpty(companyId)){ query.eq(AiProductPoint::getCompanyId, companyId); } return aiProductPointMapper.selectList(query); } }