瀏覽代碼

更新 'routers/api/Knowledge/__init__.py'

许国洋 10 月之前
父節點
當前提交
a97a1a5485
共有 1 個文件被更改,包括 183 次插入16 次删除
  1. 183 16
      routers/api/Knowledge/__init__.py

+ 183 - 16
routers/api/Knowledge/__init__.py

@@ -1,4 +1,4 @@
-from fastapi import APIRouter, Request, Depends, HTTPException, Query
+from fastapi import APIRouter, Request, Depends, HTTPException, Query,Response
 from sqlalchemy.exc import IntegrityError
 
 from fastapi.responses import JSONResponse
@@ -9,12 +9,16 @@ import json
 import random
 from sqlalchemy import create_engine, select, or_
 from typing import Optional
-
+import uuid
 router = APIRouter()
 
 
 
 
+
+
+
+
 @router.post('/create')
 async def create_knowledge(request: Request, db: Session = Depends(get_db)):
     body = await request.json()
@@ -25,7 +29,7 @@ async def create_knowledge(request: Request, db: Session = Depends(get_db)):
 
     reportId = f'ZJBG{random.randint(1000000000, 9999999999)}'
     base_code = 'base' + f'{random.randint(1000000000, 9999999999)}'
-
+    uuid1 = uuid.uuid1()
     knowledge = KnowledgeBase(
         reportId=reportId,
         **{
@@ -38,29 +42,51 @@ async def create_knowledge(request: Request, db: Session = Depends(get_db)):
         updateTime=body['publishDate'],
         notificationType="总结报告"  # 硬编码的值,如果有其他情况需要处理,请修改
     )
+
     db.add(knowledge)
 
+
     knowledge_files = [
         KnowledgeFile(
             file_identifier=f'file{random.randint(1000000000, 9999999999)}',
-            file_path=f'/data/upload/mergefile/{fileName}',  # 假设fileName是文件名
-            file_name=fileName,
+            file_path=f'/data/upload/mergefile/{fileName["url"]}',
+            storage_file_name=fileName["url"],
+            file_name=fileName["name"],  # 使用 fileName["name"] 作为文件名
             is_deleted=0,
             updateTime=body['publishDate'],
             createTime=body['publishDate'],
             knowledge_base_code=base_code
         )
-        for fileName in body['fileNames']
+        for fileName in body['fileNames']  # body['fileNames'] 现在是一个包含对象的数组,每个对象都有 'name' 和 'url' 属性
     ]
     db.add_all(knowledge_files)
 
     try:
         db.commit()
+        knowledge_entry = db.query(KnowledgeBase).filter(KnowledgeBase.reportId == reportId).first()
+        files_entry = db.query(KnowledgeFile).filter(KnowledgeFile.knowledge_base_code == base_code).all()
         return {
             "code": 200,
             "msg": "总结报告创建成功",
             "status": "success",
-            "data": [reportId]
+            "data": [{
+                "reportId":knowledge_entry.reportId,
+                "reportName":knowledge_entry.reportName,
+                "eventType":knowledge_entry.eventType,
+                "publishingUnit":knowledge_entry.publishingUnit,
+                "subject":knowledge_entry.subject,
+                "publishDate":knowledge_entry.publishDate,
+                "summary":knowledge_entry.summary,
+                "files": [
+                    {
+                        "fileIdentifier": file.file_identifier,
+                        "fileName": file.file_name,
+                        "url": file.storage_file_name,
+                        "status":"success"
+                    }
+                    for file in files_entry
+                ]
+            }]
         }
     except IntegrityError as e:
         db.rollback()
@@ -138,19 +164,24 @@ async def select_knowledge(
 
 @router.get('/detail')
 async def get_knowledge_detail(db: Session = Depends(get_db), reportID: Optional[str] = Query(None, description="报告ID")):
-    report_id_to_use = reportID
-
-    if not report_id_to_use:
+    if not reportID:
         raise HTTPException(status_code=400, detail="Missing required parameter 'reportID'")
 
-    kb_entry = db.query(KnowledgeBase).filter(KnowledgeBase.reportId == report_id_to_use).first()
-    if not kb_entry:
-        raise HTTPException(status_code=404, detail="No knowledge base found for the given report ID")
+    # kb_entry = db.query(KnowledgeBase)
+    # kb_entry = kb_entry.filter(KnowledgeBase.del_flag != '2')
+    # 先过滤出 del_flag 不等于 '2' 的记录,然后再根据 report_id 筛选
+    kb_entry = (db.query(KnowledgeBase)
+                .filter(KnowledgeBase.del_flag != '2')  # 确保这里过滤掉 del_flag 等于 '2' 的记录
+                .filter(KnowledgeBase.reportId == reportID))  # 确保 reportID 是在过滤后的查询中使用的
 
-    kf_entries = db.query(KnowledgeFile).filter(KnowledgeFile.knowledge_base_code == kb_entry.base_code).all()
+    kb_entry = kb_entry.first()
+    if not kb_entry:
+        raise HTTPException(status_code=404, detail="报告不存在")
 
+    kf_entries = db.query(KnowledgeFile).filter(KnowledgeFile.knowledge_base_code == kb_entry.base_code)\
+        .filter(KnowledgeFile.is_deleted != '2').all()
     files = [
-        {"content": kf.file_name, "url": f'http://127.0.0.1:9988/api/file/download/{kf.file_name}'}
+        {"content": kf.file_name, "url": kf.storage_file_name,"file_identifier":kf.file_identifier}
         for kf in kf_entries
     ]
 
@@ -170,4 +201,140 @@ async def get_knowledge_detail(db: Session = Depends(get_db), reportID: Optional
         }]
     }
 
