|
@@ -0,0 +1,194 @@
|
|
|
+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,Query
|
|
|
+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')
|
|
|
+@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="每页大小")):
|
|
|
+ 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)
|
|
|
+
|
|
|
+ # 计算分页的偏移量
|
|
|
+ offset = (pageNum - 1) * pageSize
|
|
|
+ # 应用分页
|
|
|
+ data_query = data_query.offset(offset).limit(pageSize)
|
|
|
+
|
|
|
+ tasks = data_query.all()
|
|
|
+ total_count = data_query.count()
|
|
|
+
|
|
|
+ return {
|
|
|
+ "code": 200,
|
|
|
+ "msg": "任务查询成功",
|
|
|
+ "data": tasks,
|
|
|
+ "total": total_count,
|
|
|
+ "pages": (total_count + pageSize - 1) // pageSize,
|
|
|
+ "current_page": pageNum,
|
|
|
+ "page_size": pageSize
|
|
|
+ }
|
|
|
+
|
|
|
+ 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()
|
|
|
+ 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)): # 确保用户已验证
|
|
|
+ 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'")
|
|
|
+
|
|
|
+ # 查询要删除的任务
|
|
|
+ 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:
|
|
|
+ db.commit()
|
|
|
+ return {
|
|
|
+ "code": 200,
|
|
|
+ "msg": "任务删除成功",
|
|
|
+ "data": {
|
|
|
+ "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)}")
|