libushang vor 8 Monaten
Ursprung
Commit
1046b33852

+ 2 - 0
models/taskRegistration_base.py

@@ -63,6 +63,8 @@ class TaskFeeback(Base):
     feeback_type = Column(String(1), default='0', server_default='0', comment='反馈类型 0 任务反馈 1 领导批示')
     leader_unit = Column(String(150), default='', server_default='', comment='领导单位')
     leader_name = Column(String(150), default='', server_default='', comment='领导姓名')
+    approval_content = Column(Text, comment='批复内容')
+    approval_time = Column(DateTime, comment='批复时间')
 
     class Config:
         orm_mode = True

+ 1 - 1
routers/api/eventManagement/event.py

@@ -453,7 +453,7 @@ async def notice_bar(
     db: Session = Depends(get_db)
 ):
     try:
-        row = db.query(EventBase).filter(and_(EventBase.del_flag == '0', EventBase.event_status.in_([0, 1]))).order_by(EventBase.event_time.desc()).first()
+        row = db.query(EventBase).filter(and_(EventBase.del_flag == '0', EventBase.event_title != '', EventBase.event_status.in_([0, 1]))).order_by(EventBase.event_time.desc()).first()
         if row is not None:
             return {
                 'code': 200,

+ 113 - 11
routers/api/taskRegistration/__init__.py

@@ -246,7 +246,7 @@ async def select_tasks(
         request: Request,
         task_type: str = Query(None),
         processing_status: str = Query(None),
-        task_description: str = Query(None),
+        search_keyword: str = Query(None),
         page: int = Query(1, gt=0, description="页码"),
         page_size: int = Query(10, gt=0, le=100, description="每页大小"),
         db: Session = Depends(get_db)):
@@ -255,8 +255,8 @@ async def select_tasks(
         # 应用过滤条件
         if task_type is not None:
             data_query = data_query.filter(TaskRegistration.task_type == task_type)
-        if task_description is not None:
-            data_query = data_query.filter(TaskRegistration.task_description == task_description)
+        if search_keyword is not None:
+            data_query = data_query.filter(TaskRegistration.task_description.like('%{}%'.format(search_keyword)))
         if processing_status is not None:
             data_query = data_query.filter(TaskRegistration.processing_status == processing_status)
 
@@ -389,17 +389,26 @@ async def get_task_detail(
     print('task_id:',task_id)
     try: 
         # 构建查询
-        rows = db.query(TaskFeeback).filter(and_(TaskFeeback.task_id == task_id, TaskFeeback.feeback_type == '0')).all()
+        rows = db.query(TaskFeeback).filter(and_(TaskFeeback.task_id == task_id)).all()
         feebacks = []
         for row in rows:
             fileList = []
+            # 附件
+            rows = db.query(TaskFile).filter(and_(TaskFile.from_scenario=="task_feeback", TaskFile.foreign_key == row.id, InfoPublishFile.del_flag == '0')).all()
+            fileList = [
+                {
+                    "name": row.file_name,
+                    "url": row.storage_file_name
+                }
+                for row in rows
+            ]
 
-            feebacks.append({
-                "content": row.content,
-                "create_time": get_datetime_str(row.create_time),
-                'fileList': fileList,
-                "fileCount": len(fileList)
-            })
+            info = get_model_dict(row)
+            info['create_time'] = get_datetime_str(row.create_time)
+            info['approval_time'] = get_datetime_str(row.approval_time)
+            info['fileList'] = fileList
+            info['fileCount'] = len(fileList)
+            feebacks.append(info)
 
         
         query = db.query(TaskRegistration)
@@ -436,4 +445,97 @@ async def get_task_detail(
     except Exception as e:
         # 处理异常
         traceback.print_exc()
-        raise HTTPException(status_code=500, detail=str(e))
+        raise HTTPException(status_code=500, detail=str(e))
+    
+
+# 请示列表
+@router.get('/request/list')
+async def select_tasks(
+        request: Request,
+        task_type: str = Query(None),
+        processing_status: str = Query(None),
+        search_keyword: str = Query(None),
+        page: int = Query(1, gt=0, description="页码"),
+        page_size: int = Query(10, gt=0, le=100, description="每页大小"),
+        db: Session = Depends(get_db)):
+    try:
+        data_query = db.query(TaskFeeback).filter(TaskFeeback.feeback_type == '1')
+        # 应用过滤条件
+        if task_type is not None:
+            subquery = db.query(TaskRegistration.task_id).filter(and_(TaskRegistration.del_flag == '0', TaskRegistration.task_type == task_type)).subquery()
+            data_query = data_query.filter(TaskFeeback.task_id == subquery.c.task_id)
+        if processing_status is not None:
+            data_query = data_query.filter(TaskFeeback.processing_status == processing_status)
+        if search_keyword is not None:
+            data_query = data_query.filter(TaskFeeback.content.like('%{}%'.format(search_keyword)))
+
+        total_count = data_query.count()
+        offset = (page - 1) * page_size
+        data_query = data_query.order_by(TaskFeeback.create_time.desc()).offset(offset).limit(page_size)
+
+        data = []
+        tasks = data_query.all()
+        for n in tasks:
+            task = get_model_dict(n)
+            task['nick_name'] = db_user.get_nick_name_by_id(db, task['recorded_by'])
+            task['create_time'] = get_datetime_str(task['create_time'])
+            task['approval_time'] = get_datetime_str(task['approval_time'])
+
+            task['update_time'] = task['create_time']
+            if task['approval_time'] != None:
+                task['update_time'] = task['approval_time']
+
+            task['event_name'] = ''
+
+            task_id = task['task_id']
+            reg_info = db.query(TaskRegistration).filter(TaskRegistration.task_id == task_id).first()
+            if reg_info is not None:
+                reg_info = get_model_dict(reg_info)
+                task['event_name'] = db_event_management.get_event_title(db, reg_info['event_code'])
+            data.append(task)
+        return {
+            "code": 200,
+            "msg": "请示查询成功",
+            "data": data,
+            "total": total_count
+        }
+
+    except Exception as e:
+        traceback.print_exc()
+        raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
+    
+# 请示批复
+@router.post("/approval")
+async def approval(
+    request: Request, 
+    db: Session = Depends(get_db), 
+    body = Depends(remove_xss_json), 
+    user_id = Depends(valid_access_token)
+):
+    try:
+        feeback_id = get_req_param(body, "feeback_id")
+        approval_content = get_req_param_optional(body, 'approval_content')
+
+        row = db.query(TaskFeeback).filter(TaskFeeback.id == feeback_id).first()
+        if row is None:
+            return {
+                "code": 500,
+                "msg": "请示不存在"
+            }
+        
+        row.approval_content = approval_content
+        row.approval_time = datetime.now()
+        row.processing_status = '已完成'
+        db.commit()
+
+        return {
+            "code": 200,
+            "msg": "请示批复保存成功"
+        }
+
+    except Exception as e:
+        # 处理异常
+        db.rollback()
+        traceback.print_exc()
+        raise HTTPException(status_code=500, detail=str(e))
+