123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234 |
- 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','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)}")
- 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
- )
- 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(),
- 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:
- 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)
- # 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,
- "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)):
- body = await request.json()
- task_id_to_use = body.get('task_id')
- processing_status = body.get('processing_status')
- event_code = db.query(EventBase).filter(EventBase.event_code == body.get('event_code')).first()
- if not event_code:
- return Response(content="事件不存在", status_code=400)
- 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 '待处理' 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,
- "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'")
- 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="任务不存在")
- 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:
- 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()
- raise HTTPException(status_code=500, detail=f"An unexpected error occurred: {str(e)}")
|