package cn.iocoder.yudao.module.ai.dal.mysql.knowledge; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.framework.mybatis.core.query.MPJLambdaWrapperX; import cn.iocoder.yudao.module.ai.controller.admin.knowledge.vo.segment.AiKnowledgeSegmentPageReqVO; import cn.iocoder.yudao.module.ai.controller.admin.knowledge.vo.segment.AiKnowledgeSegmentProcessRespVO; import cn.iocoder.yudao.module.ai.dal.dataobject.knowledge.AiKnowledgeSegmentDO; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.github.yulichang.wrapper.MPJLambdaWrapper; import org.apache.ibatis.annotations.Mapper; import java.util.Collection; import java.util.List; /** * AI 知识库分片 Mapper * * @author xiaoxin */ @Mapper public interface AiKnowledgeSegmentMapper extends BaseMapperX { default PageResult selectPage(AiKnowledgeSegmentPageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() .eq(AiKnowledgeSegmentDO::getDocumentId, reqVO.getDocumentId()) .likeIfPresent(AiKnowledgeSegmentDO::getContent, reqVO.getContent()) .eqIfPresent(AiKnowledgeSegmentDO::getStatus, reqVO.getStatus()) .orderByDesc(AiKnowledgeSegmentDO::getId)); } default List selectListByVectorIds(List vectorIds) { return selectList(new LambdaQueryWrapperX() .in(AiKnowledgeSegmentDO::getVectorId, vectorIds) .orderByDesc(AiKnowledgeSegmentDO::getId)); } default List selectListByDocumentId(Long documentId) { return selectList(new LambdaQueryWrapperX() .eq(AiKnowledgeSegmentDO::getDocumentId, documentId) .orderByDesc(AiKnowledgeSegmentDO::getId)); } default List selectListByKnowledgeIdAndStatus(Long knowledgeId, Integer status) { return selectList(AiKnowledgeSegmentDO::getKnowledgeId, knowledgeId, AiKnowledgeSegmentDO::getStatus, status); } default List selectProcessList(Collection documentIds) { MPJLambdaWrapper wrapper = new MPJLambdaWrapperX() .selectAs(AiKnowledgeSegmentDO::getDocumentId, AiKnowledgeSegmentProcessRespVO::getDocumentId) .selectCount(AiKnowledgeSegmentDO::getId, "count") .select("COUNT(CASE WHEN vector_id IS NOT NULL AND vector_id <> '" + AiKnowledgeSegmentDO.VECTOR_ID_EMPTY + "' THEN 1 ELSE NULL END) AS embeddingCount") .in(AiKnowledgeSegmentDO::getDocumentId, documentIds) .groupBy(AiKnowledgeSegmentDO::getDocumentId); return selectJoinList(AiKnowledgeSegmentProcessRespVO.class, wrapper); } default void updateRetrievalCountIncrByIds(List ids) { update(new LambdaUpdateWrapper() .setSql(" retrieval_count = retrieval_count + 1") .in(AiKnowledgeSegmentDO::getId, ids)); } }