"""中试应用确认 API""" from typing import Optional from fastapi import APIRouter, Depends, Query from pydantic import BaseModel from sqlalchemy.orm import Session from app.core.database import get_db from app.core.menu_guard import require_admin_or_super_admin from app.core.response import error_response, success_response from app.crud import pilot_infusion_confirm as svc from app.models.models import SysUser router = APIRouter(prefix="/web/admin", tags=["中试应用确认"]) def _get_tenant_no(db: Session, user: dict) -> str: user_id = user.get("user_id") if not user_id: raise PermissionError("用户身份信息缺失") sys_user = db.query(SysUser).filter(SysUser.id == user_id).first() if not sys_user or not sys_user.tenant_no: raise PermissionError("用户租户信息缺失") return sys_user.tenant_no class IdBody(BaseModel): id: str class ConfirmCreateBody(BaseModel): infusionScheduleId: str confirmDesc: Optional[str] = None remark: Optional[str] = None class ConfirmUpdateBody(BaseModel): id: str confirmDesc: Optional[str] = None remark: Optional[str] = None @router.post("/pilot-infusion-confirm/create") async def api_create( body: ConfirmCreateBody, user: dict = Depends(require_admin_or_super_admin), db: Session = Depends(get_db), ): try: tenant_no = _get_tenant_no(db, user) result = svc.create_infusion_confirm( db, schedule_id=body.infusionScheduleId, tenant_no=tenant_no, user_id=user.get("user_id"), create_dept_id=user.get("region_id", ""), confirm_desc=body.confirmDesc or "", remark=body.remark or "", ) db.commit() return success_response(result, message="创建成功") except ValueError as e: return error_response(400, str(e)) @router.get("/pilot-infusion-confirm/list") async def api_list( applicationId: str = Query(...), user: dict = Depends(require_admin_or_super_admin), db: Session = Depends(get_db), ): tenant_no = _get_tenant_no(db, user) result = svc.list_confirms_by_application( db, application_id=applicationId, tenant_no=tenant_no ) return success_response(result) @router.get("/pilot-infusion-confirm/detail") async def api_detail( id: str = Query(...), user: dict = Depends(require_admin_or_super_admin), db: Session = Depends(get_db), ): tenant_no = _get_tenant_no(db, user) result = svc.get_confirm_by_id(db, confirm_id=id, tenant_no=tenant_no) if result is None: return success_response(None) return success_response(result) @router.post("/pilot-infusion-confirm/confirm") async def api_confirm( body: IdBody, user: dict = Depends(require_admin_or_super_admin), db: Session = Depends(get_db), ): try: tenant_no = _get_tenant_no(db, user) result = svc.confirm_infusion( db, confirm_id=body.id, tenant_no=tenant_no, user_id=user.get("user_id") ) return success_response(result, message="确认成功") except ValueError as e: return error_response(400, str(e)) @router.put("/pilot-infusion-confirm/update") async def api_update( body: ConfirmUpdateBody, user: dict = Depends(require_admin_or_super_admin), db: Session = Depends(get_db), ): try: tenant_no = _get_tenant_no(db, user) result = svc.update_infusion_confirm( db, confirm_id=body.id, tenant_no=tenant_no, user_id=user.get("user_id"), confirmDesc=body.confirmDesc, remark=body.remark, ) return success_response(result, message="更新成功") except ValueError as e: return error_response(400, str(e)) @router.delete("/pilot-infusion-confirm/delete") async def api_delete( body: IdBody, user: dict = Depends(require_admin_or_super_admin), db: Session = Depends(get_db), ): try: tenant_no = _get_tenant_no(db, user) svc.delete_infusion_confirm( db, confirm_id=body.id, tenant_no=tenant_no, user_id=user.get("user_id") ) return success_response(None, message="删除成功") except ValueError as e: return error_response(400, str(e))