baoyubo 10 mēneši atpakaļ
vecāks
revīzija
6822dbd2d5
1 mainītis faili ar 172 papildinājumiem un 71 dzēšanām
  1. 172 71
      routers/api/emergencyPlans/__init__.py

+ 172 - 71
routers/api/emergencyPlans/__init__.py

@@ -28,6 +28,16 @@ class PlanCreateForm(BaseModel):
     publishDate: str
     organizingUnit : str
     document : str
+    fileList : List[File]
+
+class PlanUpdateForm(BaseModel):
+    planId : str
+    planName : str = None
+    planType : int = None
+    # planTypeDesc : str
+    publishDate: str = None
+    organizingUnit : str = None
+    document : str = None
     fileList : List[File] = []
 
 class DrillCreateForm(BaseModel):
@@ -39,12 +49,25 @@ class DrillCreateForm(BaseModel):
     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] = []
 
-
-def get_file_query_fun(from_scenario,foreign_key):
+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')
 
@@ -59,6 +82,33 @@ def get_file_query_fun(from_scenario,foreign_key):
     } 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(
@@ -148,7 +198,9 @@ async def get_emergency_plan(
 
         # 执行查询
         emergency_plan = query.first()
-
+        if not emergency_plan:
+            detail = "预案不存在"
+            raise HTTPException(status_code=404, detail="预案不存在")
         # 将查询结果转换为列表形式的字典
         emergency_plan_result = {
             "planUid": emergency_plan.plan_id,
@@ -158,7 +210,7 @@ async def get_emergency_plan(
             "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)
+            "fileList": get_file_query_fun(from_scenario='emergencyPlans_plan',foreign_key=emergency_plan.plan_id,db=db)
         }
 
         # 返回结果
@@ -169,6 +221,8 @@ async def get_emergency_plan(
         }
     except Exception as e:
         # 处理异常
+        if str(e)=='':
+            e = detail
         raise HTTPException(status_code=500, detail=str(e))
 
 
@@ -206,20 +260,7 @@ async def create_emergency_plan(
         new_plan.plan_number= f'YJYA{str(new_plan.id).zfill(10)}'
         db.commit()
         for file in form_data.fileList:
-            file_name = file.url
-            file_name_desc = file.name
-            status = file.status
-            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,
-                status = status
-            )
-            db.add(new_file)
-            db.commit()
-            db.refresh(new_file)
+            create_file_fun(file=file, from_scenario='emergencyPlans_plan', foreign_key=plan.plan_id, db=db)
 
         # 返回创建成功的响应
         return {
@@ -232,46 +273,58 @@ async def create_emergency_plan(
         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.put('/plan/update')
+async def update_emergency_plan(
+    form_data: PlanUpdateForm,
+    db: Session = Depends(get_db)
+):
+    try:
+        # 提取请求数据
+        query = db.query(EmergencyPlan)
+        query = query.filter(EmergencyPlan.plan_id == form_data.planId)
+        query = query.filter(EmergencyPlan.del_flag != '2')
+        plan = query.first()
+        if not plan:
+            detail = "预案不存在"
+            raise HTTPException(status_code=404, detail="预案不存在")
+
+        if planName:
+            plan.plan_name = form_data.planName
+
+        if planType:
+            plan.plan_type = form_data.planType
+
+        if publishDate:
+            plan.publish_date = form_data.publishDate
+
+        if organizingUnit:
+            plan.organizing_unit = form_data.organizingUnit
+
+        if document:
+            plan.document_number = form_data.document
+
+        if len(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)
+
+        # 更新到数据库会话并提交
+        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/{planUid}')
 async def delete_emergency_plan(
         planUid: str,
@@ -342,16 +395,12 @@ async def get_emergency_drill_list(
                 "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)
+                "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,
@@ -368,7 +417,7 @@ async def get_emergency_drill_list(
             e = detail
         raise HTTPException(status_code=500, detail=str(e))
 
-@router.get('/drill/{drillId}}')
+@router.get('/drill/{drillId}')
 async def get_emergency_drill(
     drillId: str = Query(None, description='演练编号'),
     db: Session = Depends(get_db)
@@ -379,7 +428,7 @@ async def get_emergency_drill(
         query = query.filter(EmergencyDrill.del_flag != '2')
         # 应用查询条件
         if drillId:
-            query = query.filter(EmergencyDrill.plan_number == drillId)
+            query = query.filter(EmergencyDrill.drill_id == drillId)
         else:
             detail = "drillId不存在"
             raise HTTPException(status_code=404, detail="drillId不存在")
@@ -395,9 +444,9 @@ async def get_emergency_drill(
             "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)
+            "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)
         }
 
         # 返回结果
@@ -555,7 +604,9 @@ async def get_emergency_training_list(
         if planNum:
             query = query.filter(EmergencyTrainingSession.plan_number == planNum)
         else:
-            return 'planNum不存在'
+            detail = "planNum不存在"
+            raise HTTPException(status_code=404, detail="planNum不存在")
+
 
         # 计算总条目数
         total_items = query.count()
@@ -592,6 +643,55 @@ async def get_emergency_training_list(
         }
     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)
+):
+    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": "%s人"%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))
 
 class TrainingCreateForm(BaseModel):
@@ -642,6 +742,7 @@ async def create_emergency_training(
         }
     except Exception as e:
         # 处理异常
+
         raise HTTPException(status_code=500, detail=str(e))
 
 @router.delete('/training/delete/{trainingUid}')