from fastapi import APIRouter, Depends, Query, Body from sqlalchemy.ext.asyncio import AsyncSession from config.get_db import get_db from module_admin.service.login_service import LoginService from module_admin.entity.vo.user_vo import CurrentUserModel from module_admin.system.service.etest_service import TestPermissionService, WorkOrderClaimService from module_admin.system.entity.vo.test_permission_vo import ( TestPermissionPageQueryModel, AddTestPermissionModel, EditTestPermissionModel, DeleteTestPermissionModel ) from module_admin.system.entity.vo.workorder_claim_vo import ( WorkOrderClaimPageQueryModel, BatchClaimWorkOrderModel, UpdateWorkOrderPriorityModel, UpdateWorkOrderExpectedDateModel ) from module_admin.entity.vo.common_vo import CrudResponseModel from utils.response_util import ResponseUtil from datetime import date # 测试权限配置路由 permission_router = APIRouter(prefix='/test-permission', tags=['测试权限配置']) @permission_router.get('/list') async def get_permission_list( query_obj: TestPermissionPageQueryModel = Depends(), db: AsyncSession = Depends(get_db), current_user: CurrentUserModel = Depends(LoginService.get_current_user) ): """获取测试权限配置列表""" result = await TestPermissionService.get_permission_list(db, query_obj, is_page=True) return ResponseUtil.success(model_content=result) @permission_router.get('/{id}') async def get_permission_detail( id: int, db: AsyncSession = Depends(get_db), current_user: CurrentUserModel = Depends(LoginService.get_current_user) ): """获取测试权限配置详情""" result = await TestPermissionService.get_permission_detail(db, id) return ResponseUtil.success(model_content=result) @permission_router.post('/add') async def add_permission( model: AddTestPermissionModel, db: AsyncSession = Depends(get_db), current_user: CurrentUserModel = Depends(LoginService.get_current_user) ): """新增测试权限配置""" result = await TestPermissionService.add_permission(db, model, current_user.user.user_id) return ResponseUtil.success(model_content=result) @permission_router.put('/edit') async def edit_permission( model: EditTestPermissionModel, db: AsyncSession = Depends(get_db), current_user: CurrentUserModel = Depends(LoginService.get_current_user) ): """编辑测试权限配置""" result = await TestPermissionService.edit_permission(db, model, current_user.user.user_id) return ResponseUtil.success(model_content=result) @permission_router.delete('/delete/{ids}') async def delete_permission( ids: str, db: AsyncSession = Depends(get_db), current_user: CurrentUserModel = Depends(LoginService.get_current_user) ): """删除测试权限配置""" result = await TestPermissionService.delete_permission(db, ids, current_user.user.user_id) return ResponseUtil.success(model_content=result) # 工单领取路由 workorder_claim_router = APIRouter(prefix='/workorder-claim', tags=['工单领取']) @workorder_claim_router.post('/claim') async def claim_work_order( db: AsyncSession = Depends(get_db), current_user: CurrentUserModel = Depends(LoginService.get_current_user) ): """ 测试人员领取工单 按优先级高 > 截止日期近排序 使用乐观锁防止并发冲突 """ result = await WorkOrderClaimService.claim_work_order(db, current_user.user.user_id) return ResponseUtil.success(model_content=result) @workorder_claim_router.post('/batch-claim') async def batch_claim_work_order( model: BatchClaimWorkOrderModel, db: AsyncSession = Depends(get_db), current_user: CurrentUserModel = Depends(LoginService.get_current_user) ): """ 批量领取工单 逐个领取,返回成功和失败的数量 """ result = await WorkOrderClaimService.batch_claim_work_order(db, model.ids, current_user.user.user_id) return ResponseUtil.success(model_content=result) @workorder_claim_router.get('/pending') async def get_pending_list( page_num: int = Query(1, ge=1), page_size: int = Query(10, ge=1, le=100), name: str = Query(None), priority: int = Query(None), db: AsyncSession = Depends(get_db), current_user: CurrentUserModel = Depends(LoginService.get_current_user) ): """获取可领取工单列表""" query_obj = WorkOrderClaimPageQueryModel( page_num=page_num, page_size=page_size, name=name, priority=priority ) result = await WorkOrderClaimService.get_pending_list(db, current_user.user.user_id, query_obj) return ResponseUtil.success(dict_content=result) @workorder_claim_router.put('/{work_order_id}/priority') async def update_priority( work_order_id: int, model: UpdateWorkOrderPriorityModel, db: AsyncSession = Depends(get_db), current_user: CurrentUserModel = Depends(LoginService.get_current_user) ): """管理人员调整工单优先级(1-5级)""" result = await WorkOrderClaimService.update_priority(db, work_order_id, model.priority, current_user.user.user_id) return ResponseUtil.success(model_content=result) @workorder_claim_router.put('/{work_order_id}/expected-date') async def update_expected_date( work_order_id: int, model: UpdateWorkOrderExpectedDateModel, db: AsyncSession = Depends(get_db), current_user: CurrentUserModel = Depends(LoginService.get_current_user) ): """管理人员修改预计完成日期""" result = await WorkOrderClaimService.update_expected_date(db, work_order_id, model.expected_date, current_user.user.user_id) return ResponseUtil.success(model_content=result)