from typing import Annotated from fastapi import APIRouter, Depends, Path, Query from fastapi.responses import JSONResponse from app.api.v1.module_system.auth.schema import AuthSchema from app.common.response import ResponseSchema, SuccessResponse from app.core.dependencies import AuthPermission from app.core.logger import log from app.core.router_class import OperationLogRoute from app.plugin.module_payment.expense.institution.schema import InstitutionListOutSchema from .service import InstitutionService from alipay.aop.api.domain.AlipayEbppInvoiceInstitutionCreateModel import ( AlipayEbppInvoiceInstitutionCreateModel, ) from alipay.aop.api.response.AlipayEbppInvoiceInstitutionCreateResponse import ( AlipayEbppInvoiceInstitutionCreateResponse, ) from alipay.aop.api.domain.AlipayEbppInvoiceInstitutionDeleteModel import ( AlipayEbppInvoiceInstitutionDeleteModel, ) from alipay.aop.api.response.AlipayEbppInvoiceInstitutionDeleteResponse import ( AlipayEbppInvoiceInstitutionDeleteResponse, ) from alipay.aop.api.domain.AlipayEbppInvoiceInstitutionModifyModel import ( AlipayEbppInvoiceInstitutionModifyModel, ) from alipay.aop.api.response.AlipayEbppInvoiceInstitutionModifyResponse import ( AlipayEbppInvoiceInstitutionModifyResponse, ) InstitutionRouter = APIRouter( route_class=OperationLogRoute, prefix="/institution", tags=["费控制度"], ) @InstitutionRouter.post( "", summary="创建费控制度", description="创建费控制度 (alipay.ebpp.invoice.institution.create)", # response_model=ResponseSchema[AlipayEbppInvoiceInstitutionCreateResponse], ) async def create_institution_controller( data: dict, auth: Annotated[AuthSchema, Depends(AuthPermission(["module_payment:expense:institution:create"]))], ) -> JSONResponse: """创建费控制度""" institution_create_model = AlipayEbppInvoiceInstitutionCreateModel.from_alipay_dict(data) result = await InstitutionService.create_institution_service(auth=auth, data=institution_create_model) log.info(f"创建费控制度成功: {institution_create_model.institution_name}, institution_id={result.institution_id}") return SuccessResponse(data=result, msg="创建费控制度成功") @InstitutionRouter.get( "", summary="查询费控制度列表", description="分页查询费控制度列表", response_model=ResponseSchema[InstitutionListOutSchema], ) async def list_institution_controller( auth: Annotated[AuthSchema, Depends(AuthPermission(["module_payment:expense:institution:list"]))], page_no: Annotated[int, Query(description="页码")] = 1, page_size: Annotated[int, Query(description="每页数量")] = 20, enterprise_id: Annotated[str | None, Query(description="企业ID")] = None, name: Annotated[str | None, Query(description="制度名称")] = None, expense_type: Annotated[str | None, Query(description="费用类型")] = None, status: Annotated[str | None, Query(description="状态")] = None, ) -> JSONResponse: """查询费控制度列表""" search = {} if enterprise_id: search["enterprise_id"] = enterprise_id if name: search["name"] = name if expense_type: search["expense_type"] = expense_type if status: search["status"] = status result = await InstitutionService.list_service( auth=auth, page_no=page_no, page_size=page_size, search=search ) return SuccessResponse(data=result, msg="查询费控制度列表成功") @InstitutionRouter.delete( "", summary="删除费控制度", description="删除费控制度 (alipay.ebpp.invoice.institution.delete)", # response_model=ResponseSchema[AlipayEbppInvoiceInstitutionDeleteResponse], ) async def delete_institution_controller( data: dict, auth: Annotated[AuthSchema, Depends(AuthPermission(["module_payment:expense:institution:delete"]))], ) -> JSONResponse: """删除费控制度""" institution_delete_model = AlipayEbppInvoiceInstitutionDeleteModel(**data) result = await InstitutionService.delete_institution_service(auth=auth, data=institution_delete_model) log.info(f"删除费控制度成功: institution_id={institution_delete_model.institution_id}, enterprise_id={institution_delete_model.enterprise_id}") return SuccessResponse(data=result, msg="删除费控制度成功") @InstitutionRouter.post( "/modify", summary="编辑费控制度", description="编辑费控制度 (alipay.ebpp.invoice.institution.modify)", # response_model=ResponseSchema[AlipayEbppInvoiceInstitutionModifyResponse], ) async def modify_institution_controller( data: dict, auth: Annotated[AuthSchema, Depends(AuthPermission(["module_payment:expense:institution:modify"]))], ) -> JSONResponse: """编辑费控制度""" institution_modify_model = AlipayEbppInvoiceInstitutionModifyModel(**data) result = await InstitutionService.modify_institution_service(auth=auth, data=institution_modify_model) log.info(f"编辑费控制度成功: institution_id={institution_modify_model.institution_id}") return SuccessResponse(data=result, msg="编辑费控制度成功")