Jelajahi Sumber

ai 文档修改

yangshun 3 minggu lalu
induk
melakukan
f261b70032

+ 11 - 6
guoyan-ai/src/main/java/com/cy/guoyan/admin/module/ai/controller/admin/chatdocument/ChatDocumentController.java

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.cy.guoyan.admin.module.ai.controller.admin.chatdocument.vo.ChatDocumentPageReqVO;
 import com.cy.guoyan.admin.module.ai.controller.admin.chatdocument.vo.ChatDocumentRespVO;
 import com.cy.guoyan.admin.module.ai.controller.admin.chatdocument.vo.ChatDocumentSaveReqVO;
+import com.cy.guoyan.admin.module.ai.service.aiservice.AiSelectionService;
 import org.springframework.http.MediaType;
 import org.springframework.web.bind.annotation.*;
 import javax.annotation.Resource;
@@ -35,6 +36,9 @@ import org.springframework.web.multipart.MultipartFile;
 public class ChatDocumentController {
     @Resource
     private ChatDocumentService chatDocumentService;
+
+    @Resource
+    private AiSelectionService delegatingDatasetService;
     
     @GetMapping(value = "/file")
     @Operation(summary = "查询知识库文档列表")
@@ -141,12 +145,12 @@ public class ChatDocumentController {
     @PreAuthorize("@ss.hasPermission('chatAi:chat-document:create')")
     public CommonResult<JSONObject> createChatDocument(
             @RequestParam("dataJson") String dataJson,
-            @RequestPart(value = "file", required = false) MultipartFile file
-    ) throws IOException {
+            @RequestPart(value = "file", required = false) MultipartFile file) throws IOException {
         ChatDocumentSaveReqVO createReqVO = JSONObject.parseObject(dataJson, ChatDocumentSaveReqVO.class);
-
-        JSONObject result = chatDocumentService.createChatDocument(createReqVO, file);
-        return success(result);
+        JSONObject documentByFile = delegatingDatasetService.createDocumentByFile(file, createReqVO, null);
+//        JSONObject result = chatDocumentService.createChatDocument(createReqVO, file);
+//        return success(result);
+        return success(documentByFile);
     }
 
 
@@ -163,7 +167,8 @@ public class ChatDocumentController {
     @Parameter(name = "id", description = "编号", required = true)
     @PreAuthorize("@ss.hasPermission('chatAi:chat-document:delete')")
     public CommonResult<Boolean> deleteChatDocument(@RequestParam("id") Long id) throws IOException {
-        chatDocumentService.deleteChatDocument(id);
+        delegatingDatasetService.deleteDocument(null,String.valueOf(id));
+//        chatDocumentService.deleteChatDocument(id);
         return success(true);
     }
 

+ 15 - 3
guoyan-ai/src/main/java/com/cy/guoyan/admin/module/ai/controller/admin/chatdocument/vo/ChatDocumentPageReqVO.java

@@ -19,10 +19,13 @@ public class ChatDocumentPageReqVO extends PageParam {
     private LocalDateTime[] createTime;
 
     @Schema(description = "源文档 ID(更新时使用)", example = "13509")
-    private String documentId;
+    private String difyDocumentId;
+
+    @Schema(description = "源文档 ID(更新时使用)", example = "13509")
+    private String ragflowDocumentId;
 
     @Schema(description = "知识库 ID", example = "26727")
-    private String datasetId;
+    private Integer datasetId;
 
 
     @Schema(description = "批次号")
@@ -41,7 +44,7 @@ public class ChatDocumentPageReqVO extends PageParam {
     private String name;
 
     @Schema(description = "文件大小")
-    private Integer fileSize;
+    private String fileSize;
 
 
     @Schema(description = "文件配置")
@@ -76,6 +79,15 @@ public class ChatDocumentPageReqVO extends PageParam {
     @Schema(description = "索引状态(waiting/indexing/completed/failed)", example = "2")
     private String indexingStatus;
 
+    /**
+     * 解析状态枚举:
+     * – "0" / "UNSTART":未开始
+     * – "1" / "RUNNING":进行中
+     * – "2" / "DONE":完成
+     * – "3" / "FAIL":失败
+     */
+    private String ragflowStatus;
+
     @Schema(description = "显示状态(queuing/processing/ready 等)", example = "2")
     private String displayStatus;
 

+ 15 - 3
guoyan-ai/src/main/java/com/cy/guoyan/admin/module/ai/controller/admin/chatdocument/vo/ChatDocumentRespVO.java

@@ -21,11 +21,14 @@ public class ChatDocumentRespVO {
 
     @Schema(description = "源文档 ID(更新时使用)", example = "13509")
     @ExcelProperty("源文档 ID(更新时使用)")
-    private String documentId;
+    private String difyDocumentId;
+
+    @Schema(description = "源文档 ID(更新时使用)", example = "13509")
+    private String ragflowDocumentId;
 
     @Schema(description = "知识库 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "26727")
     @ExcelProperty("知识库 ID")
-    private String datasetId;
+    private Integer datasetId;
 
     @Schema(description = "批次号")
     private String batch;
@@ -46,7 +49,7 @@ public class ChatDocumentRespVO {
     private String name;
 
     @Schema(description = "文件大小")
-    private Integer fileSize;
+    private String fileSize;
 
 
     @Schema(description = "文件配置")
@@ -89,6 +92,15 @@ public class ChatDocumentRespVO {
     @ExcelProperty("索引状态(waiting/indexing/completed/failed)")
     private String indexingStatus;
 
+    /**
+     * 解析状态枚举:
+     * – "0" / "UNSTART":未开始
+     * – "1" / "RUNNING":进行中
+     * – "2" / "DONE":完成
+     * – "3" / "FAIL":失败
+     */
+    private String ragflowStatus;
+
     @Schema(description = "显示状态(queuing/processing/ready 等)", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
     @ExcelProperty("显示状态(queuing/processing/ready 等)")
     private String displayStatus;

+ 14 - 2
guoyan-ai/src/main/java/com/cy/guoyan/admin/module/ai/controller/admin/chatdocument/vo/ChatDocumentSaveReqVO.java

@@ -15,7 +15,10 @@ public class ChatDocumentSaveReqVO {
     private Long id;
 
     @Schema(description = "源文档 ID(更新时使用)", example = "13509")
-    private String documentId;
+    private String difyDocumentId;
+
+    @Schema(description = "源文档 ID(更新时使用)", example = "13509")
+    private String ragflowDocumentId;
 
     @Schema(description = "知识库 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "26727")
     @NotNull(message = "知识库 ID不能为空")
@@ -39,7 +42,7 @@ public class ChatDocumentSaveReqVO {
     private String name;
 
     @Schema(description = "文件大小")
-    private Integer fileSize;
+    private String fileSize;
 
 
     @Schema(description = "文件配置")
@@ -81,6 +84,15 @@ public class ChatDocumentSaveReqVO {
     @NotEmpty(message = "索引状态(waiting/indexing/completed/failed)不能为空")
     private String indexingStatus;
 
+    /**
+     * 解析状态枚举:
+     * – "0" / "UNSTART":未开始
+     * – "1" / "RUNNING":进行中
+     * – "2" / "DONE":完成
+     * – "3" / "FAIL":失败
+     */
+    private String ragflowStatus;
+
     @Schema(description = "索引方式(high_quality/economy)", requiredMode = Schema.RequiredMode.REQUIRED)
     @NotEmpty(message = "索引方式(high_quality/economy)不能为空")
     private String indexingTechnique;

+ 17 - 4
guoyan-ai/src/main/java/com/cy/guoyan/admin/module/ai/dal/dataobject/chatdocument/ChatDocumentDO.java

@@ -11,8 +11,8 @@ import com.cy.guoyan.admin.framework.mybatis.core.dataobject.BaseDO;
  *
  * @author 管理员
  */
-@TableName("ai_chat_document")
-@KeySequence("ai_chat_document_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@TableName("ai_document")
+@KeySequence("ai_document_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
 @Data
 @EqualsAndHashCode(callSuper = true)
 @ToString(callSuper = true)
@@ -29,7 +29,11 @@ public class ChatDocumentDO extends BaseDO {
     /**
      * 源文档 ID(更新时使用)
      */
-    private String documentId;
+    private String difyDocumentId;
+    /**
+     * 源文档 ID(更新时使用)
+     */
+    private String ragflowDocumentId;
     /**
      * 知识库 ID
      */
@@ -81,7 +85,7 @@ public class ChatDocumentDO extends BaseDO {
     /**
      * 文件大小
      */
-    private Integer fileSize;
+    private String fileSize;
 
     /**
      * 文件配置
@@ -100,6 +104,15 @@ public class ChatDocumentDO extends BaseDO {
      * 索引状态(waiting/indexing/completed/failed)
      */
     private String indexingStatus;
+
+    /**
+     * 解析状态枚举:
+     * – "0" / "UNSTART":未开始
+     * – "1" / "RUNNING":进行中
+     * – "2" / "DONE":完成
+     * – "3" / "FAIL":失败
+     */
+    private String ragflowStatus;
     /**
      * 显示状态(queuing/processing/ready 等)
      */

+ 3 - 1
guoyan-ai/src/main/java/com/cy/guoyan/admin/module/ai/dal/mysql/chatdocument/ChatDocumentMapper.java

@@ -18,7 +18,8 @@ public interface ChatDocumentMapper extends BaseMapperX<ChatDocumentDO> {
     default PageResult<ChatDocumentDO> selectPage(ChatDocumentPageReqVO reqVO) {
         return selectPage(reqVO, new LambdaQueryWrapperX<ChatDocumentDO>()
                 .betweenIfPresent(ChatDocumentDO::getCreateTime, reqVO.getCreateTime())
-                .eqIfPresent(ChatDocumentDO::getDocumentId, reqVO.getDocumentId())
+                .eqIfPresent(ChatDocumentDO::getDifyDocumentId, reqVO.getDifyDocumentId())
+                .eqIfPresent(ChatDocumentDO::getRagflowDocumentId, reqVO.getRagflowDocumentId())
                 .eqIfPresent(ChatDocumentDO::getDatasetId, reqVO.getDatasetId())
                 .eqIfPresent(ChatDocumentDO::getDataSourceType, reqVO.getDataSourceType())
                 .eqIfPresent(ChatDocumentDO::getDataSourceInfo, reqVO.getDataSourceInfo())
@@ -31,6 +32,7 @@ public interface ChatDocumentMapper extends BaseMapperX<ChatDocumentDO> {
                 .eqIfPresent(ChatDocumentDO::getWordCount, reqVO.getWordCount())
                 .eqIfPresent(ChatDocumentDO::getHitCount, reqVO.getHitCount())
                 .eqIfPresent(ChatDocumentDO::getIndexingStatus, reqVO.getIndexingStatus())
+                .eqIfPresent(ChatDocumentDO::getRagflowStatus, reqVO.getRagflowStatus())
                 .eqIfPresent(ChatDocumentDO::getDisplayStatus, reqVO.getDisplayStatus())
                 .eqIfPresent(ChatDocumentDO::getError, reqVO.getError())
                 .eqIfPresent(ChatDocumentDO::getEnabled, reqVO.getEnabled())

+ 5 - 4
guoyan-ai/src/main/java/com/cy/guoyan/admin/module/ai/service/chatdocument/ChatDocumentServiceImpl.java

@@ -68,7 +68,7 @@ public class ChatDocumentServiceImpl implements ChatDocumentService {
         // 1. 插入 DB
         ChatDocumentDO doc = BeanUtils.toBean(vo, ChatDocumentDO.class);
         doc.setDataSourceType("file_upload");
-        doc.setDatasetId(dataset.getDifyDatasetId());
+        doc.setDatasetId(vo.getDatasetId());
         doc.setProcessRuleMode(vo.getProcessRuleMode());
 
         // 2. 如果带了文件,就调用 Dify 上传
@@ -127,11 +127,11 @@ public class ChatDocumentServiceImpl implements ChatDocumentService {
 
             // 3. 更新本地记录
             JSONObject docJson = difyResp.getJSONObject("document");
-            doc.setDocumentId(docJson.getString("id"));
+            doc.setDifyDocumentId(docJson.getString("id"));
             doc.setWordCount(docJson.getIntValue("word_count"));
             doc.setIndexingStatus(docJson.getString("indexing_status"));
             doc.setBatch(difyResp.getString("batch"));
-            doc.setFileSize((int) (file.getSize() / 1024));
+            doc.setFileSize(apiFile.get("size").toString());
             chatDocumentMapper.updateById(doc);
 
             // 启动异步轮询线程
@@ -170,7 +170,8 @@ public class ChatDocumentServiceImpl implements ChatDocumentService {
         if (documentDO == null) {
             throw exception(CHAT_DOCUMENT_NOT_EXISTS);
         }
-        difyClient.deleteDocument(documentDO.getDatasetId(), documentDO.getDocumentId());
+        ChatKnowledgeDatasetDO aDo = chatKnowledgeDatasetMapper.selectById(documentDO.getDatasetId());
+        difyClient.deleteDocument(aDo.getDifyDatasetId(), documentDO.getDifyDocumentId());
         chatDocumentMapper.deleteById(id);
     }