package com.iailab.module.ai.dal.mysql.knowledge; import com.iailab.framework.common.pojo.PageResult; import com.iailab.framework.mybatis.core.mapper.BaseMapperX; import com.iailab.framework.mybatis.core.query.LambdaQueryWrapperX; import com.iailab.framework.mybatis.core.query.MPJLambdaWrapperX; import com.iailab.module.ai.controller.admin.knowledge.vo.segment.AiKnowledgeSegmentPageReqVO; import com.iailab.module.ai.controller.admin.knowledge.vo.segment.AiKnowledgeSegmentProcessRespVO; import com.iailab.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 vectorIdList) { return selectList(new LambdaQueryWrapperX() .in(AiKnowledgeSegmentDO::getVectorId, vectorIdList) .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 > '" + 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)); } }