-    return result
+    return result
+
+
+
+
+
+
+
+
+
+
+
+@router.post('/delete')
+async def delete_knowledge(request: Request, db: Session = Depends(get_db)):
+    # 从请求的 JSON 数据中获取 reportID
+    body = await request.json()
+    report_id_to_use = body.get('reportID')
+    if not report_id_to_use:
+        return Response(content="Missing required parameter 'reportID'", status_code=400)
+
+    kb_entry = (db.query(KnowledgeBase)
+                .filter(KnowledgeBase.del_flag != '2')  # 确保这里过滤掉 del_flag 等于 '2' 的记录
+                .filter(KnowledgeBase.reportId == report_id_to_use))  # 确保 reportID 是在过滤后的查询中使用的
+
+    kb_entry = kb_entry.first()
+    if not kb_entry:
+        raise HTTPException(status_code=404, detail="报告不存在")
+
+    # 将找到的记录的 is_deleted 改为 2
+    kb_entry.is_deleted = 2
+
+    kf_entries = db.query(KnowledgeFile).filter(KnowledgeFile.knowledge_base_code == kb_entry.base_code).all()
+    for kf_entry in kf_entries:
+        kf_entry.is_deleted = 2
+
+    if hasattr(kb_entry, 'del_flag'):
+        kb_entry.del_flag = 2
+
+
+
+    try:
+        db.commit()
+        return {
+            "code": 200,
+            "msg": "操作成功",
+            "data": {
+                "report_id": kb_entry.reportId
+                # "is_deleted": kb_entry.is_deleted
+            }
+        }
+    except Exception as e:
+        db.rollback()
+        return Response(content="An error occurred while deleting the record: " + str(e), status_code=500)
+
+
+def delete_file_fun(knowledge_base_code,db: Session):
+    file_query = db.query(KnowledgeFile)
+    file_query = file_query.filter(KnowledgeFile.is_deleted != '2')
+    file_query = file_query.filter(KnowledgeFile.knowledge_base_code == knowledge_base_code)
+    # file_query = file_query.filter(KnowledgeFile.foreign_key == foreign_key)
+    files = file_query.all()
+    for file in files:
+        file.is_deleted='2'
+    db.commit()
+
+
+
+
+@router.post('/update')
+async def update_knowledge(request: Request, db: Session = Depends(get_db)):
+    body = await request.json()
+    report_id_to_use = body.get('reportId')
+    if not report_id_to_use:
+        return Response(content="Missing required parameter 'reportId'", status_code=400)
+
+    kb_entry = (db.query(KnowledgeBase)
+                .filter(KnowledgeBase.del_flag != '2')  # 确保这里过滤掉 del_flag 等于 '2' 的记录
+                .filter(KnowledgeBase.reportId == report_id_to_use))  # 确保 reportID 是在过滤后的查询中使用的
+
+
+    kb_entry = kb_entry.first()
+    if not kb_entry:
+        raise HTTPException(status_code=404, detail="报告不存在")
+
+
+    kb_entry.reportName = body.get('reportName', kb_entry.reportName)
+    kb_entry.subject = body.get('subject', kb_entry.subject)
+    kb_entry.eventType = body.get('eventType', kb_entry.eventType)
+    kb_entry.publishingUnit = body.get('publishingUnit', kb_entry.publishingUnit)
+    kb_entry.publishDate = body.get('publishDate', kb_entry.publishDate)
+    kb_entry.summary = body.get('summary', kb_entry.summary)
+    kb_entry.updateTime = datetime.strptime(body.get('publishDate', kb_entry.updateTime), '%Y-%m-%d %H:%M:%S')
+
+    base_code = kb_entry.base_code
+
+
+    if len(body.get('fileNames')) > 0:
+        if kb_entry.base_code:
+            delete_file_fun(kb_entry.base_code,db=db)
+
+        knowledge_files = [
+            KnowledgeFile(
+                file_identifier=f'file{random.randint(1000000000, 9999999999)}',
+                file_path=f'/data/upload/mergefile/{fileName["url"]}',
+                storage_file_name=fileName["url"],
+                file_name=fileName["name"],  # 使用 fileName["name"] 作为文件名
+                is_deleted=0,
+                updateTime=body['publishDate'],
+                knowledge_base_code=base_code
+            )
+            for fileName in body['fileNames']  # body['fileNames'] 现在是一个包含对象的数组,每个对象都有 'name' 和 'url' 属性
+        ]
+        db.add_all(knowledge_files)
+
+    try:
+        db.commit()
+        return {
+            "code": 200,
+            "msg": "修改成功",
+            "data": {
+                "report_id": report_id_to_use,
+                "updateTime": kb_entry.updateTime.isoformat()
+            }
+        }
+    except IntegrityError as e:
+        db.rollback()
+        return Response(content=f"Database error: {str(e)}", status_code=409)
+    except Exception as e:
+        db.rollback()
+        return Response(content=str(e), status_code=500)
+
+
+
+
+
+
+