xuguoyang 4 месяцев назад
Родитель
Сommit
57a180dd04
3 измененных файлов с 218 добавлено и 0 удалено
  1. 27 0
      models/knowledge_base.py
  2. 2 0
      routers/api/__init__.py
  3. 189 0
      routers/api/hazardStandards/__init__.py

+ 27 - 0
models/knowledge_base.py

@@ -41,3 +41,30 @@ class KnowledgeBase(Base):
 
     del_flag = Column(String(10), comment='是否删除')
     files = relationship("KnowledgeFile", order_by=KnowledgeFile.id, back_populates="knowledge_base")
+
+
+
+class HazardStandardsFile(Base):
+    __tablename__ = 'hazard_standards_file'
+
+    id = Column(Integer, primary_key=True, autoincrement=True)
+    file_id = Column(String(50), nullable=False, comment='文件id')#uuid
+    file_number = Column(String(50), nullable=False, comment='文件编号')#YHBZ+10位随机数字
+    file_name = Column(String(255), nullable=False, comment='文件名称')#url
+    standard_type = Column(String(255), nullable=False, comment='标准类型 1国家版,2广东省版')#标准类型
+    file_name_desc = Column(String(255), nullable=False, comment='文件名称原名')#name
+    file_title = Column(String(255), nullable=False, comment='标准文件名称')#name
+    file_path = Column(String(255), nullable=True, comment='文件存储路径')
+    file_size = Column(String(50), nullable=True, comment='文件大小')
+    status = Column(String(50), nullable=True, comment='文件状态')
+    foreign_key = Column(String(50), nullable=True, comment='文件外键 --技术字段')
+    from_scenario = Column(String(50), nullable=True, comment='对应标识 --技术字段')
+    del_flag = Column(String(1), default='0', comment='删除标志(0代表存在 2代表删除)')
+    create_dept = Column(Integer, default=None, comment='创建部门')
+    create_by = Column(Integer, default=None, comment='创建者')
+    create_time = Column(DateTime, default=datetime.now, comment='创建时间')
+    update_time = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment='更新时间')
+
+
+
+

+ 2 - 0
routers/api/__init__.py

@@ -32,6 +32,7 @@ from . import resourceProvison
 from . import yst
 from . import comprehensive_search
 from . import ThreeProofingResponsible
+from . import hazardStandards
 from extensions import logger
 from routers.prod_api import system
 from routers.prod_api import auth
