|
@@ -8,7 +8,7 @@ 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 fastapi import APIRouter, Depends, HTTPException, Response, Query
|
|
|
from database import get_db
|
|
|
from pydantic import BaseModel
|
|
|
|
|
@@ -23,17 +23,19 @@ async def create_task(
|
|
|
user_id=Depends(valid_access_token)):
|
|
|
try:
|
|
|
# 验证必需的字段
|
|
|
- required_fields = ['task_description', 'unit_name', 'registrar']
|
|
|
+ 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)}")
|
|
|
|
|
|
- # eventId = db_event_management.get_next_event_id(db)
|
|
|
- task_id =db_task.get_next_event_id(db)
|
|
|
+ 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
|
|
|
+ task_id=task_id
|
|
|
)
|
|
|
db.add(task_base)
|
|
|
db.commit()
|
|
@@ -49,6 +51,7 @@ async def create_task(
|
|
|
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
|
|
@@ -57,18 +60,31 @@ class TaskQuery(BaseModel):
|
|
|
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="每页大小")):
|
|
|
+ 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:
|
|
@@ -81,15 +97,21 @@ async def select_tasks(
|
|
|
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,
|
|
@@ -107,36 +129,36 @@ async def select_tasks(
|
|
|
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')
|
|
|
+ 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')
|
|
|
|
|
|
- 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)
|
|
|
+ event_code = db.query(EventBase).filter(EventBase.event_code == body.get('event_code')).first()
|
|
|
+ if not event_code:
|
|
|
+ return Response(content="事件不存在", 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() # 更新时间
|
|
|
+ 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 '待处理'", 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,
|
|
@@ -147,31 +169,29 @@ async def update_task_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)): # 确保用户已验证
|
|
|
+ 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="任务不存在")
|
|
|
|
|
|
- # 将找到的任务的 del_flag 改为 '2'
|
|
|
task_entry.del_flag = '2'
|
|
|
|
|
|
try:
|
|
@@ -180,15 +200,34 @@ async def delete_task(
|
|
|
"code": 200,
|
|
|
"msg": "任务删除成功",
|
|
|
"data": {
|
|
|
- "task_id": task_entry.task_id
|
|
|
+ "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)}")
|
|
|
+
|
|
|
+@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()
|