cxd hace 9 meses
padre
commit
6f43587d88
Se han modificado 1 ficheros con 55 adiciones y 11 borrados
  1. 55 11
      backend/Service/KbmService.py

+ 55 - 11
backend/Service/KbmService.py

@@ -1174,23 +1174,25 @@ class KbmService:
 
             logger.info("分割完成")
             result = []
-            inder = 1
+            
+            page_inder = 0
             for i,  chunks in enumerate(text_chunks,1):
+                inder = 1
                 image_name = page_images[i-1][0]
                 for j, chunk in enumerate(chunks,1):
                     KbmService.saveTaskSublist(
                         document_id=document_id,
                         name=image_name,
                         page_number=i,
-                        chunk_number= str(inder),
+                        chunk_number=inder,
                         content=chunk['content'],
                         milvus_id=chunk['milvus_id']
                     )
                     inder +=1
-
+                page_inder += inder
                 result.append({
                     'page_number': i,
-                    'chunk_number': len(chunks),
+                    'chunk_number': page_inder,
                 })
 
             logger.info("解析结束")
@@ -1563,22 +1565,64 @@ class KbmService:
             return fail("Bucket ID 为空")
 
         try:
-            # 检查是否存在未删除的文档
-            active_docs_count = DocumentKbm.objects.filter(kb_id=bucket_id).exclude(status=4).count()
+            # 获取知识库对象
+            try:
+                knowledgebase = Knowledgebase.objects.get(id=bucket_id)
+            except ObjectDoesNotExist:
+                return fail("指定的知识库不存在")
+
+            # 检查是否存在文档
+            active_docs_count = DocumentKbm.objects.filter(kb_id=bucket_id).count()
 
             if active_docs_count > 0:
-                return fail(f"无法删除知识库,还有 {active_docs_count} 个未删除的文档")
+                return fail(f"无法删除知识库,还有 {active_docs_count} 个文档")
 
-            # 如果没有未删除的文档,则更新知识库状态
-            updated_count = Knowledgebase.objects.filter(id=bucket_id).update(status=4,name=bucket_id, location=bucket_id)
+            # 删除相关的 File 记录
+            File.objects.filter(
+                name=knowledgebase.name,
+                source_type='knowledgebase',
+                type='folder'
+            ).delete()
 
-            if updated_count == 0:
-                return fail("指定的知识库不存在")
+            # 删除所有相关的 DocumentKbm 记录
+            DocumentKbm.objects.filter(kb_id=bucket_id).delete()
+
+            # 删除知识库
+            knowledgebase.delete()
+
+            # 可选:如果使用 MinIO 存储文件,删除 MinIO 中的文件
+            try:
+                minio_client.remove_bucket(bucket_id)
+            except Exception as e:
+                logger.warning(f"Failed to delete MinIO bucket {bucket_id}: {str(e)}")
 
             return success("知识库已成功删除")
 
         except Exception as e:
+            logger.error(f"删除知识库时发生错误: {str(e)}", exc_info=True)
             return fail(f"删除知识库时发生错误: {str(e)}")
+        # bucket_id = request.POST.get("bucket_id")
+
+        # if not bucket_id:
+        #     return fail("Bucket ID 为空")
+
+        # try:
+        #     # 检查是否存在未删除的文档
+        #     active_docs_count = DocumentKbm.objects.filter(kb_id=bucket_id).exclude(status=4).count()
+
+        #     if active_docs_count > 0:
+        #         return fail(f"无法删除知识库,还有 {active_docs_count} 个未删除的文档")
+
+        #     # 如果没有未删除的文档,则更新知识库状态
+        #     updated_count = Knowledgebase.objects.filter(id=bucket_id).update(status=4,name=bucket_id, location=bucket_id)
+
+        #     if updated_count == 0:
+        #         return fail("指定的知识库不存在")
+
+        #     return success("知识库已成功删除")
+
+        # except Exception as e:
+        #     return fail(f"删除知识库时发生错误: {str(e)}")
 
     @staticmethod
     def getRunStatus(request):