|
@@ -1,245 +1,25 @@
|
|
|
-from fastapi import APIRouter, Request, Depends, HTTPException
|
|
|
-from sqlalchemy.exc import IntegrityError
|
|
|
-
|
|
|
-from fastapi.responses import JSONResponse
|
|
|
-from database import get_db
|
|
|
-from sqlalchemy.orm import Session
|
|
|
-from models import *
|
|
|
-import json
|
|
|
-import random
|
|
|
-from sqlalchemy import create_engine, select
|
|
|
+#!/usr/bin/env python3
|
|
|
+# -*- coding: utf-8 -*-
|
|
|
+from fastapi import APIRouter, Depends
|
|
|
+from common.security import valid_access_token
|
|
|
+from .login import router as login_router
|
|
|
+from . import gateway
|
|
|
+from . import dataAnalysis
|
|
|
+from . import resourceMonitoring
|
|
|
+from . import OneShareProxyHandler
|
|
|
+from . import jobs
|
|
|
+from . import upload_file
|
|
|
+from . import videoResource
|
|
|
+from . import Knowledge
|
|
|
router = APIRouter()
|
|
|
|
|
|
-# @router.post('/create')
|
|
|
-# async def create_knowledge(request:Request,db:Session = Depends(get_db)):
|
|
|
-# data = await request.body()
|
|
|
-# body = data.decode(encoding='utf-8')
|
|
|
-# if len(body) > 0:
|
|
|
-# body = json.loads(body)
|
|
|
-# print(body)
|
|
|
-# random_10_digit_number = random.randint(1000000000, 9999999999)
|
|
|
-# # file_identifier = 'f'
|
|
|
-# reportId = 'ZJBG'+str(random_10_digit_number)
|
|
|
-# # file_identifier =
|
|
|
-# reportName = body["reportName"]
|
|
|
-# subject = body["subject"]
|
|
|
-# eventType = body["eventType"]
|
|
|
-# publishingUnit = body["publishingUnit"]
|
|
|
-# publishDate = body["publishDate"]
|
|
|
-# summary = body["summary"]
|
|
|
-#
|
|
|
-# notificationType = body["notificationType"]
|
|
|
-#
|
|
|
-# base_code = 'base'+str(random.randint(1000000000, 9999999999))
|
|
|
-#
|
|
|
-# fileNames = body["fileName"]
|
|
|
-# filePath = '/data/upload/mergefile/'
|
|
|
-#
|
|
|
-#
|
|
|
-#
|
|
|
-# konwledge = KnowledgeBase(
|
|
|
-# reportId=reportId,
|
|
|
-#
|
|
|
-# reportName=reportName,
|
|
|
-# subject=subject,
|
|
|
-# eventType=eventType,
|
|
|
-# publishingUnit=publishingUnit,
|
|
|
-# publishDate=publishDate,
|
|
|
-# summary = summary,
|
|
|
-# notificationType = notificationType,
|
|
|
-#
|
|
|
-# base_code = base_code
|
|
|
-# )
|
|
|
-# db.add(konwledge)
|
|
|
-#
|
|
|
-# for fileName in fileNames:
|
|
|
-# file_identifier='file'+str(random.randint(1000000000, 9999999999))
|
|
|
-# knowledge_file = KnowledgeFile(
|
|
|
-# file_identifier=file_identifier,
|
|
|
-# file_path=filePath,
|
|
|
-# file_name = fileName,
|
|
|
-# is_deleted = 0,
|
|
|
-# knowledge_base_code = base_code
|
|
|
-# )
|
|
|
-# db.add(knowledge_file)
|
|
|
-#
|
|
|
-# db.commit()
|
|
|
-# return {
|
|
|
-# "code":0,
|
|
|
-# "data":{
|
|
|
-# "reportId": reportId,
|
|
|
-# "status": "success",
|
|
|
-# "message": "总结报告创建成功"
|
|
|
-# }
|
|
|
-# }
|
|
|
-
|
|
|
-
|
|
|
-@router.post('/create')
|
|
|
-async def create_knowledge(request: Request, db: Session = Depends(get_db)):
|
|
|
- try:
|
|
|
- data = await request.body()
|
|
|
- body = json.loads(data.decode(encoding='utf-8'))
|
|
|
-
|
|
|
- # 验证必需的字段
|
|
|
- required_fields = ['reportName', 'subject', 'eventType', 'publishingUnit', 'publishDate', 'summary',
|
|
|
- 'notificationType', 'fileNames']
|
|
|
- missing_fields = [field for field in required_fields if field not in body]
|
|
|
- print('missing_fields',missing_fields)
|
|
|
- if missing_fields:
|
|
|
- raise HTTPException(status_code=401, detail=f"Missing required fields: {', '.join(missing_fields)}")
|
|
|
-
|
|
|
- # 生成随机的报告ID和基础知识代码
|
|
|
- random_10_digit_number = random.randint(1000000000, 9999999999)
|
|
|
- reportId = 'ZJBG' + str(random_10_digit_number)
|
|
|
- base_code = 'base' + str(random.randint(1000000000, 9999999999))
|
|
|
-
|
|
|
- # 从请求体中提取其他数据
|
|
|
- reportName = body["reportName"]
|
|
|
- subject = body["subject"]
|
|
|
- eventType = body["eventType"]
|
|
|
- publishingUnit = body["publishingUnit"]
|
|
|
- publishDate = body["publishDate"]
|
|
|
- summary = body["summary"]
|
|
|
- notificationType = body["notificationType"]
|
|
|
- fileNames = body["fileNames"] # 注意:这里假设它是列表
|
|
|
-
|
|
|
- # 创建 KnowledgeBase 实例
|
|
|
- konwledge = KnowledgeBase(
|
|
|
- reportId=reportId,
|
|
|
- reportName=reportName,
|
|
|
- subject=subject,
|
|
|
- eventType=eventType,
|
|
|
- publishingUnit=publishingUnit,
|
|
|
- publishDate=publishDate,
|
|
|
- summary=summary,
|
|
|
- notificationType=notificationType,
|
|
|
- base_code=base_code
|
|
|
- )
|
|
|
- db.add(konwledge)
|
|
|
-
|
|
|
- # 创建 KnowledgeFile 实例
|
|
|
- filePath = '/data/upload/mergefile/'
|
|
|
- for fileName in fileNames:
|
|
|
- file_identifier = 'file' + str(random.randint(1000000000, 9999999999))
|
|
|
- knowledge_file = KnowledgeFile(
|
|
|
- file_identifier=file_identifier,
|
|
|
- file_path=filePath + fileName, # 如果fileName是完整的路径,则可能不需要再次添加filePath
|
|
|
- file_name=fileName,
|
|
|
- is_deleted=0,
|
|
|
- knowledge_base_code=base_code
|
|
|
- )
|
|
|
- db.add(knowledge_file)
|
|
|
-
|
|
|
- db.commit()
|
|
|
-
|
|
|
- return {
|
|
|
- "code": 0,
|
|
|
- "data": {
|
|
|
- "reportId": reportId,
|
|
|
- "status": "success",
|
|
|
- "message": "总结报告创建成功"
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- except json.JSONDecodeError:
|
|
|
- raise HTTPException(status_code=400, detail="Invalid JSON data")
|
|
|
- except IntegrityError as e:
|
|
|
- db.rollback()
|
|
|
- raise HTTPException(status_code=409, detail=f"Database error: {str(e)}")
|
|
|
- except Exception as e:
|
|
|
- db.rollback()
|
|
|
- print(e)
|
|
|
- raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-@router.post('/select')
|
|
|
-@router.get('/select')
|
|
|
-async def select_knowledge(request: Request, db: Session = Depends(get_db)):
|
|
|
- # 尝试从请求体中解析 JSON 数据
|
|
|
- data = await request.json() # 注意:这里直接使用 request.json() 而不是 request.body()
|
|
|
- try:
|
|
|
- page = int(data.get('page', 1)) # 如果没有提供 page,则默认为 1
|
|
|
- size = int(data.get('size', 10)) # 如果没有提供 size,则默认为 10
|
|
|
- if size >100:
|
|
|
- size = 100
|
|
|
- except ValueError as e:
|
|
|
- # 如果转换失败,则抛出 HTTPException
|
|
|
- raise HTTPException(status_code=400, detail=f"Invalid pagination parameters: {e}")
|
|
|
-
|
|
|
- # 计算 offset
|
|
|
- offset = (page - 1) * size
|
|
|
-
|
|
|
- # 使用 ORM 查询并应用分页
|
|
|
- data = db.query(KnowledgeBase).offset(offset).limit(size).all()
|
|
|
-
|
|
|
- # 打印结果(可选,用于调试)
|
|
|
- # for i in data:
|
|
|
- # print(i)
|
|
|
- print(f"Returned {len(data)} results from page {page} with size {size}")
|
|
|
-
|
|
|
- # 计算总条数(注意:这可能会很慢,特别是对于大型数据集)
|
|
|
- total_count = db.query(func.count(KnowledgeBase.reportId)).scalar()
|
|
|
-
|
|
|
- # 计算总页数
|
|
|
- total_pages = (total_count // size) + (1 if total_count % size else 0)
|
|
|
-
|
|
|
- # 返回查询结果
|
|
|
- result = {
|
|
|
- "code": 0,
|
|
|
- 'msg': 'success',
|
|
|
- 'data': {
|
|
|
- 'pages': total_pages,
|
|
|
- 'total': total_count,
|
|
|
- "currentPage":page,
|
|
|
- "pageSize":size,
|
|
|
- "list": data
|
|
|
- }
|
|
|
- }
|
|
|
- return result
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-@router.post('/detail')
|
|
|
-@router.get('/detail')
|
|
|
-async def get_knowledge_detail(request: Request, db: Session = Depends(get_db)):
|
|
|
- # 尝试从请求体中解析 JSON 数据
|
|
|
- data = await request.json()
|
|
|
- report_id = data.get('reportID')
|
|
|
- if not report_id:
|
|
|
- raise HTTPException(status_code=400, detail="Missing required parameter 'reportID'")
|
|
|
-
|
|
|
- # 查询 KnowledgeBase
|
|
|
- kb_entry = db.query(KnowledgeBase).filter(KnowledgeBase.reportId == report_id).first()
|
|
|
- if not kb_entry:
|
|
|
- raise HTTPException(status_code=404, detail="No knowledge base found for the given report ID")
|
|
|
-
|
|
|
- kf_entries = db.query(KnowledgeFile).filter(KnowledgeFile.knowledge_base_code == kb_entry.base_code).all()
|
|
|
-
|
|
|
- # 准备返回的数据
|
|
|
- result = {
|
|
|
- "code": 0,
|
|
|
- "msg": "success",
|
|
|
- "data": {
|
|
|
- "report_id": kb_entry.reportId,
|
|
|
- "reportName": kb_entry.reportName,
|
|
|
- "subject": kb_entry.subject,
|
|
|
- "eventType": kb_entry.eventType,
|
|
|
- "publishDate": kb_entry.publishDate,
|
|
|
- "publishingUnit": kb_entry.publishingUnit,
|
|
|
- "summary": kb_entry.summary,
|
|
|
- "notificationType": kb_entry.notificationType,
|
|
|
- # "knowledge_base_code": kb_entry.base_code,
|
|
|
- "file": [
|
|
|
- {
|
|
|
- "content": kf.file_name,
|
|
|
- "url": 'http://127.0.0.1:9988/api/file/download/'+kf.file_name
|
|
|
- } # 根据需要调整返回的字段
|
|
|
- for kf in kf_entries
|
|
|
- ]
|
|
|
- }
|
|
|
- }
|
|
|
+router.include_router(login_router)
|
|
|
|
|
|
- return result
|
|
|
+router.include_router(gateway.router, prefix="/gateway") #, dependencies=[Depends(valid_access_token)]
|
|
|
+router.include_router(dataAnalysis.router, prefix="/dataAnalysis")
|
|
|
+router.include_router(resourceMonitoring.router, prefix="/resource")
|
|
|
+router.include_router(jobs.router, prefix="/jobs")
|
|
|
+router.include_router(OneShareProxyHandler.router, prefix="/oneShare")
|
|
|
+router.include_router(upload_file.router, prefix="/file")
|
|
|
+router.include_router(videoResource.router, prefix="/videoResource")
|
|
|
+router.include_router(Knowledge.router, prefix="/knowledge")
|