Browse Source

任务登记模块

xuguoyang 10 months ago
parent
commit
fbd2b5efd2

+ 21 - 0
common/db/db_task.py

@@ -0,0 +1,21 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+from sqlalchemy.orm import Session
+from sqlalchemy import text, exists, and_, or_, not_
+from sqlalchemy.sql import func
+from database import get_db
+from extensions import logger
+import random
+from models import *
+
+def get_next_event_id(db: Session):
+    while True:
+        random_10_digit_number = random.randint(1000000000, 9999999999)
+        taskId = 'task' + str(random_10_digit_number)
+
+        it_exists = db.query(
+            exists().where(TaskRegistration.task_id == taskId)
+        ).scalar()
+
+        if it_exists == False:
+            return taskId

+ 2 - 1
models/__init__.py

@@ -8,4 +8,5 @@ from .oneshare_base import *
 from .ry_sys_base import *
 from .knowledge_base import *
 from .yjya_base import *
-from .event_base import *
+from .event_base import *
+from .taskRegistration_base import *

+ 31 - 0
models/taskRegistration_base.py

@@ -0,0 +1,31 @@
+from sqlalchemy import Column, Integer, String, DateTime, ForeignKey,Text
+from sqlalchemy.ext.declarative import declarative_base
+from sqlalchemy.orm import relationship
+from datetime import datetime
+# from database import Base
+from sqlalchemy.ext.declarative import declarative_base
+from sqlalchemy.orm import relationship, sessionmaker
+
+
+
+# from sqlalchemy import Column, Integer, String, Text, DateTime, ForeignKey
+# from sqlalchemy.orm import relationship
+
+Base = declarative_base()
+
+class TaskRegistration(Base):
+    __tablename__ = 'task_registrations'
+
+    id = Column(Integer, primary_key=True, autoincrement=True, index=True,comment='id')
+    task_id = Column(String(255), index=True,comment='任务ID')
+    unit_name = Column(String(255), nullable=False,comment='部门名称')
+    del_flag = Column(String(10),default='0', comment='是否删除')
+    task_description = Column(Text, nullable=False,comment='任务内容/描述')
+    registrar = Column(String(255), nullable=False,comment='登记人')
+    creation_time = Column(DateTime, default=datetime.utcnow,comment='创建时间')
+    update_time = Column(DateTime, default=datetime.utcnow,comment='创建时间')
+    processing_status = Column(String(50), default='处理中',comment='任务状态')
+
+    # 你可以添加更多的字段和关系,例如与用户模型的外键关系
+    # user_id = Column(Integer, ForeignKey('users.id'))
+    # user = relationship("User", back_populates="task_registrations")

+ 2 - 1
routers/api/__init__.py

@@ -15,7 +15,7 @@ from . import Knowledge
 from . import emergencyPlans
 from . import eventManagement
 from . import spatialAnalysis
-
+from . import taskRegistration
 router = APIRouter()
 
 router.include_router(login_router)
@@ -28,6 +28,7 @@ router.include_router(OneShareProxyHandler.router, prefix="/oneShare")
 router.include_router(upload_file.router, prefix="/file")
 router.include_router(videoResource.router, prefix="/videoResource")
 router.include_router(Knowledge.router, prefix="/knowledge")
+router.include_router(taskRegistration.router, prefix="/taskRegistration")
 router.include_router(emergencyPlans.router, prefix="/emergency_plan")
 
 router.include_router(eventManagement.router, prefix="/event_management", tags=["事件管理"])

+ 138 - 0
routers/api/taskRegistration/__init__.py

@@ -0,0 +1,138 @@
+import json
+import random
+from sqlalchemy import create_engine, select
+from utils.StripTagsHTMLParser import *
+from sqlalchemy.orm import Session
+import traceback
+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
+from database import get_db
+from pydantic import BaseModel
+
+router = APIRouter()
+
+
+@router.post('/create')
+async def create_task(
+        request: Request,
+        db: Session = Depends(get_db),
+        body=Depends(remove_xss_json),
+        user_id=Depends(valid_access_token)):
+    try:
+        # 验证必需的字段
+        required_fields = ['task_description', 'unit_name', 'registrar']
+        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)
+
+        task_base = TaskRegistration(
+            **body,
+            task_id = task_id
+        )
+        db.add(task_base)
+        db.commit()
+
+        return {
+            "code": 200,
+            "msg": "任务创建成功",
+            "data": task_id
+        }
+
+    except Exception as e:
+        db.rollback()
+        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
+    unit_name: str = None
+    registrar: str = None
+    creation_time: str = None
+    processing_status: str = None
+
+@router.post('/select')
+async def select_tasks(
+    request: Request,
+    db: Session = Depends(get_db),
+    query: TaskQuery = Depends(),
+    user_id=Depends(valid_access_token)):
+    try:
+        data_query = db.query(TaskRegistration).filter(TaskRegistration.del_flag != '2')
+
+        if query.task_id:
+            data_query = data_query.filter(TaskRegistration.task_id == query.task_id)
+        if query.task_description:
+            data_query = data_query.filter(TaskRegistration.task_description == query.task_description)
+        if query.unit_name:
+            data_query = data_query.filter(TaskRegistration.unit_name == query.unit_name)
+        if query.registrar:
+            data_query = data_query.filter(TaskRegistration.registrar == query.registrar)
+        if query.creation_time:
+            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)
+
+        tasks = data_query.all()
+
+        return {
+            "code": 200,
+            "msg": "任务查询成功",
+            "data": tasks
+        }
+
+    except Exception as e:
+        db.rollback()
+        traceback.print_exc()
+        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')
+
+        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)
+
+        # 查询要更新的任务
+        # 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()  # 更新时间
+
+        # 提交数据库事务
+        db.commit()
+        return {
+            "code": 200,
+            "msg": "任务状态更新成功",
+            "data": {
+                "task_id": task_id_to_use,
+                "processing_status": task_entry.processing_status,
+                "update_time": task_entry.update_time.isoformat()
+            }
+        }
+
+    except Exception as e:
+        db.rollback()
+        return Response(content=str(e), status_code=500)