package cc.mrbird.febs.ai.service.impl; import cc.mrbird.febs.ai.entity.*; import cc.mrbird.febs.ai.mapper.AiProductMapper; import cc.mrbird.febs.ai.req.AdminMoveChooseInfoDto; import cc.mrbird.febs.ai.service.*; 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 AiProductServiceImpl extends ServiceImpl implements AiProductService { private final AiProductMapper aiProductMapper; private final AiProductCategoryService aiProductCategoryService; private final AiProductPointLinkService aiProductPointLinkService; private final AiProductRoleLinkService aiProductRoleLinkService; private final AiProductQuestionLinkService aiProductQuestionLinkService; @Override public AiProduct getById(String id) { return aiProductMapper.selectById(id); } @Override public IPage listInPage(AiProduct dto, QueryRequest request) { Page page = new Page<>(request.getPageNum(), request.getPageSize()); LambdaQueryWrapper query = Wrappers.lambdaQuery(AiProduct.class); if (StrUtil.isNotEmpty(dto.getProductCategoryId())){ query.eq(AiProduct::getProductCategoryId, dto.getProductCategoryId()); } if (StrUtil.isNotEmpty(dto.getCompanyId())){ query.eq(AiProduct::getCompanyId, dto.getCompanyId()); } query.ne(AiProduct::getState, 2); query.orderByDesc(AiProduct::getHotState); query.orderByAsc(AiProduct::getSort); Page pages = aiProductMapper.selectPage(page, query); List records = pages.getRecords(); if (CollUtil.isNotEmpty( records)){ Set collect = records.stream().map(AiProduct::getProductCategoryId).collect(Collectors.toSet()); if(CollUtil.isNotEmpty( collect)){ Map map = aiProductCategoryService.selectMapByIds(collect); for (AiProduct record : records){ AiProductCategory orDefault = map.getOrDefault(record.getProductCategoryId(), null); if(ObjectUtil.isNotNull(orDefault)){ record.setProductCategoryName(orDefault.getName()); } } } } return pages; } @Override public FebsResponse changeState(String id, Integer type, Integer state) { AiProduct entity = this.getById(id); if(ObjectUtil.isNotNull(entity)){ if(1 == type){ aiProductMapper.update(null, Wrappers.lambdaUpdate(AiProduct.class) .set(AiProduct::getState, state) .eq(AiProduct::getId, id) ); } if(2 == type){ aiProductMapper.update(null, Wrappers.lambdaUpdate(AiProduct.class) .set(AiProduct::getHotState, state) .eq(AiProduct::getId, id) ); } } return new FebsResponse().success().message("操作成功"); } @Override public FebsResponse add(AiProduct dto) { AiProduct entity = new AiProduct(); 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.setProductCategoryId(dto.getProductCategoryId()); entity.setScene(dto.getScene()); entity.setTarget(dto.getTarget()); entity.setDescription(dto.getDescription()); entity.setQuestionCount(dto.getQuestionCount()); entity.setCreatedTime(new Date()); this.save(entity); return new FebsResponse().success().message("操作成功"); } @Override public FebsResponse update(AiProduct dto) { String id = dto.getId(); AiProduct entity = this.getById(id); if (ObjectUtil.isNotNull( entity)){ this.update(null, Wrappers.lambdaUpdate(AiProduct.class) .set(AiProduct::getCode, dto.getCode()) .set(AiProduct::getName, dto.getName()) .set(AiProduct::getBackImg, dto.getBackImg()) .set(AiProduct::getIconImg, dto.getIconImg()) .set(AiProduct::getSort, dto.getSort()) .set(AiProduct::getProductCategoryId, dto.getProductCategoryId()) .set(AiProduct::getScene, dto.getScene()) .set(AiProduct::getTarget, dto.getTarget()) .set(AiProduct::getDescription, dto.getDescription()) .set(AiProduct::getQuestionCount, dto.getQuestionCount()) .set(AiProduct::getUpdatedTime, new Date()) .eq(AiProduct::getId, id) ); } return new FebsResponse().success().message("操作成功"); } @Override public FebsResponse delete(String id) { AiProduct entity = this.getById(id); if(ObjectUtil.isNotNull( entity)){ this.update(null, Wrappers.lambdaUpdate(AiProduct.class) .set(AiProduct::getState, 2) .set(AiProduct::getUpdatedTime, new Date()) .eq(AiProduct::getId, id)); } return new FebsResponse().success().message("操作成功"); } @Override public List selectList(String companyId) { LambdaQueryWrapper query = Wrappers.lambdaQuery(AiProduct.class); if (StrUtil.isNotEmpty(companyId)){ query.eq(AiProduct::getCompanyId, companyId); } query.ne(AiProduct::getState, 2); return aiProductMapper.selectList(query); } @Override public FebsResponse productSet(AdminMoveChooseInfoDto dto) { String chooseId = dto.getChooseId(); List chooseIds = dto.getChooseIds(); AiProduct aiProduct = this.getById(chooseId); if (ObjectUtil.isNotNull(aiProduct)) { String companyId = aiProduct.getCompanyId(); aiProductPointLinkService.deleteByQuery( Wrappers.lambdaQuery(AiProductPointLink.class) .eq(AiProductPointLink::getProductId,chooseId) .eq(AiProductPointLink::getCompanyId,companyId) ); if(CollUtil.isNotEmpty(chooseIds)){ Date createdTime = new Date(); for (String item : chooseIds){ AiProductPointLink entity = new AiProductPointLink(); entity.setId(UUID.getSimpleUUIDString()); entity.setCompanyId(companyId); entity.setProductId(chooseId); entity.setProductPointId(item); entity.setCreatedTime(createdTime); aiProductPointLinkService.getBaseMapper().insert(entity); } } } return new FebsResponse().success().message("操作成功"); } @Override public FebsResponse productRoleSet(AdminMoveChooseInfoDto dto) { String chooseId = dto.getChooseId(); List chooseIds = dto.getChooseIds(); AiProduct aiProduct = this.getById(chooseId); if (ObjectUtil.isNotNull(aiProduct)) { String companyId = aiProduct.getCompanyId(); aiProductRoleLinkService.deleteByQuery( Wrappers.lambdaQuery(AiProductRoleLink.class) .eq(AiProductRoleLink::getProductId,chooseId) .eq(AiProductRoleLink::getCompanyId,companyId) ); if(CollUtil.isNotEmpty(chooseIds)){ Date createdTime = new Date(); for (String item : chooseIds){ AiProductRoleLink entity = new AiProductRoleLink(); entity.setId(UUID.getSimpleUUIDString()); entity.setCompanyId(companyId); entity.setProductId(chooseId); entity.setProductRoleId(item); entity.setCreatedTime(createdTime); aiProductRoleLinkService.getBaseMapper().insert(entity); } } } return new FebsResponse().success().message("操作成功"); } @Override public FebsResponse productQuestionSet(AdminMoveChooseInfoDto dto) { String chooseId = dto.getChooseId(); List chooseIds = dto.getChooseIds(); AiProduct aiProduct = this.getById(chooseId); if (ObjectUtil.isNotNull(aiProduct)) { String companyId = aiProduct.getCompanyId(); aiProductQuestionLinkService.deleteByQuery( Wrappers.lambdaQuery(AiProductQuestionLink.class) .eq(AiProductQuestionLink::getProductId,chooseId) .eq(AiProductQuestionLink::getCompanyId,companyId) ); if(CollUtil.isNotEmpty(chooseIds)){ Date createdTime = new Date(); for (String item : chooseIds){ AiProductQuestionLink entity = new AiProductQuestionLink(); entity.setId(UUID.getSimpleUUIDString()); entity.setCompanyId(companyId); entity.setProductId(chooseId); entity.setProductQuestionId(item); entity.setCreatedTime(createdTime); aiProductQuestionLinkService.getBaseMapper().insert(entity); } } } return new FebsResponse().success().message("操作成功"); } }