libushang 8 mesi fa
parent
commit
b0572161ba
2 ha cambiato i file con 207 aggiunte e 3 eliminazioni
  1. 48 2
      models/taskRegistration_base.py
  2. 159 1
      routers/api/taskRegistration/__init__.py

+ 48 - 2
models/taskRegistration_base.py

@@ -26,18 +26,64 @@ class TaskRegistration(Base):
     registrar = Column(String(255), nullable=False,comment='登记人')
     registrar_id = Column(String(255), nullable=False,comment='登记人ID')
     creation_time = Column(DateTime, default=datetime.now,comment='创建时间')
-    update_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')
     task_type = Column(String(1), default='0', server_default='0', comment='任务类型 0 事件处置 1 防范措施 2 险情处理 3 督办任务')
+    expire_time = Column(DateTime, comment='完成时限')
+    feeback_user = Column(String(150), default='', server_default='', comment='反馈人员')
 
     # 你可以添加更多的字段和关系,例如与用户模型的外键关系
     # user_id = Column(Integer, ForeignKey('users.id'))
     # user = relationship("User", back_populates="task_registrations")
 
+    class Config:
+        orm_mode = True
+
 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='部门职责')
+    unit_duty = Column(Text, nullable=False,comment='部门职责')
+
+    class Config:
+        orm_mode = True
+
+class TaskFeeback(Base):
+    __tablename__ = 'task_feeback'
+
+    id = Column(Integer, primary_key=True, autoincrement=True, index=True,comment='id')
+    task_id = Column(String(255), index=True,comment='任务ID')
+    recorded_by = Column(Integer, nullable=False, comment='记录用户ID')
+    feeback_user = Column(String(150), default='', server_default='', comment='反馈人员')
+    content = Column(Text, comment='反馈内容')
+    processing_status = Column(String(50), default='处理中',comment='任务状态')
+    create_time = Column(DateTime, default=datetime.now, comment='登记时间')
+    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='领导姓名')
+
+    class Config:
+        orm_mode = True
+
+class TaskFile(Base):
+    __tablename__ = 'task_file'
+
+    id = Column(Integer, primary_key=True, autoincrement=True)
+    file_id = Column(String(50), nullable=False, comment='文件id')
+    file_name = Column(String(255), nullable=False, comment='文件名称')
+    file_name_desc = Column(String(255), nullable=False, comment='文件名称原名')
+    file_path = Column(String(255), nullable=True, comment='文件存储路径')
+    file_size = Column(String(50), nullable=True, comment='文件大小')
+    status = Column(String(50), nullable=True, comment='文件状态')
+    foreign_key = Column(String(50), nullable=True, comment='文件外键 --技术字段')
+    from_scenario = Column(String(50), nullable=True, comment='对应标识 --技术字段')
+    del_flag = Column(String(1), default='0', comment='删除标志(0代表存在 2代表删除)')
+    create_dept = Column(Integer, default=None, comment='创建部门')
+    create_by = Column(Integer, default=None, comment='创建者')
+    create_time = Column(DateTime, default=datetime.now, comment='创建时间')
+    update_time = Column(DateTime, default=datetime.now, onupdate=datetime.now, comment='更新时间')
+
+    class Config:
+        orm_mode = True

+ 159 - 1
routers/api/taskRegistration/__init__.py

@@ -3,6 +3,7 @@ import random
 from sqlalchemy import create_engine, select
 from utils.StripTagsHTMLParser import *
 from sqlalchemy.orm import Session
+from sqlalchemy import text, exists, and_, or_, not_
 import traceback
 from models import *
 from common.db import db_task
@@ -12,7 +13,8 @@ from fastapi import APIRouter, Depends, HTTPException, Response, Query
 from database import get_db
 from pydantic import BaseModel
 from utils import *
-from common.db import db_event_management
+import copy
+from common.db import db_event_management, db_user
 
 router = APIRouter()
 