@@ -66,6 +67,7 @@ router.include_router(temperaturePrecipitation.router, prefix="/temperature_prec
 router.include_router(layerConfiguration.router, prefix="/layerConfiguration", tags=["图层配置"])
 router.include_router(dataFilling.router, prefix="/dataFilling")
 router.include_router(resourceProvison.router, prefix="/resource_provison")
+router.include_router(hazardStandards.router, prefix="/hazardStandards")
 
 router.include_router(eventManagement.router, prefix="/event_management", tags=["事件管理"])
 router.include_router(spatialAnalysis.router, prefix="/spatial_analysis", tags=["空间分析"])

+ 189 - 0
routers/api/hazardStandards/__init__.py

@@ -0,0 +1,189 @@
+from fastapi import APIRouter, Request, Depends, HTTPException, Query, Response
+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, or_
+from typing import Optional
+import uuid
+from utils import *
+from common.security import valid_access_token
+import traceback
+from sqlalchemy import text, exists
+router = APIRouter()
+
+def get_next_yjbh_id(db: Session):
+    while True:
+        random_10_digit_number = random.randint(1000000000, 9999999999)
+        yjbhId = 'YHBZ' + str(random_10_digit_number)
+
+        it_exists = db.query(
+            exists().where(TaskRegistration.task_id == yjbhId)
+        ).scalar()
+
+        if it_exists == False:
+            return yjbhId
+
+
+@router.post('/create')
+async def create_task(
+        request: Request,
+        db: Session = Depends(get_db),
+        body=Depends(remove_xss_json),
+        user_id=Depends(valid_access_token)):
+    try:
+        # 验证必需的字段
+        required_fields = ['standard_type', 'file_title']
+        missing_fields = [field for field in required_fields if field not in body]
+        if missing_fields:
+            raise HTTPException(status_code=401, detail=f"Missing required fields: {', '.join(missing_fields)}")
+
+
+
+        fileList = []
+        if 'fileList' in body:
+            fileList = body['fileList']
+            del body['fileList']
+
+        standard_type = body['standard_type']
+        file_title = body['file_title']
+        for file in fileList:
+            print(file)
+            create_time = file["create_time"]
+            file_name = file['url']
+            file_name_desc = file['name']
+            status = file['status']
+            new_file = HazardStandardsFile(
+                file_id=new_guid(),
+                # foreign_key=task_base.id,
+                file_number=get_next_yjbh_id(db),
+                from_scenario='task_file',
+                file_name=file_name,
+                standard_type=standard_type,
+                file_title=file_title,
+                file_name_desc=file_name_desc,
+                status=status,
+                create_time =create_time
+            )
+            db.add(new_file)
+            db.commit()
+            print(new_file)
+        return {
+            "code": 200,
+            "msg": "succeed",
+            "data": file_title
+        }
+
+    except Exception as e:
+        db.rollback()
+        traceback.print_exc()
+        raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
+
+
+# 删除文件接口
+@router.delete('/delete')
+async def delete_file(  body=Depends(remove_xss_json),
+        user_id=Depends(valid_access_token),
+                        db: Session = Depends(get_db)                ):
+    try:
+        # 查询要删除的文件
+        file_id = body.get("file_id")
+        hazard_file = db.query(HazardStandardsFile).filter(HazardStandardsFile.file_id == file_id).first()
+
+        # 如果文件不存在,返回404错误
+        if hazard_file is None:
+            raise HTTPException(status_code=404, detail="File not found")
+
+        # 如果文件已经被删除,返回错误信息
+        if hazard_file.del_flag == '2':
+            raise HTTPException(status_code=400, detail="File already deleted")
+
+        # 更新删除标识
+        hazard_file.del_flag = '2'
+        hazard_file.update_time = datetime.now()
+
+        # 提交更改到数据库
+        db.commit()
+
+        return {
+            "code": 200,
+            "msg": "File marked as deleted",
+            "data": file_id
+        }
+
+    except Exception as e:
+        db.rollback()
+        traceback.print_exc()
+        raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
+
+
+
+
+# 查询文件接口
+@router.post('/select')
+@router.get('/select')
+async def select_files(
+        db: Session = Depends(get_db),
+        file_title: str = Query(None, description="文件标题"),
+        standard_type: str = Query(None, description="标准类型"),
+        # sortBy: str = Query(None, description="排序字段"),
+        # sortOrder: str = Query(None, description="排序顺序"),
+        pageNum: int = Query(1, gt=0, description="页码"),
+        pageSize: int = Query(10, gt=0, le=100, description="每页大小")):
+    try:
+        data_query = db.query(HazardStandardsFile).filter(HazardStandardsFile.del_flag != '2')
+
+
+        # 应用过滤条件
+        # if file_title:
+        #     data_query = data_query.filter(HazardStandardsFile.file_title == file_title)
+
+        if file_title:
+            data_query = data_query.filter(HazardStandardsFile.file_title.like(f'%{file_title}%'))
+
+        if standard_type:
+            data_query = data_query.filter(HazardStandardsFile.standard_type == standard_type)
+
+        # # 应用排序条件
+        # if sortBy:
+        #     if hasattr(HazardStandardsFile, sortBy):
+        #         sort_attr = getattr(HazardStandardsFile, sortBy)
+        #         data_query = data_query.order_by(sort_attr.asc() if sortOrder == 'asc' else sort_attr.desc())
+
+        total_count = data_query.count()
+        offset = (pageNum - 1) * pageSize
+        data_query = data_query.offset(offset).limit(pageSize)
+
+        rows = data_query.all()
+        data = []
+        for row in rows:
+            info = {
+                "file_id": row.file_id,
+                "file_number": row.file_number,
+                "file_name": row.file_name,
+                "standard_type": row.standard_type,
+                "file_name_desc": row.file_name_desc,
+                "file_title": row.file_title,
+                "create_time": row.create_time.strftime("%Y-%m-%d %H:%M:%S")  # 格式化日期时间
+            }
+            data.append(info)
+
+        return {
+            "code": 200,
+            "msg": "文件查询成功",
+            "data": data,
+            "total": total_count,
+            "pages": (total_count + pageSize - 1) // pageSize,
+            "current_page": pageNum,
+            "page_size": pageSize
+        }
+
+    except Exception as e:
+        db.rollback()
+        traceback.print_exc()
+        raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
+