Browse Source

Merge branch 'master' of https://gogs.tjp.com.cn/maoming/python-fastapi-mm-zhcs-yj-api

baoyubo 9 months ago
parent
commit
cbbb3fa9c7

+ 12 - 3
models/taskRegistration_base.py

@@ -5,6 +5,7 @@ from datetime import datetime
 # from database import Base
 from sqlalchemy.ext.declarative import declarative_base
 from sqlalchemy.orm import relationship, sessionmaker
+from sqlalchemy import func
 
 
 
@@ -24,10 +25,18 @@ class TaskRegistration(Base):
     task_description = Column(Text, nullable=False,comment='任务内容/描述')
     registrar = Column(String(255), nullable=False,comment='登记人')
     registrar_id = Column(String(255), nullable=False,comment='登记人ID')
-    creation_time = Column(DateTime, default=datetime.utcnow,comment='创建时间')
-    update_time = Column(DateTime, default=datetime.utcnow,comment='更新时间')
+    creation_time = Column(DateTime, default=datetime.now,comment='创建时间')
+    update_time = Column(DateTime, default=datetime.now,comment='创建时间')
     processing_status = Column(String(50), default='处理中',comment='任务状态')
+    event_code = Column(String(50), nullable=False,comment='关联事件ID')
 
     # 你可以添加更多的字段和关系,例如与用户模型的外键关系
     # user_id = Column(Integer, ForeignKey('users.id'))
-    # user = relationship("User", back_populates="task_registrations")
+    # user = relationship("User", back_populates="task_registrations")
+
+class TaskUnit(Base):
+    __tablename__ = 'task_unit'
+
+    id = Column(Integer, primary_key=True, autoincrement=True, index=True,comment='id')
+    unit_name = Column(String(255), nullable=False, comment='部门名称')
+    unit_duty = Column(Text, nullable=False,comment='部门职责')

+ 16 - 4
routers/api/eventManagement/event.py