@@ -279,3 +281,159 @@ async def select_tasks(
     except Exception as e:
         traceback.print_exc()
         raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
+
+
+@router.post("/leader_request")
+async def leader_request(
+    request: Request, 
+    db: Session = Depends(get_db), 
+    body = Depends(remove_xss_json), 
+    user_id = Depends(valid_access_token)
+):
+    try:
+        task_id = body['task_id']
+        processing_status = body['processing_status']
+
+        new_feeback = TaskFeeback(
+            **body,
+            recorded_by=user_id
+        )
+        db.add(new_feeback)
+        db.commit()
+
+        db.query(TaskRegistration).filter(TaskRegistration.task_id == task_id).update({"processing_status": processing_status, "update_time": datetime.now()})
+        db.commit()
+
+        return {
+            "code": 200,
+            "msg": "请示领导保存成功"
+        }
+
+    except Exception as e:
+        # 处理异常
+        db.rollback()
+        traceback.print_exc()
+        raise HTTPException(status_code=500, detail=str(e))
+    
+
+@router.post("/feeback")
+async def feeback(
+    request: Request, 
+    db: Session = Depends(get_db), 
+    body = Depends(remove_xss_json), 
+    user_id = Depends(valid_access_token)
+):
+    try:
+        feeback_user = get_req_param_optional(body, 'feeback_user')
+        task_id = body['task_id']
+        processing_status = body['processing_status']
+
+        new_file_list = []
+        if 'fileList' in body:
+            new_file_list = copy.deepcopy(body['fileList'])
+            del body['fileList']
+
+        if feeback_user == '':
+            feeback_user = db_user.get_user_info(db, user_id).nick_name
+
+        if 'feeback_user' in body:
+            del body['feeback_user']
+        
+
+        new_feeback = TaskFeeback(
+            **body,
+            feeback_user=feeback_user,
+            recorded_by=user_id
+        )
+        db.add(new_feeback)
+        db.commit()
+        db.refresh(new_feeback)
+
+        print(new_file_list)
+        for file in new_file_list:
+            file_name = file['file_name']
+            file_name_desc = file['file_name_desc']
+            status = file['status']
+            new_file = TaskFile(
+                file_id=new_guid(),
+                foreign_key=new_feeback.id,
+                from_scenario='task_feeback',
+                file_name=file_name,
+                file_name_desc=file_name_desc,
+                status=status
+            )
+            db.add(new_file)
+            db.commit()
+
+        db.query(TaskRegistration).filter(TaskRegistration.task_id == task_id).update({"processing_status": processing_status, "update_time": datetime.now()})
+        db.commit()
+
+        return {
+            "code": 200,
+            "msg": "任务反馈保存成功"
+        }
+
+    except Exception as e:
+        # 处理异常
+        db.rollback()
+        traceback.print_exc()
+        raise HTTPException(status_code=500, detail=str(e))
+    
+
+@router.get('/detail')
+async def get_task_detail(
+    request: Request, 
+    task_id: str = Query(None, description='任务编号'),
+    db: Session = Depends(get_db)):
+    
+    print('task_id:',task_id)
+    try: 
+        # 构建查询
+        rows = db.query(TaskFeeback).filter(and_(TaskFeeback.task_id == task_id, TaskFeeback.feeback_type == '0')).all()
+        feebacks = []
+        for row in rows:
+            fileList = []
+
+            feebacks.append({
+                "content": row.content,
+                "create_time": get_datetime_str(row.create_time),
+                'fileList': fileList,
+                "fileCount": len(fileList)
+            })
+
+        
+        query = db.query(TaskRegistration)
+        query = query.filter(TaskRegistration.task_id == task_id)
+
+        # 执行查询
+        row = query.first()
+        if row is not None:
+            return {
+                "code": 200,
+                "msg": "查询成功",
+                "data": {
+                    "id": row.id,
+                    "task_id": row.task_id,
+                    "task_type": row.task_type,
+                    "event_code": row.event_code,
+                    "event_name": db_event_management.get_event_title(db, row.event_code),
+                    "processing_status": row.processing_status,
+                    "expire_time": get_datetime_str(row.expire_time),
+                    "update_time": get_datetime_str(row.update_time),
+                    "feeback_user": row.feeback_user,
+                    "task_description": row.task_description,
+                    
+                    "feebacks": feebacks
+                }
+            }
+        
+        else:
+            return {
+                "code": 500,
+                "msg": "查询失败"
+            }
+
+    except Exception as e:
+        # 处理异常
+        traceback.print_exc()
+        raise HTTPException(status_code=500, detail=str(e))