123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279 |
- #!/usr/bin/env python3
- # -*- coding: utf-8 -*-
- from fastapi import APIRouter, Request, Depends,Query, HTTPException, status
- from pydantic import BaseModel
- from typing import List
- from fastapi.responses import JSONResponse
- from database import get_db
- from sqlalchemy.orm import Session
- from datetime import datetime
- from models import *
- from utils import *
- import json
- router = APIRouter()
- @router.get('/plan/list')
- async def get_emergency_plan_list(
- plan_type: str = Query(None, description='预案类型'),
- publish_date: datetime = Query(None, description='发布日期'),
- plan_name: str = Query(None, description='预案名称'),
- page: int = Query(1, gt=0, description='页码'),
- page_size: int = Query(10, gt=0, description='每页条目数量'),
- db: Session = Depends(get_db)
- ):
- try:
- # 构建查询
- query = db.query(EmergencyPlan)
- query = query.filter(EmergencyPlan.del_flag != '2')
- # 应用查询条件
- if plan_type:
- query = query.filter(EmergencyPlan.plan_type == plan_type)
- if publish_date:
- query = query.filter(EmergencyPlan.publish_date == publish_date)
- if plan_name:
- query = query.filter(EmergencyPlan.plan_name.like(f'%{plan_name}%'))
- # 计算总条目数
- total_items = query.count()
- # 执行分页查询
- emergency_plans = query.offset((page - 1) * page_size).limit(page_size).all()
- # 将查询结果转换为列表形式的字典
- emergency_plans_list = [
- {
- "plan_id": plan.plan_id,
- "plan_number": plan.plan_number,
- "plan_name": plan.plan_name,
- "plan_type_desc": plan.plan_type_desc,
- "organizing_unit": plan.organizing_unit,
- "document_number": plan.document_number,
- "publish_date": plan.publish_date.strftime('%Y-%m-%d %H:%M:%S')
- }
- for plan in emergency_plans
- ]
- # 构建分页信息
- pagination_info = {
- "total": total_items,
- "page": page,
- "page_size": page_size,
- "total_pages": (total_items + page_size - 1) // page_size
- }
- # 返回结果
- return {
- "code": 200,
- "msg": "成功获取预案列表",
- "data": {
- "list": emergency_plans_list
- },
- "pagination": pagination_info
- }
- except Exception as e:
- # 处理异常
- raise HTTPException(status_code=500, detail=str(e))
- class File(BaseModel):
- file_name:str
- file_name_desc:str
- file_path : str = 'null'
- class PlanCreateForm(BaseModel):
- plan_name : str
- plan_type : int
- plan_type_desc : str
- publish_date: str
- organizing_unit : str
- document_number : str
- file_list : List[File] = []
- @router.post('/plan/create')
- async def create_emergency_plan(
- form_data:PlanCreateForm,
- db: Session = Depends(get_db)
- ):
- try:
- # 提取请求数据
- plan_name = form_data.plan_name
- plan_type = form_data.plan_type
- plan_type_desc = form_data.plan_type_desc
- publish_date = form_data.publish_date # 如果没有提供发布日期,则使用当前时间
- organizing_unit = form_data.organizing_unit # 使用用户位置作为编制单位
- document_number = form_data.document_number
- # 创建新的预案记录
- new_plan = EmergencyPlan(
- plan_id=new_guid(), # 假设使用 UUID 作为预案 UID
- plan_name=plan_name,
- plan_type=plan_type,
- plan_type_desc=plan_type_desc,
- publish_date=publish_date,
- organizing_unit=organizing_unit,
- document_number=document_number
- )
- # 添加到数据库会话并提交
- db.add(new_plan)
- db.commit()
- db.refresh(new_plan) # 可选,如果需要刷新实例状态
- new_plan.plan_number= f'YJYA{str(new_plan.id).zfill(10)}'
- db.commit()
- for file in form_data.file_list:
- file_name = file.file_name
- file_name_desc = file.file_name_desc
- file_path = file.file_path
- new_file = EmergencyFile(
- file_id = new_guid(),
- foreign_key = new_plan.plan_id,
- from_scenario = 'emergencyPlans_plan',
- file_name=file_name,
- file_name_desc = file_name_desc,
- file_path = file_path
- )
- db.add(new_file)
- db.commit()
- db.refresh(new_file)
- # 返回创建成功的响应
- return {
- "code": 200,
- "msg": "预案创建成功",
- "data": None
- }
- except Exception as e:
- # 处理异常
- raise HTTPException(status_code=500, detail=str(e))
- # @router.put('/plan/update')
- # async def update_emergency_plan(
- # plan_data: dict,
- # db: Session = Depends(get_db)
- # ):
- # try:
- # # 提取请求数据
- # query = db.query(EmergencyPlan)
- # query = query.filter(EmergencyPlan.plan_id == plan_data.get('plan_id'))
- # query = query.filter(EmergencyPlan.del_flag != '2')
- # plan = query.first()
- # if not plan:
- # detail = "预案不存在"
- # raise HTTPException(status_code=404, detail="预案不存在")
- #
- # plan.plan_name = plan_data.get('plan_name')
- # plan.plan_type = plan_data.get('plan_type')
- # plan.plan_type_desc = plan_data.get('plan_type_desc')
- # plan.publish_date = plan_data.get('publish_date') # 如果没有提供发布日期,则使用当前时间
- # plan.organizing_unit = plan_data.get('organizing_unit') # 使用用户位置作为编制单位
- # plan.document_number = plan_data.get('document_number')
- #
- #
- # # 更新到数据库会话并提交
- # db.commit()
- # db.refresh(new_plan) # 可选,如果需要刷新实例状态
- #
- # # 返回创建成功的响应
- # return {
- # "code": 200,
- # "msg": "预案更新成功",
- # "data": None
- # }
- # except Exception as e:
- # # 处理异常
- # if str(e)=='':
- # e = detail
- # raise HTTPException(status_code=500, detail=str(e))
- #
- #
- # @router.delete('/plan/delete')
- # async def delete_emergency_plan(
- # plan_data: dict,
- # db: Session = Depends(get_db)
- # ):
- # try:
- # # 提取请求数据
- # query = db.query(EmergencyPlan)
- # query = query.filter(EmergencyPlan.plan_id == plan_data.get('plan_id'))
- # query = query.filter(EmergencyPlan.del_flag != '2')
- # plan = query.first()
- # if not plan:
- # detail = "预案不存在"
- # raise HTTPException(status_code=404, detail="预案不存在")
- #
- # plan.del_flag = '2'
- #
- # # 更新到数据库会话并提交
- # db.commit()
- # db.refresh(new_plan) # 可选,如果需要刷新实例状态
- #
- # # 返回创建成功的响应
- # return {
- # "code": 200,
- # "msg": "预案删除成功",
- # "data": None
- # }
- # except Exception as e:
- # # 处理异常
- # if str(e) == '':
- # e = detail
- # raise HTTPException(status_code=500, detail=str(e))
- @router.get('/drill/list')
- async def get_emergency_plan_list(
- planNum: str = Query(None, description='预案编号'),
- page: int = Query(1, gt=0, description='页码'),
- page_size: int = Query(10, gt=0, description='每页条目数量'),
- db: Session = Depends(get_db)
- ):
- try:
- # 构建查询
- query = db.query(EmergencyDrill)
- query = query.filter(EmergencyDrill.del_flag != '2')
- # 应用查询条件
- if planNum:
- query = query.filter(EmergencyDrill.plan_number == planNum)
- else:
- return 'planNum不存在'
- # 计算总条目数
- total_items = query.count()
- # 执行分页查询
- emergency_drill = query.all() # .offset((page - 1) * page_size).limit(page_size)
- print(emergency_drill)
- # 将查询结果转换为列表形式的字典
- emergency_drill_list = [
- {
- "drillId": drill.drill_id,
- "drillName": drill.drill_name,
- "drillUnit": drill.organizing_unit,
- "year": drill.planned_annual,
- "drillTime": drill.planned_time.strftime('%Y-%m-%d %H:%M:%S'),
- "drillAddress": drill.drill_location,
- "drillProject":drill.drillProject,
- "drillVideo":[{ 'file_name':'123456.doc',
- 'file_name_desc':'测试.doc'}],
- "drillPicture": [{ 'file_name':'123456.doc',
- 'file_name_desc':'测试.doc'}]
- }
- for drill in emergency_drill
- ]
- # 返回结果
- return {
- "code": 200,
- "msg": "成功",
- "data": emergency_drill_list,
- "total": total_items,
- "page": page,
- "page_size": page_size,
- "total_pages": (total_items + page_size - 1) // page_size
- }
- except Exception as e:
- # 处理异常
- raise HTTPException(status_code=500, detail=str(e))
|