__init__.py 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. from fastapi import APIRouter, Request, Depends
  4. from fastapi.responses import JSONResponse
  5. from database import get_db
  6. from sqlalchemy.orm import Session
  7. from datetime import datetime
  8. from models import *
  9. import json
  10. router = APIRouter()
  11. @router.get('/plan/list')
  12. async def get_emergency_plan_list(
  13. plan_type: str = Query(None, description='预案类型'),
  14. publish_date: datetime = Query(None, description='发布日期'),
  15. plan_name: str = Query(None, description='预案名称'),
  16. db: Session = Depends(get_db)
  17. ):
  18. try:
  19. # 构建查询
  20. query = db.query(EmergencyPlan)
  21. query = query.filter(EmergencyPlan.del_flag != '2')
  22. # 应用查询条件
  23. if plan_type:
  24. query = query.filter(EmergencyPlan.plan_type == plan_type)
  25. if publish_date:
  26. query = query.filter(EmergencyPlan.publish_date == publish_date)
  27. if plan_name:
  28. query = query.filter(EmergencyPlan.plan_name.like(f'%{plan_name}%'))
  29. # 执行查询
  30. emergency_plans = query.all()
  31. # 将查询结果转换为列表形式的字典
  32. emergency_plans_list = [
  33. {
  34. "plan_id": plan.plan_id,
  35. "plan_number": plan.plan_number,
  36. "plan_name": plan.plan_name,
  37. "plan_type_desc": plan.plan_type_desc,
  38. "organizing_unit": plan.organizing_unit,
  39. "document_number": plan.document_number,
  40. "publish_date": plan.publish_date.strftime('%Y-%m-%d %H:%M:%S')
  41. }
  42. for plan in emergency_plans
  43. ]
  44. # 返回结果
  45. return {
  46. "code": 200,
  47. "msg": "成功获取预案列表",
  48. "data": emergency_plans_list
  49. }
  50. except Exception as e:
  51. # 处理异常
  52. raise HTTPException(status_code=500, detail=str(e))
  53. @router.post('/plan/create')
  54. async def create_emergency_plan(
  55. plan_data: dict,
  56. db: Session = Depends(database.get_db)
  57. ):
  58. try:
  59. # 提取请求数据
  60. plan_name = plan_data.get('plan_name')
  61. plan_type = plan_data.get('plan_type')
  62. plan_type_desc = plan_data.get('plan_type_desc')
  63. publish_date = plan_data.get('publish_date') # 如果没有提供发布日期,则使用当前时间
  64. organizing_unit = plan_data.get('organizing_unit') # 使用用户位置作为编制单位
  65. document_number = plan_data.get('document_number')
  66. # 创建新的预案记录
  67. new_plan = EmergencyPlan(
  68. plan_id=uuid.uuid4().hex, # 假设使用 UUID 作为预案 UID
  69. plan_name=plan_name,
  70. plan_type=plan_type,
  71. plan_type_desc=plan_type_desc,
  72. publish_date=publish_date,
  73. organizing_unit=organizing_unit,
  74. document_number=document_number
  75. )
  76. # 添加到数据库会话并提交
  77. db.add(new_plan)
  78. db.commit()
  79. db.refresh(new_plan) # 可选,如果需要刷新实例状态
  80. new_plan.plan_number= f'YJYA{str(new_plan.id).zfill(10)}'
  81. db.commit()
  82. # 返回创建成功的响应
  83. return {
  84. "code": 200,
  85. "msg": "预案创建成功",
  86. "data": None
  87. }
  88. except Exception as e:
  89. # 处理异常
  90. raise HTTPException(status_code=500, detail=str(e))
  91. @router.put('/plan/update')
  92. async def update_emergency_plan(
  93. plan_data: dict,
  94. db: Session = Depends(database.get_db)
  95. ):
  96. try:
  97. # 提取请求数据
  98. query = db.query(EmergencyPlan)
  99. query = query.filter(EmergencyPlan.plan_id == plan_data.get('plan_id'))
  100. query = query.filter(EmergencyPlan.del_flag != '2')
  101. plan = query.first()
  102. if not plan:
  103. detail = "预案不存在"
  104. raise HTTPException(status_code=404, detail="预案不存在")
  105. plan.plan_name = plan_data.get('plan_name')
  106. plan.plan_type = plan_data.get('plan_type')
  107. plan.plan_type_desc = plan_data.get('plan_type_desc')
  108. plan.publish_date = plan_data.get('publish_date') # 如果没有提供发布日期,则使用当前时间
  109. plan.organizing_unit = plan_data.get('organizing_unit') # 使用用户位置作为编制单位
  110. plan.document_number = plan_data.get('document_number')
  111. # 更新到数据库会话并提交
  112. db.commit()
  113. db.refresh(new_plan) # 可选,如果需要刷新实例状态
  114. # 返回创建成功的响应
  115. return {
  116. "code": 200,
  117. "msg": "预案更新成功",
  118. "data": None
  119. }
  120. except Exception as e:
  121. # 处理异常
  122. if str(e)=='':
  123. e = detail
  124. raise HTTPException(status_code=500, detail=str(e))
  125. @router.delete('/plan/delete')
  126. async def delete_emergency_plan(
  127. plan_data: dict,
  128. db: Session = Depends(database.get_db)
  129. ):
  130. try:
  131. # 提取请求数据
  132. query = db.query(EmergencyPlan)
  133. query = query.filter(EmergencyPlan.plan_id == plan_data.get('plan_id'))
  134. query = query.filter(EmergencyPlan.del_flag != '2')
  135. plan = query.first()
  136. if not plan:
  137. detail = "预案不存在"
  138. raise HTTPException(status_code=404, detail="预案不存在")
  139. plan.del_flag = '2'
  140. # 更新到数据库会话并提交
  141. db.commit()
  142. db.refresh(new_plan) # 可选,如果需要刷新实例状态
  143. # 返回创建成功的响应
  144. return {
  145. "code": 200,
  146. "msg": "预案删除成功",
  147. "data": None
  148. }
  149. except Exception as e:
  150. # 处理异常
  151. if str(e) == '':
  152. e = detail
  153. raise HTTPException(status_code=500, detail=str(e))