12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034 |
- #!/usr/bin/env python3
- # -*- coding: utf-8 -*-
- from fastapi import APIRouter, Request, Depends,Query, HTTPException, status
- from common.security import valid_access_token
- from fastapi.responses import JSONResponse
- from sqlalchemy.orm import Session
- from sqlalchemy import and_, or_
- from pydantic import BaseModel
- from datetime import datetime
- from database import get_db
- from typing import List
- from models import *
- from utils import *
- import json
- import traceback
- from . import event, response, unit, doc, contact
- router = APIRouter()
- router.include_router(event.router, prefix="/event", tags=["事件相关"])
- router.include_router(response.router, prefix="/response", tags=["响应相关"])
- router.include_router(unit.router, prefix="/unit", tags=["单位职责相关"])
- router.include_router(doc.router, prefix="/doc", tags=["结构化文档相关"])
- router.include_router(contact.router, prefix="/contact", tags=["预案人员配置相关"])
- class File(BaseModel):
- status :str
- name : str
- url : str
- class PlanCreateForm(BaseModel):
- planName : str
- planType : int
- # planTypeDesc : str
- publishDate: str
- organizingUnit : str
- document : str
- event_type: str
- fileList : List[File]
- class PlanUpdateForm(BaseModel):
- planUid : str
- planName : str = None
- planType : int = None
- publishDate: str = None
- organizingUnit : str = None
- document : str = None
- event_type: str = None
- fileList : List[File] = []
- class DrillCreateForm(BaseModel):
- planId : str
- drillName : str
- drillUnit : str
- year : int
- drillTime: str
- drillAddress : str
- lon : float
- lat : float
- drillProject : List[File]
- drillVideo : List[File]
- drillPicture : List[File]
- class DrillUpdateForm(BaseModel):
- drillId : str
- planId : str = None
- drillName : str = None
- drillUnit : str = None
- year : int = None
- drillTime: str = None
- drillAddress : str = None
- lon : float = None
- lat : float = None
- drillProject : List[File] = []
- drillVideo : List[File] = []
- drillPicture : List[File] = []
- class TrainingCreateForm(BaseModel):
- planId:str
- theme : str
- unitName : str
- trainingWay : str
- peopleNum: int
- startTime : str
- endTime : str
- Content :str
- address : str
- lon : float
- lat : float
- class TrainingUpdateForm(BaseModel):
- trainingId : str
- planId:str = None
- theme : str = None
- unitName : str = None
- trainingWay : str = None
- peopleNum: int = None
- startTime : str = None
- endTime : str = None
- Content :str = None
- address : str = None
- lon : float = None
- lat : float = None
- def get_file_query_fun(from_scenario,foreign_key,db: Session):
- file_query = db.query(EmergencyFile)
- file_query = file_query.filter(EmergencyFile.del_flag != '2')
- file_query = file_query.filter(EmergencyFile.from_scenario == from_scenario)
- file_query = file_query.filter(EmergencyFile.foreign_key == foreign_key)
- files = file_query.all()
- result = [{
- "uid": file.file_id,
- "status": file.status,
- "name": file.file_name_desc,
- "url": file.file_name #"/api/file/download/%s" %
- } for file in files]
- return result
- def delete_file_fun(from_scenario,foreign_key,db: Session):
- file_query = db.query(EmergencyFile)
- file_query = file_query.filter(EmergencyFile.del_flag != '2')
- file_query = file_query.filter(EmergencyFile.from_scenario == from_scenario)
- file_query = file_query.filter(EmergencyFile.foreign_key == foreign_key)
- files = file_query.all()
- for file in files:
- file.del_flag='2'
- # db.commit()
- def create_file_fun(file,from_scenario,foreign_key,db: Session):
- file_name = file.url
- file_name_desc = file.name
- status = file.status
- new_file = EmergencyFile(
- file_id=new_guid(),
- foreign_key=foreign_key,
- from_scenario=from_scenario,
- file_name=file_name,
- file_name_desc=file_name_desc,
- status=status
- )
- db.add(new_file)
- # db.commit()
- # db.refresh(new_file)
- @router.get('/plan/list')
- async def get_emergency_plan_list(
- planType: str = Query(None, description='预案类型'),
- # publishDate: datetime = Query(None, description='发布日期'),
- beginTime :str = Query(None, description='发布日期起始'),
- endTime :str = Query(None, description='发布日期结束'),
- # planName: str = Query(None, description='预案名称'),
- keywords : str = Query(None, description='预案名称/编制单位'),
- page: int = Query(1, gt=0, description='页码'),
- pageSize: int = Query(5, gt=0, description='每页条目数量'),
- db: Session = Depends(get_db),
- user_id = Depends(valid_access_token)
- ):
- try:
- # 构建查询
- query = db.query(EmergencyPlan)
- query = query.filter(EmergencyPlan.del_flag != '2')
- # 应用查询条件
- if planType:
- query = query.filter(EmergencyPlan.plan_type == planType)
- # if publishDate:
- # query = query.filter(EmergencyPlan.publish_date == publishDate)
- if beginTime:
- query = query.filter(EmergencyPlan.publish_date >= beginTime)
- if endTime:
- query = query.filter(EmergencyPlan.publish_date <= endTime)
- if keywords:
- query = query.filter(
- or_(
- EmergencyPlan.plan_name.like(f'%{keywords}%'),
- EmergencyPlan.organizing_unit.like(f'%{keywords}%')
- )
- )
- # query = query.filter(EmergencyPlan.plan_name.like(f'%{planName}%'))
- # 计算总条目数
- total_items = query.count()
- # 排序
- query = query.order_by(EmergencyPlan.create_time.desc())
- # 执行分页查询
- emergency_plans = query.offset((page - 1) * pageSize).limit(pageSize).all()
- # 将查询结果转换为列表形式的字典
- emergency_plans_list = [
- {
- "planUid": plan.plan_id,
- "planId": plan.plan_number,
- "planName": plan.plan_name,
- "planType": plan.plan_type,
- "organizingUnit": plan.organizing_unit,
- "document": plan.document_number,
- "publishDate": plan.publish_date.strftime('%Y-%m-%d'),
- "event_type": plan.event_type
- }
- for plan in emergency_plans
- ]
- # 返回结果
- return {
- "code": 200,
- "msg": "成功获取预案列表",
- "data": emergency_plans_list,
- "total": total_items,
- "page": page,
- "pageSize": pageSize,
- "totalPages": (total_items + pageSize - 1) // pageSize
- }
- except Exception as e:
- # 处理异常
- raise HTTPException(status_code=500, detail=str(e))
- @router.get('/plan/{planId}')
- async def get_emergency_plan(
- planId: str ,
- db: Session = Depends(get_db),
- user_id = Depends(valid_access_token)
- ):
- try:
- # 构建查询
- query = db.query(EmergencyPlan)
- query = query.filter(EmergencyPlan.del_flag != '2')
- # 应用查询条件
- if planId:
- query = query.filter(EmergencyPlan.plan_number == planId)
- # 执行查询
- emergency_plan = query.first()
- if not emergency_plan:
- detail = "预案不存在"
- raise HTTPException(status_code=404, detail="预案不存在")
- # 将查询结果转换为列表形式的字典
- emergency_plan_result = {
- "planUid": emergency_plan.plan_id,
- "planId": emergency_plan.plan_number,
- "planName": emergency_plan.plan_name,
- "planType": emergency_plan.plan_type,
- "organizingUnit": emergency_plan.organizing_unit,
- "document": emergency_plan.document_number,
- "publishDate": emergency_plan.publish_date.strftime('%Y-%m-%d'),
- "fileList": get_file_query_fun(from_scenario='emergencyPlans_plan',foreign_key=emergency_plan.plan_id,db=db),
- "event_type": emergency_plan.event_type
- }
- # 返回结果
- return {
- "code": 200,
- "msg": "成功获取预案详情",
- "data": emergency_plan_result
- }
- except Exception as e:
- # 处理异常
- if str(e)=='':
- e = detail
- raise HTTPException(status_code=500, detail=str(e))
- @router.post('/plan/create')
- async def create_emergency_plan(
- form_data:PlanCreateForm,
- db: Session = Depends(get_db),
- body = Depends(remove_xss_json),
- user_id = Depends(valid_access_token)
- ):
- try:
- # 提取请求数据
- plan_name = form_data.planName
- plan_type = form_data.planType
- # plan_type_desc = form_data.planTypeDesc
- publish_date = form_data.publishDate # 如果没有提供发布日期,则使用当前时间
- organizing_unit = form_data.organizingUnit # 使用用户位置作为编制单位
- document_number = form_data.document
- event_type = form_data.event_type
- # 创建新的预案记录
- 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,
- event_type=event_type,
- create_by = user_id
- )
- # 添加到数据库会话并提交
- 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.fileList:
- create_file_fun(file=file, from_scenario='emergencyPlans_plan', foreign_key=new_plan.plan_id, db=db)
- db.commit()
- # 返回创建成功的响应
- 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(
- form_data: PlanUpdateForm,
- db: Session = Depends(get_db),
- body = Depends(remove_xss_json),
- user_id = Depends(valid_access_token)
- ):
- try:
- # 提取请求数据
- query = db.query(EmergencyPlan)
- query = query.filter(EmergencyPlan.plan_id == form_data.planUid)
- query = query.filter(EmergencyPlan.del_flag != '2')
- plan = query.first()
- if not plan:
- detail = "预案不存在"
- raise HTTPException(status_code=404, detail="预案不存在")
- if form_data.planName:
- plan.plan_name = form_data.planName
- if form_data.planType:
- plan.plan_type = form_data.planType
- if form_data.publishDate:
- plan.publish_date = form_data.publishDate
- if form_data.organizingUnit:
- plan.organizing_unit = form_data.organizingUnit
- if form_data.document:
- plan.document_number = form_data.document
-
- if form_data.event_type:
- plan.event_type = form_data.event_type
- if len(form_data.fileList)>0:
- delete_file_fun(from_scenario='emergencyPlans_plan',foreign_key=plan.plan_id,db=db)
- for file in form_data.fileList:
- create_file_fun(file=file,from_scenario='emergencyPlans_plan',foreign_key=plan.plan_id,db=db)
- if user_id:
- plan.create_by = user_id
- # 更新到数据库会话并提交
- db.commit()
- db.refresh(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_plans(
- planUids: list,
- db: Session = Depends(get_db),
- body = Depends(remove_xss_json),
- user_id = Depends(valid_access_token)
- ):
- try:
- # 提取请求数据
- query = db.query(EmergencyPlan)
- query = query.filter(EmergencyPlan.del_flag != '2')
- query = query.filter(EmergencyPlan.plan_id.in_(planUids))
- plans = query.all()
- if not plans:
- detail = "预案不存在"
- raise HTTPException(status_code=404, detail="预案不存在")
- for plan in plans:
- plan.del_flag = '2'
- plan.create_by=user_id
- # 更新到数据库会话并提交
- db.commit()
- # 返回创建成功的响应
- 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/{planUid}')
- async def delete_emergency_plan(
- planUid: str,
- db: Session = Depends(get_db),
- body = Depends(remove_xss_json),
- user_id = Depends(valid_access_token)
- ):
- try:
- # 提取请求数据
- query = db.query(EmergencyPlan)
- query = query.filter(EmergencyPlan.del_flag != '2')
- query = query.filter(EmergencyPlan.plan_id == planUid)
- plan = query.first()
- if not plan:
- detail = "预案不存在"
- raise HTTPException(status_code=404, detail="预案不存在")
- plan.del_flag = '2'
- plan.create_by = user_id
- # 更新到数据库会话并提交
- db.commit()
- db.refresh(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_drill_list(
- planNum: str = Query(None, description='预案编号'),
- page: int = Query(1, gt=0, description='页码'),
- pageSize: int = Query(5, gt=0, description='每页条目数量'),
- db: Session = Depends(get_db),
- user_id = Depends(valid_access_token)
- ):
- try:
- # 构建查询
- query = db.query(EmergencyDrill)
- query = query.filter(EmergencyDrill.del_flag != '2')
- # 应用查询条件
- if planNum:
- query = query.filter(EmergencyDrill.plan_number == planNum)
- else:
- detail = "planNum不存在"
- raise HTTPException(status_code=404, detail="planNum不存在")
- # 计算总条目数
- total_items = query.count()
- query = query.order_by(EmergencyDrill.create_time.desc())
- # 执行分页查询
- emergency_drill = query.offset((page - 1) * pageSize).limit(pageSize).all() #
- print(emergency_drill)
- # 将查询结果转换为列表形式的字典
- emergency_drill_list = []
- for drill in emergency_drill:
- emergency_drill = {
- "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": get_file_query_fun(from_scenario='emergencyPlans_drill_project', foreign_key=drill.drill_id,db=db),
- "drillVideo": get_file_query_fun(from_scenario='emergencyPlans_drill_video', foreign_key=drill.drill_id,db=db),
- "drillPicture": get_file_query_fun(from_scenario='emergencyPlans_drill_pic', foreign_key=drill.drill_id,db=db)
- }
- emergency_drill_list.append(emergency_drill)
- # 返回结果
- return {
- "code": 200,
- "msg": "成功",
- "data": emergency_drill_list,
- "total": total_items,
- "page": page,
- "pageSize": pageSize,
- "totalPages": (total_items + pageSize - 1) // pageSize
- }
- except Exception as e:
- # 处理异常
- if str(e) == '':
- e = detail
- raise HTTPException(status_code=500, detail=str(e))
- @router.get('/drill/{drillId}')
- async def get_emergency_drill(
- drillId: str = Query(None, description='演练编号'),
- db: Session = Depends(get_db),
- body = Depends(remove_xss_json),
- user_id = Depends(valid_access_token)
- ):
- try:
- # 构建查询
- query = db.query(EmergencyDrill)
- query = query.filter(EmergencyDrill.del_flag != '2')
- # 应用查询条件
- if drillId:
- query = query.filter(EmergencyDrill.drill_id == drillId)
- else:
- detail = "drillId不存在"
- raise HTTPException(status_code=404, detail="drillId不存在")
- # 执行查询
- drill = query.first()
- # 将查询结果转换为字典形式
- emergency_drill = {
- "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": get_file_query_fun(from_scenario='emergencyPlans_drill_project',foreign_key=drill.drill_id,db=db),
- "drillVideo": get_file_query_fun(from_scenario='emergencyPlans_drill_video', foreign_key=drill.drill_id,db=db),
- "drillPicture": get_file_query_fun(from_scenario='emergencyPlans_drill_pic', foreign_key=drill.drill_id,db=db)
- }
- # 返回结果
- return {
- "code": 200,
- "msg": "成功",
- "data": emergency_drill
- }
- except Exception as e:
- # 处理异常
- if str(e) == '':
- e = detail
- raise HTTPException(status_code=500, detail=str(e))
- @router.post('/drill/create')
- async def create_emergency_drill(
- form_data:DrillCreateForm,
- db: Session = Depends(get_db),
- body = Depends(remove_xss_json),
- user_id = Depends(valid_access_token)
- ):
- try:
- # 提取请求数据
- plan_number = form_data.planId
- drill_name = form_data.drillName
- organizing_unit = form_data.drillUnit
- planned_annual = form_data.year
- planned_time = form_data.drillTime
- drill_location = form_data.drillAddress
- drill_lon = form_data.lon
- drill_lat = form_data.lat
- # 创建新的预案记录
- new_drill = EmergencyDrill(
- drill_id=new_guid(), # 假设使用 UUID 作为预案 UID
- plan_number = plan_number,
- drill_name=drill_name,
- organizing_unit = organizing_unit,
- planned_annual = planned_annual,
- planned_time = planned_time,
- drill_location = drill_location,
- drill_lon = drill_lon,
- drill_lat = drill_lat,
- create_by = user_id
- )
- # 添加到数据库会话并提交
- db.add(new_drill)
- db.commit()
- db.refresh(new_drill) # 可选,如果需要刷新实例状态
- for file in form_data.drillProject:
- create_file_fun(file=file, from_scenario='emergencyPlans_drill_project', foreign_key=new_drill.drill_id, db=db)
- for file in form_data.drillVideo:
- create_file_fun(file=file, from_scenario='emergencyPlans_drill_video', foreign_key=new_drill.drill_id, db=db)
- for file in form_data.drillPicture:
- create_file_fun(file=file, from_scenario='emergencyPlans_drill_pic', foreign_key=new_drill.drill_id, db=db)
- db.commit()
- # 返回创建成功的响应
- return {
- "code": 200,
- "msg": "演练创建成功",
- "data": None
- }
- except Exception as e:
- # 处理异常
- raise HTTPException(status_code=500, detail=str(e))
- @router.put('/drill/update')
- async def update_emergency_drill(
- form_data:DrillUpdateForm,
- db: Session = Depends(get_db),
- body = Depends(remove_xss_json),
- user_id = Depends(valid_access_token)
- ):
- try:
- query = db.query(EmergencyDrill)
- query = query.filter(EmergencyDrill.drill_id == form_data.drillId)
- query = query.filter(EmergencyDrill.del_flag != '2')
- drill = query.first()
- # 判断预案编号是否存在,存在即更新
- if form_data.planId:
- drill.plan_number=form_data.planId
- # 判断演练名称是否存在,存在即更新
- if form_data.drillName:
- drill.drill_name=form_data.drillName
- # 判断演练单位是否存在,存在即更新
- if form_data.drillUnit:
- drill.organizing_unit=form_data.drillUnit
- # 判断演练年份是否存在,存在即更新
- if form_data.year:
- drill.planned_annual=form_data.year
- # 判断演练日期是否存在,存在即更新
- if form_data.drillTime:
- drill.planned_time=form_data.drillTime
- # 判断演练地址是否存在,存在即更新
- if form_data.drillAddress:
- drill.drill_location=form_data.drillAddress
- # 判断经度是否存在,存在即更新
- if form_data.lon:
- drill.drill_lon=form_data.lon
- # 判断纬度是否存在,存在即更新
- if form_data.lat:
- drill.drill_lat=form_data.lat
- # 判断演练方案是否存在,存在即更新
- if len(form_data.drillProject)>0:
- delete_file_fun(from_scenario='emergencyPlans_drill_project',foreign_key=drill.drill_id,db=db)
- for file in form_data.drillProject:
- create_file_fun(file=file,from_scenario='emergencyPlans_drill_project',foreign_key=drill.drill_id,db=db)
- # 判断演练视频是否存在,存在即更新
- if len(form_data.drillVideo) > 0:
- delete_file_fun(from_scenario='emergencyPlans_drill_video', foreign_key=drill.drill_id, db=db)
- for file in form_data.drillVideo:
- create_file_fun(file=file, from_scenario='emergencyPlans_drill_video', foreign_key=drill.drill_id,db=db)
- # 判断演练图片是否存在,存在即更新
- if len(form_data.drillPicture) > 0:
- delete_file_fun(from_scenario='emergencyPlans_drill_pic', foreign_key=drill.drill_id, db=db)
- for file in form_data.drillPicture:
- create_file_fun(file=file, from_scenario='emergencyPlans_drill_pic', foreign_key=drill.drill_id,db=db)
- if user_id:
- drill.create_by = user_id
- # 提交所有更新
- db.commit()
- # 返回更新成功的响应
- return {
- "code": 200,
- "msg": "演练更新成功",
- "data": None
- }
- except Exception as e:
- # 处理异常
- raise HTTPException(status_code=500, detail=str(e))
- @router.delete('/drill/delete')
- async def delete_emergency_drill(
- drillUids: list,
- db: Session = Depends(get_db),
- body = Depends(remove_xss_json),
- user_id = Depends(valid_access_token)
- ):
- try:
- # 提取请求数据
- query = db.query(EmergencyDrill)
- query = query.filter(EmergencyDrill.del_flag != '2')
- query = query.filter(EmergencyDrill.drill_id.in_(drillUids))
- drills = query.all()
- if not drills:
- detail = "演练不存在"
- raise HTTPException(status_code=404, detail="演练不存在")
- for drill in drills:
- drill.del_flag = '2'
- drill.create_by=user_id
- # 更新到数据库会话并提交
- db.commit()
- # 返回创建成功的响应
- 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('/drill/delete/{drillUid}')
- async def delete_emergency_drill(
- drillUid: str,
- db: Session = Depends(get_db),
- user_id = Depends(valid_access_token)
- ):
- try:
- # 提取请求数据
- query = db.query(EmergencyDrill)
- query = query.filter(EmergencyDrill.del_flag != '2')
- query = query.filter(EmergencyDrill.drill_id == drillUid)
- drill = query.first()
- if not drill:
- detail = "演练不存在"
- raise HTTPException(status_code=404, detail="演练不存在")
- drill.del_flag = '2'
- drill.create_by = user_id
- # 更新到数据库会话并提交
- db.commit()
- db.refresh(drill) # 可选,如果需要刷新实例状态
- # 返回创建成功的响应
- 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('/training/list')
- async def get_emergency_training_list(
- planNum: str = Query(None, description='预案编号'),
- page: int = Query(1, gt=0, description='页码'),
- pageSize: int = Query(5, gt=0, description='每页条目数量'),
- db: Session = Depends(get_db),
- user_id = Depends(valid_access_token)
- ):
- try:
- # 构建查询
- query = db.query(EmergencyTrainingSession)
- query = query.filter(EmergencyTrainingSession.del_flag != '2')
- # 应用查询条件
- if planNum:
- query = query.filter(EmergencyTrainingSession.plan_number == planNum)
- else:
- detail = "planNum不存在"
- raise HTTPException(status_code=404, detail="planNum不存在")
- # 计算总条目数
- total_items = query.count()
- query = query.order_by(EmergencyTrainingSession.start_time.desc())
- # 执行分页查询
- emergency_training = query.offset((page - 1) * pageSize).limit(pageSize).all() #
- # print(emergency_drill)
- # 将查询结果转换为列表形式的字典
- emergency_training_list = [
- {
- "trainingId": training.training_id,
- "theme": training.training_theme,
- "unitName": training.training_unit,
- "peopleNum": training.participant_count,
- "trainingWay":training.training_method,
- "startTime":training.start_time.strftime('%Y-%m-%d %H:%M:%S'),
- "endTime": training.end_time.strftime('%Y-%m-%d %H:%M:%S'),
- "address": training.training_location,
- "Content":training.training_content
- }
- for training in emergency_training
- ]
- # 返回结果
- return {
- "code": 200,
- "msg": "成功",
- "data": emergency_training_list,
- "total": total_items,
- "page": page,
- "pageSize": pageSize,
- "totalPages": (total_items + pageSize - 1) // pageSize
- }
- except Exception as e:
- # 处理异常
- if str(e) == '':
- e = detail
- raise HTTPException(status_code=500, detail=str(e))
- @router.get('/training/{trainingId}')
- async def get_emergency_training(
- trainingId: str = Query(None, description='培训编号'),
- db: Session = Depends(get_db),
- user_id = Depends(valid_access_token)
- ):
- try:
- # 构建查询
- query = db.query(EmergencyTrainingSession)
- query = query.filter(EmergencyTrainingSession.del_flag != '2')
- # 应用查询条件
- if trainingId:
- query = query.filter(EmergencyTrainingSession.training_id == trainingId)
- else:
- detail = "trainingId不存在"
- raise HTTPException(status_code=404, detail="trainingId不存在")
- # 执行查询
- training = query.first() #
- # 将查询结果转换为列表形式的字典
- emergency_training = {
- "trainingId": training.training_id,
- "theme": training.training_theme,
- "unitName": training.training_unit,
- "peopleNum": training.participant_count,
- "trainingWay":training.training_method,
- "startTime":training.start_time.strftime('%Y-%m-%d %H:%M:%S'),
- "endTime": training.end_time.strftime('%Y-%m-%d %H:%M:%S'),
- "address": training.training_location,
- "Content":training.training_content
- }
- # 返回结果
- return {
- "code": 200,
- "msg": "成功",
- "data": emergency_training
- }
- except Exception as e:
- # 处理异常
- if str(e) == '':
- e = detail
- raise HTTPException(status_code=500, detail=str(e))
- @router.post('/training/create')
- async def create_emergency_training(
- form_data:TrainingCreateForm,
- db: Session = Depends(get_db),
- user_id = Depends(valid_access_token)
- ):
- try:
- # 创建新的预案记录
- new_training = EmergencyTrainingSession(
- training_id=new_guid(), # 假设使用 UUID 作为预案 UID
- training_theme=form_data.theme,
- training_unit=form_data.unitName,
- training_method=form_data.trainingWay,
- participant_count=form_data.peopleNum,
- start_time=form_data.startTime,
- end_time=form_data.endTime,
- training_content=form_data.Content,
- training_location=form_data.address,
- training_lon=form_data.lon,
- training_lat=form_data.lat,
- plan_number = form_data.planId
- )
- # 添加到数据库会话并提交
- db.add(new_training)
- db.commit()
- db.refresh(new_training) # 可选,如果需要刷新实例状态
- # 返回创建成功的响应
- return {
- "code": 200,
- "msg": "培训创建成功",
- "data": None
- }
- except Exception as e:
- # 处理异常
- raise HTTPException(status_code=500, detail=str(e))
- @router.put('/training/update')
- async def update_emergency_training(
- form_data:TrainingUpdateForm,
- db: Session = Depends(get_db),
- user_id = Depends(valid_access_token)
- ):
- try:
- query = db.query(EmergencyTrainingSession)
- query = query.filter(EmergencyTrainingSession.training_id == form_data.trainingId)
- query = query.filter(EmergencyTrainingSession.del_flag != '2')
- training = query.first()
- # 判断预案编号是否存在,存在即更新
- if form_data.planId:
- training.plan_number = form_data.planId
- # 判断预案编号是否存在,存在即更新
- if form_data.theme:
- training.training_theme = form_data.theme
- # 判断预案编号是否存在,存在即更新
- if form_data.unitName:
- training.training_unit = form_data.unitName
- # 判断预案编号是否存在,存在即更新
- if form_data.trainingWay:
- training.training_method = form_data.trainingWay
- # 判断预案编号是否存在,存在即更新
- if form_data.peopleNum:
- training.participant_count = form_data.peopleNum
- # 判断预案编号是否存在,存在即更新
- if form_data.startTime:
- training.start_time = form_data.startTime
- # 判断预案编号是否存在,存在即更新
- if form_data.endTime:
- training.end_time = form_data.endTime
- # 判断预案编号是否存在,存在即更新
- if form_data.Content:
- training.training_content = form_data.Content
- # 判断预案编号是否存在,存在即更新
- if form_data.address:
- training.training_location = form_data.address
- # 判断预案编号是否存在,存在即更新
- if form_data.lon:
- training.training_lon = form_data.lon
- # 判断预案编号是否存在,存在即更新
- if form_data.lat:
- training.training_lat = form_data.lat
- if user_id:
- training.create_by = user_id
- # 提交
- db.commit()
- # 返回创建成功的响应
- return {
- "code": 200,
- "msg": "培训更新成功",
- "data": None
- }
- except Exception as e:
- # 处理异常
- raise HTTPException(status_code=500, detail=str(e))
- @router.delete('/training/delete')
- async def delete_emergency_training(
- trainingUids: list,
- db: Session = Depends(get_db),
- user_id = Depends(valid_access_token)
- ):
- try:
- # 提取请求数据
- query = db.query(EmergencyTrainingSession)
- query = query.filter(EmergencyTrainingSession.del_flag != '2')
- query = query.filter(EmergencyTrainingSession.training_id.in_(trainingUids))
- trainings = query.all()
- if not trainings:
- detail = "培训不存在"
- raise HTTPException(status_code=404, detail="培训不存在")
- for training in trainings:
- training.del_flag = '2'
- training.create_by = user_id
- # 更新到数据库会话并提交
- db.commit()
- # 返回创建成功的响应
- 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('/training/delete/{trainingUid}')
- async def delete_emergency_training(
- trainingUid: str,
- db: Session = Depends(get_db),
- user_id = Depends(valid_access_token)
- ):
- try:
- # 提取请求数据
- query = db.query(EmergencyTrainingSession)
- query = query.filter(EmergencyTrainingSession.del_flag != '2')
- query = query.filter(EmergencyTrainingSession.training_id == trainingUid)
- training = query.first()
- if not training:
- detail = "培训不存在"
- raise HTTPException(status_code=404, detail="培训不存在")
- training.del_flag = '2'
- training.create_by = user_id
- # 更新到数据库会话并提交
- db.commit()
- db.refresh(training) # 可选,如果需要刷新实例状态
- # 返回创建成功的响应
- return {
- "code": 200,
- "msg": "培训删除成功",
- "data": None
- }
- except Exception as e:
- # 处理异常
- if str(e) == '':
- e = detail
- raise HTTPException(status_code=500, detail=str(e))
|