From bc225d35575b0cd0aab64d7e2623708e2c2f5af2 Mon Sep 17 00:00:00 2001 From: "zhiye.sun" Date: Tue, 19 May 2026 16:21:51 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E7=BB=9F=E4=B8=80RAG=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E6=9F=A5=E8=AF=A2=E8=AF=B7=E6=B1=82=E4=B8=8E=E8=BF=94?= =?UTF-8?q?=E5=9B=9E=E4=BD=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../rag/controller/RagDocumentController.java | 14 +++++++++-- .../rag/controller/RagStoreController.java | 14 +++++++++-- .../dto/request/RagDocumentQueryRequest.java | 24 +++++++++++++++++++ .../rag/dto/request/RagStoreQueryRequest.java | 18 ++++++++++++++ .../rag/service/IRagDocumentService.java | 5 ++++ .../bruce/rag/service/IRagStoreService.java | 5 ++++ .../service/impl/RagDocumentServiceImpl.java | 18 ++++++++++++++ .../rag/service/impl/RagStoreServiceImpl.java | 17 +++++++++++++ .../bruce/rag/RagComponentStructureTests.java | 24 +++++++++++++++++++ 9 files changed, 135 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/bruce/rag/dto/request/RagDocumentQueryRequest.java create mode 100644 src/main/java/com/bruce/rag/dto/request/RagStoreQueryRequest.java diff --git a/src/main/java/com/bruce/rag/controller/RagDocumentController.java b/src/main/java/com/bruce/rag/controller/RagDocumentController.java index 83f3723..11908df 100644 --- a/src/main/java/com/bruce/rag/controller/RagDocumentController.java +++ b/src/main/java/com/bruce/rag/controller/RagDocumentController.java @@ -1,11 +1,15 @@ package com.bruce.rag.controller; +import com.bruce.common.domain.model.RequestResult; +import com.bruce.rag.dto.request.RagDocumentQueryRequest; import com.bruce.rag.entity.RagDocument; import com.bruce.rag.service.IRagDocumentService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -21,7 +25,13 @@ public class RagDocumentController { @Operation(summary = "查询全部知识库文档") @GetMapping - public List list() { - return ragDocumentService.list(); + public RequestResult> list() { + return RequestResult.success(ragDocumentService.list()); + } + + @Operation(summary = "按条件查询知识库文档") + @PostMapping("/query") + public RequestResult> query(@RequestBody RagDocumentQueryRequest request) { + return RequestResult.success(ragDocumentService.query(request)); } } diff --git a/src/main/java/com/bruce/rag/controller/RagStoreController.java b/src/main/java/com/bruce/rag/controller/RagStoreController.java index bc31f6d..505a923 100644 --- a/src/main/java/com/bruce/rag/controller/RagStoreController.java +++ b/src/main/java/com/bruce/rag/controller/RagStoreController.java @@ -1,11 +1,15 @@ package com.bruce.rag.controller; +import com.bruce.common.domain.model.RequestResult; +import com.bruce.rag.dto.request.RagStoreQueryRequest; import com.bruce.rag.entity.RagStore; import com.bruce.rag.service.IRagStoreService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -21,7 +25,13 @@ public class RagStoreController { @Operation(summary = "查询全部知识库") @GetMapping - public List list() { - return ragStoreService.list(); + public RequestResult> list() { + return RequestResult.success(ragStoreService.list()); + } + + @Operation(summary = "按条件查询知识库") + @PostMapping("/query") + public RequestResult> query(@RequestBody RagStoreQueryRequest request) { + return RequestResult.success(ragStoreService.query(request)); } } diff --git a/src/main/java/com/bruce/rag/dto/request/RagDocumentQueryRequest.java b/src/main/java/com/bruce/rag/dto/request/RagDocumentQueryRequest.java new file mode 100644 index 0000000..4eea021 --- /dev/null +++ b/src/main/java/com/bruce/rag/dto/request/RagDocumentQueryRequest.java @@ -0,0 +1,24 @@ +package com.bruce.rag.dto.request; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +@Schema(description = "RAG知识库文档查询请求") +public class RagDocumentQueryRequest { + + @Schema(description = "知识库ID") + private Long storeId; + + @Schema(description = "附件ID") + private Long attachmentId; + + @Schema(description = "解析状态") + private String parseStatus; + + @Schema(description = "索引状态") + private String indexStatus; + + @Schema(description = "是否启用") + private Boolean enabled; +} diff --git a/src/main/java/com/bruce/rag/dto/request/RagStoreQueryRequest.java b/src/main/java/com/bruce/rag/dto/request/RagStoreQueryRequest.java new file mode 100644 index 0000000..490f01a --- /dev/null +++ b/src/main/java/com/bruce/rag/dto/request/RagStoreQueryRequest.java @@ -0,0 +1,18 @@ +package com.bruce.rag.dto.request; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +@Schema(description = "RAG知识库查询请求") +public class RagStoreQueryRequest { + + @Schema(description = "知识库编码") + private String storeCode; + + @Schema(description = "知识库名称") + private String storeName; + + @Schema(description = "状态") + private String status; +} diff --git a/src/main/java/com/bruce/rag/service/IRagDocumentService.java b/src/main/java/com/bruce/rag/service/IRagDocumentService.java index 992405a..f82d8a1 100644 --- a/src/main/java/com/bruce/rag/service/IRagDocumentService.java +++ b/src/main/java/com/bruce/rag/service/IRagDocumentService.java @@ -1,7 +1,12 @@ package com.bruce.rag.service; import com.baomidou.mybatisplus.extension.service.IService; +import com.bruce.rag.dto.request.RagDocumentQueryRequest; import com.bruce.rag.entity.RagDocument; +import java.util.List; + public interface IRagDocumentService extends IService { + + List query(RagDocumentQueryRequest request); } diff --git a/src/main/java/com/bruce/rag/service/IRagStoreService.java b/src/main/java/com/bruce/rag/service/IRagStoreService.java index e03adb0..0e74cfb 100644 --- a/src/main/java/com/bruce/rag/service/IRagStoreService.java +++ b/src/main/java/com/bruce/rag/service/IRagStoreService.java @@ -1,7 +1,12 @@ package com.bruce.rag.service; import com.baomidou.mybatisplus.extension.service.IService; +import com.bruce.rag.dto.request.RagStoreQueryRequest; import com.bruce.rag.entity.RagStore; +import java.util.List; + public interface IRagStoreService extends IService { + + List query(RagStoreQueryRequest request); } diff --git a/src/main/java/com/bruce/rag/service/impl/RagDocumentServiceImpl.java b/src/main/java/com/bruce/rag/service/impl/RagDocumentServiceImpl.java index cf94e10..2fd2a96 100644 --- a/src/main/java/com/bruce/rag/service/impl/RagDocumentServiceImpl.java +++ b/src/main/java/com/bruce/rag/service/impl/RagDocumentServiceImpl.java @@ -1,11 +1,29 @@ package com.bruce.rag.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.bruce.rag.dto.request.RagDocumentQueryRequest; import com.bruce.rag.entity.RagDocument; import com.bruce.rag.mapper.RagDocumentMapper; import com.bruce.rag.service.IRagDocumentService; import org.springframework.stereotype.Service; +import java.util.List; + @Service public class RagDocumentServiceImpl extends ServiceImpl implements IRagDocumentService { + + @Override + public List query(RagDocumentQueryRequest request) { + if (request == null) { + throw new IllegalArgumentException("查询请求不能为空"); + } + return lambdaQuery() + .eq(request.getStoreId() != null, RagDocument::getStoreId, request.getStoreId()) + .eq(request.getAttachmentId() != null, RagDocument::getAttachmentId, request.getAttachmentId()) + .eq(request.getParseStatus() != null, RagDocument::getParseStatus, request.getParseStatus()) + .eq(request.getIndexStatus() != null, RagDocument::getIndexStatus, request.getIndexStatus()) + .eq(request.getEnabled() != null, RagDocument::getEnabled, request.getEnabled()) + .orderByDesc(RagDocument::getId) + .list(); + } } diff --git a/src/main/java/com/bruce/rag/service/impl/RagStoreServiceImpl.java b/src/main/java/com/bruce/rag/service/impl/RagStoreServiceImpl.java index b9df274..ceb042d 100644 --- a/src/main/java/com/bruce/rag/service/impl/RagStoreServiceImpl.java +++ b/src/main/java/com/bruce/rag/service/impl/RagStoreServiceImpl.java @@ -1,11 +1,28 @@ package com.bruce.rag.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.bruce.rag.dto.request.RagStoreQueryRequest; import com.bruce.rag.entity.RagStore; import com.bruce.rag.mapper.RagStoreMapper; import com.bruce.rag.service.IRagStoreService; import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import java.util.List; @Service public class RagStoreServiceImpl extends ServiceImpl implements IRagStoreService { + + @Override + public List query(RagStoreQueryRequest request) { + if (request == null) { + throw new IllegalArgumentException("查询请求不能为空"); + } + return lambdaQuery() + .eq(StringUtils.hasText(request.getStoreCode()), RagStore::getStoreCode, request.getStoreCode()) + .like(StringUtils.hasText(request.getStoreName()), RagStore::getStoreName, request.getStoreName()) + .eq(StringUtils.hasText(request.getStatus()), RagStore::getStatus, request.getStatus()) + .orderByAsc(RagStore::getStoreCode) + .list(); + } } diff --git a/src/test/java/com/bruce/rag/RagComponentStructureTests.java b/src/test/java/com/bruce/rag/RagComponentStructureTests.java index c14c0e3..327416d 100644 --- a/src/test/java/com/bruce/rag/RagComponentStructureTests.java +++ b/src/test/java/com/bruce/rag/RagComponentStructureTests.java @@ -3,9 +3,12 @@ package com.bruce.rag; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.bruce.common.domain.model.RequestResult; import com.bruce.rag.constant.RagSystemConstants; import com.bruce.rag.controller.RagDocumentController; import com.bruce.rag.controller.RagStoreController; +import com.bruce.rag.dto.request.RagDocumentQueryRequest; +import com.bruce.rag.dto.request.RagStoreQueryRequest; import com.bruce.rag.entity.RagDocument; import com.bruce.rag.entity.RagStore; import com.bruce.rag.mapper.RagDocumentMapper; @@ -17,6 +20,8 @@ import com.bruce.rag.service.impl.RagStoreServiceImpl; import org.junit.jupiter.api.Test; import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.List; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -33,6 +38,25 @@ class RagComponentStructureTests { assertTrue(ServiceImpl.class.isAssignableFrom(RagDocumentServiceImpl.class)); } + @Test + void ragControllersShouldExposeRequestResultAndQueryDtoMethods() throws NoSuchMethodException { + Method storeListMethod = RagStoreController.class.getMethod("list"); + Method storeQueryMethod = RagStoreController.class.getMethod("query", RagStoreQueryRequest.class); + Method storeServiceQueryMethod = IRagStoreService.class.getMethod("query", RagStoreQueryRequest.class); + + Method documentListMethod = RagDocumentController.class.getMethod("list"); + Method documentQueryMethod = RagDocumentController.class.getMethod("query", RagDocumentQueryRequest.class); + Method documentServiceQueryMethod = IRagDocumentService.class.getMethod("query", RagDocumentQueryRequest.class); + + assertEquals(RequestResult.class, storeListMethod.getReturnType()); + assertEquals(RequestResult.class, storeQueryMethod.getReturnType()); + assertEquals(List.class, storeServiceQueryMethod.getReturnType()); + + assertEquals(RequestResult.class, documentListMethod.getReturnType()); + assertEquals(RequestResult.class, documentQueryMethod.getReturnType()); + assertEquals(List.class, documentServiceQueryMethod.getReturnType()); + } + @Test void ragSourceTypesAndDocumentRelationShouldExist() throws NoSuchFieldException { Field storeIdField = RagDocument.class.getDeclaredField("storeId");