Browse Source

823优化

baoyubo 10 months ago
parent
commit
0cc7f45c2c
1 changed files with 89 additions and 66 deletions
  1. 89 66
      routers/api/emergencyPlans/__init__.py

+ 89 - 66
routers/api/emergencyPlans/__init__.py

@@ -44,6 +44,22 @@ class DrillCreateForm(BaseModel):
     drillPicture : List[File] = []
 
 
+def get_file_query_fun(from_scenario,foreign_key):
+    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": "/api/file/download/%s" % file.file_name
+    } for file in files]
+    return result
+
+
 @router.get('/plan/list')
 async def get_emergency_plan_list(
     planType: str = Query(None, description='预案类型'),
@@ -117,9 +133,9 @@ async def get_emergency_plan_list(
         # 处理异常
         raise HTTPException(status_code=500, detail=str(e))
 
-@router.get('/plan/{planNum}')
+@router.get('/plan/{planId}')
 async def get_emergency_plan(
-    planNum: str ,
+    planId: str ,
     db: Session = Depends(get_db)
 ):
     try:
@@ -127,40 +143,29 @@ async def get_emergency_plan(
         query = db.query(EmergencyPlan)
         query = query.filter(EmergencyPlan.del_flag != '2')
         # 应用查询条件
-        if planNum:
-            query = query.filter(EmergencyPlan.plan_number == planNum)
+        if planId:
+            query = query.filter(EmergencyPlan.plan_number == planId)
 
         # 执行查询
         emergency_plan = query.first()
 
-        file_query = db.query(EmergencyFile)
-        file_query = file_query.filter(EmergencyFile.del_flag != '2')
-
-        file_query = file_query.filter(EmergencyFile.from_scenario == 'emergencyPlans_plan')
-        file_query = file_query.filter(EmergencyFile.foreign_key == emergency_plan.plan_id)
-        files = file_query.all()
         # 将查询结果转换为列表形式的字典
-        emergency_plans ={
-                "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,
-                "publish_date": emergency_plan.publish_date.strftime('%Y-%m-%d'),
-                "fileList": [{
-                    "uid":file.file_id,
-                    "status":file.status,
-                    "name":file.file_name_desc,
-                    "url":"/api/file/download/%s"%file.file_name
-                } for file in files ]
-            }
+        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,
+            "publish_date": emergency_plan.publish_date.strftime('%Y-%m-%d'),
+            "fileList": get_file_query_fun(from_scenario='emergencyPlans_plan',foreign_key=emergency_plan.plan_id)
+        }
 
         # 返回结果
         return {
             "code": 200,
             "msg": "成功获取预案详情",
-            "data": emergency_plans
+            "data": emergency_plan_result
         }
     except Exception as e:
         # 处理异常
@@ -301,6 +306,7 @@ async def delete_emergency_plan(
         raise HTTPException(status_code=500, detail=str(e))
 
 
+
 @router.get('/drill/list')
 async def get_emergency_drill_list(
     planNum: str = Query(None, description='预案编号'),
@@ -316,7 +322,9 @@ async def get_emergency_drill_list(
         if planNum:
             query = query.filter(EmergencyDrill.plan_number == planNum)
         else:
-            return 'planNum不存在'
+            detail = "planNum不存在"
+            raise HTTPException(status_code=404, detail="planNum不存在")
+
 
         # 计算总条目数
         total_items = query.count()
@@ -327,50 +335,19 @@ async def get_emergency_drill_list(
         # 将查询结果转换为列表形式的字典
         emergency_drill_list = []
         for drill in emergency_drill:
-            project_query = db.query(EmergencyFile)
-            project_query = project_query.filter(EmergencyFile.del_flag != '2')
-            project_query = project_query.filter(EmergencyFile.from_scenario == 'emergencyPlans_drill_project')
-            project_query = project_query.filter(EmergencyFile.foreign_key == drill.drill_id)
-            projects = project_query.all()
-
-            video_query = db.query(EmergencyFile)
-            video_query = video_query.filter(EmergencyFile.del_flag != '2')
-            video_query = video_query.filter(EmergencyFile.from_scenario == 'emergencyPlans_drill_video')
-            video_query = video_query.filter(EmergencyFile.foreign_key == drill.drill_id)
-            videos = video_query.all()
-
-            picture_query = db.query(EmergencyFile)
-            picture_query = picture_query.filter(EmergencyFile.del_flag != '2')
-            picture_query = picture_query.filter(EmergencyFile.from_scenario == 'emergencyPlans_drill_pic')
-            picture_query = picture_query.filter(EmergencyFile.foreign_key == drill.drill_id)
-            pictures = picture_query.all()
-
             emergency_drill = {
                 "drillId": drill.drill_id,
                 "drillName": drill.drill_name,
                 "drillUnit": drill.organizing_unit,
-                "year": "%s年"%drill.planned_annual,
+                "year": "%s年" % drill.planned_annual,
                 "drillTime": drill.planned_time.strftime('%Y-%m-%d %H:%M:%S'),
                 "drillAddress": drill.drill_location,
-                "drillProject":[{
-                    "uid": file.file_id,
-                    "status": file.status,
-                    "name": file.file_name_desc,
-                    "url": "/api/file/download/%s" % file.file_name
-                    } for file in projects ],
-                "drillVideo":[{
-                    "uid": file.file_id,
-                    "status": file.status,
-                    "name": file.file_name_desc,
-                    "url": "/api/file/download/%s" % file.file_name
-                    } for file in videos ],
-                "drillPicture":[{
-                    "uid": file.file_id,
-                    "status": file.status,
-                    "name": file.file_name_desc,
-                    "url": "/api/file/download/%s" % file.file_name
-                    } for file in pictures ]
-                }
+                "drillProject": get_file_query_fun(from_scenario='emergencyPlans_drill_project', foreign_key=drill.drill_id),
+                "drillVideo": get_file_query_fun(from_scenario='emergencyPlans_drill_video', foreign_key=drill.drill_id),
+                "drillPicture": get_file_query_fun(from_scenario='emergencyPlans_drill_pic', foreign_key=drill.drill_id)
+            }
+
+
             emergency_drill_list.append(emergency_drill)
 
 
@@ -387,6 +364,52 @@ async def get_emergency_drill_list(
         }
     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)
+):
+    try:
+        # 构建查询
+        query = db.query(EmergencyDrill)
+        query = query.filter(EmergencyDrill.del_flag != '2')
+        # 应用查询条件
+        if drillId:
+            query = query.filter(EmergencyDrill.plan_number == 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": "%s年" % 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),
+            "drillVideo": get_file_query_fun(from_scenario='emergencyPlans_drill_video', foreign_key=drill.drill_id),
+            "drillPicture": get_file_query_fun(from_scenario='emergencyPlans_drill_pic', foreign_key=drill.drill_id)
+        }
+
+        # 返回结果
+        return {
+            "code": 200,
+            "msg": "成功",
+            "data": emergency_drill
+        }
+    except Exception as e:
+        # 处理异常
+        if str(e) == '':
+            e = detail
         raise HTTPException(status_code=500, detail=str(e))
 
 
@@ -632,7 +655,7 @@ async def delete_emergency_training(
         query = query.filter(EmergencyTrainingSession.del_flag != '2')
         query = query.filter(EmergencyTrainingSession.training_id == trainingUid)
         training = query.first()
-        if not drill:
+        if not training:
             detail = "培训不存在"
             raise HTTPException(status_code=404, detail="培训不存在")