@@ -570,6 +570,7 @@ async def lauch_emergency_plan(
     # 绑定预案ID和响应等级
     event_row.plan_id = plan_row.plan_number
     event_row.response_level = response_level
+    event_row.event_type = plan_row.event_type
     event_row.del_flag = "0" # 临时事件改为正式事件
     db.commit()
     
@@ -627,11 +628,22 @@ async def send_emergency_plan_task_by_yzy(
         if row_exists is not None:
             continue
         
+        # 通过预案人员管理匹配负责人
+        user_id = 0
+        user_name = ''
+        contact_row = db.query(EmergencyContactInfo).filter(EmergencyContactInfo.unit_id == dept_id).first()
+        yzy_account = contact_row.yue_gov_ease_phone
+        nick_name = contact_row.contact_name
+        
+        yzy_user_row = db.query(YzyOrgUserEntity).filter(YzyOrgUserEntity.telephonenumber == yzy_account).first()
+        yzy_user_id = yzy_user_row.userid
+
+
         # 通过通讯录匹配相关负责人
-        user_row = db.query(SysUser).filter(SysUser.user_id == 1).first()
-        user_id = user_row.user_id
-        user_name = user_row.user_name
-        nick_name = user_row.nick_name
+        # user_row = db.query(SysUser).filter(SysUser.user_id == 1).first()
+        # user_id = user_row.user_id
+        # user_name = user_row.user_name
+        # nick_name = user_row.nick_name
         yzy_user_id = "eb4kehgy6wj4qn0jhx1dk6"  # 暂时写死梦梅的账号
         yzy_content = "{},您好!《{}》现已全面启动,特此通知您单位迅速响应,全力做好预案工作要点:{}".format(row.dept_name, plan_info['plan_name'], row.content)
 

+ 90 - 51
routers/api/taskRegistration/__init__.py

@@ -8,7 +8,7 @@ from models import *
 from common.db import db_task
 from common.security import valid_access_token
 from datetime import datetime, timedelta
-from fastapi import APIRouter, Depends,HTTPException,Response,Query
+from fastapi import APIRouter, Depends, HTTPException, Response, Query
 from database import get_db
 from pydantic import BaseModel
 
@@ -23,17 +23,19 @@ async def create_task(
         user_id=Depends(valid_access_token)):
     try:
         # 验证必需的字段
-        required_fields = ['task_description', 'unit_name', 'registrar']
+        required_fields = ['task_description', 'unit_name', 'registrar','event_code']
         missing_fields = [field for field in required_fields if field not in body]
         if missing_fields:
             raise HTTPException(status_code=401, detail=f"Missing required fields: {', '.join(missing_fields)}")
 
-        # eventId = db_event_management.get_next_event_id(db)
-        task_id =db_task.get_next_event_id(db)
+        event_code = db.query(EventBase).filter(EventBase.event_code == body.get('event_code')).first()
+        if not event_code:
+            return Response(content="事件不存在", status_code=400)
+        task_id = db_task.get_next_event_id(db)
 
         task_base = TaskRegistration(
             **body,
-            task_id = task_id
+            task_id=task_id
         )
         db.add(task_base)
         db.commit()
@@ -49,6 +51,7 @@ async def create_task(
         traceback.print_exc()
         raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
 
+
 class TaskQuery(BaseModel):
     task_id: str = None
     task_description: str = None
@@ -57,18 +60,31 @@ class TaskQuery(BaseModel):
     creation_time: str = None
     processing_status: str = None
 
+
+
 @router.post('/select')
 @router.get('/select')
 async def select_tasks(
-    request: Request,
-    db: Session = Depends(get_db),
-    query: TaskQuery = Depends(),
-    user_id=Depends(valid_access_token),
-    pageNum: int = Query(1, gt=0, description="页码"),
-    pageSize: int = Query(10, gt=0, le=100, description="每页大小")):
+        request: Request,
+        db: Session = Depends(get_db),
+        query: TaskQuery = Depends(),
+        sortBy: str = Query(None, description="排序字段"),
+        sortOrder: str = Query(None, description="排序顺序"),
+        user_id=Depends(valid_access_token),
+        pageNum: int = Query(1, gt=0, description="页码"),
+        event_code: str = Query(None, description="事件ID"),
+        pageSize: int = Query(10, gt=0, le=100, description="每页大小")):
     try:
+        missing_event_code = db.query(EventBase).filter(EventBase.event_code == event_code).first()
+        print(missing_event_code)
+        if not missing_event_code:
+            return Response(content="事件不存在", status_code=400)
+
+
         data_query = db.query(TaskRegistration).filter(TaskRegistration.del_flag != '2')
+        data_query = data_query.filter(TaskRegistration.event_code == event_code)
 
+        # 应用过滤条件
         if query.task_id:
             data_query = data_query.filter(TaskRegistration.task_id == query.task_id)
         if query.task_description:
@@ -81,15 +97,21 @@ async def select_tasks(
             data_query = data_query.filter(TaskRegistration.creation_time == query.creation_time)
         if query.processing_status:
             data_query = data_query.filter(TaskRegistration.processing_status == query.processing_status)
-		
+
+        print(TaskRegistration,sortBy)
+        if sortBy:
+            if hasattr(TaskRegistration, sortBy):
+                print("xx")
+                sort_attr = getattr(TaskRegistration, sortBy)
+                data_query = data_query.order_by(sort_attr.asc() if sortOrder == 'asc' else sort_attr.desc())
+
+
+
         total_count = data_query.count()
-        # 计算分页的偏移量
         offset = (pageNum - 1) * pageSize
-        # 应用分页
         data_query = data_query.offset(offset).limit(pageSize)
 
         tasks = data_query.all()
-        
 
         return {
             "code": 200,
@@ -107,36 +129,36 @@ async def select_tasks(
         raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
 
 
-
-
 @router.put('/update')
 async def update_task_status(
-    request: Request,
-    db: Session = Depends(get_db),
-    user_id=Depends(valid_access_token)):  # 确保用户已验证
-    try:
-        body = await request.json()
-        task_id_to_use = body.get('task_id')
-        processing_status = body.get('processing_status')
+        request: Request,
+        db: Session = Depends(get_db),
+        user_id=Depends(valid_access_token)):
+    body = await request.json()
+    task_id_to_use = body.get('task_id')
+    processing_status = body.get('processing_status')
 
-        if not task_id_to_use:
-            return Response(content="Missing required parameter 'task_id'", status_code=400)
-        if processing_status not in ['已完成', '未完成']:
-            return Response(content="processing_status must be '已完成' or '未完成'", status_code=400)
+    event_code = db.query(EventBase).filter(EventBase.event_code == body.get('event_code')).first()
+    if not event_code:
+        return Response(content="事件不存在", status_code=400)
 
-        # 查询要更新的任务
-        # data_query = db.query(TaskRegistration).filter(TaskRegistration.del_flag != '2')
-        task_entry = db.query(TaskRegistration).filter(TaskRegistration.task_id == task_id_to_use).first()
-        print(task_entry)
-        print(not task_entry)
-        if not task_entry:
-            raise HTTPException(status_code=404, detail="任务不存在")
 
-        # 更新任务状态
-        task_entry.processing_status = processing_status
-        task_entry.update_time = datetime.now()  # 更新时间
+    if not task_id_to_use:
+        return Response(content="Missing required parameter 'task_id'", status_code=400)
+    if processing_status not in ['已完成', '处理中', '待处理']:
+        return Response(content="processing_status must be '已完成' or '处理中' or '待处理'", status_code=400)
+
+    task_entry = (db.query(TaskRegistration)
+                  .filter(TaskRegistration.del_flag != '2')
+                  .filter(TaskRegistration.task_id == task_id_to_use))
+    task_entry = task_entry.first()
+    if not task_entry:
+        raise HTTPException(status_code=404, detail="任务不存在")
 
-        # 提交数据库事务
+    task_entry.processing_status = processing_status
+    task_entry.update_time = datetime.now()
+
+    try:
         db.commit()
         return {
             "code": 200,
@@ -147,31 +169,29 @@ async def update_task_status(
                 "update_time": task_entry.update_time.isoformat()
             }
         }
-
-
-
     except Exception as e:
         db.rollback()
         raise HTTPException(status_code=500, detail=str(e))
 
-
 @router.delete('/delete')
 async def delete_task(
-    request: Request,
-    db: Session = Depends(get_db),
-    user_id=Depends(valid_access_token)):  # 确保用户已验证
+        request: Request,
+        db: Session = Depends(get_db),
+        user_id=Depends(valid_access_token)):
     try:
         body = await request.json()
         task_id_to_use = body.get('taskID')
         if not task_id_to_use:
             raise HTTPException(status_code=400, detail="Missing required parameter 'taskID'")
 
-        # 查询要删除的任务
+        event_code = db.query(EventBase).filter(EventBase.event_code == body.get('event_code')).first()
+        if not event_code:
+            return Response(content="事件不存在", status_code=400)
+
         task_entry = db.query(TaskRegistration).filter(TaskRegistration.task_id == task_id_to_use).first()
         if not task_entry:
             raise HTTPException(status_code=404, detail="任务不存在")
 
-        # 将找到的任务的 del_flag 改为 '2'
         task_entry.del_flag = '2'
 
         try:
@@ -180,15 +200,34 @@ async def delete_task(
                 "code": 200,
                 "msg": "任务删除成功",
                 "data": {
-                    "task_id": task_entry.task_id
+                        "task_id": task_entry.task_id
+                    }
                 }
-            }
         except Exception as e:
             db.rollback()
             raise HTTPException(status_code=500, detail=f"An error occurred while deleting the task: {str(e)}")
 
     except HTTPException as e:
-        # 如果捕获到HTTP异常,直接抛出
+        raise e
+    except Exception as e:
+        db.rollback()
+        raise HTTPException(status_code=500, detail=f"An unexpected error occurred: {str(e)}")
+
+@router.get('/selectUnit')
+async def select_unit(
+        request: Request,
+        db: Session = Depends(get_db),
+        query: TaskQuery = Depends(),
+        user_id=Depends(valid_access_token),
+        ):
+    try:
+        data_query = db.query(TaskUnit).filter(TaskUnit.id != '2').all()
+        return {
+            "code": 200,
+            "msg": "查询成功",
+            "data": data_query
+        }
+    except HTTPException as e:
         raise e
     except Exception as e:
         db.rollback()