|
@@ -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)
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|