| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204 |
- from app.api.v1.module_system.auth.schema import AuthSchema
- from app.core.alipay import AlipayClient
- from app.core.exceptions import CustomException
- from app.core.logger import log
- from app.plugin.module_payment.expense.institution.schema import InstitutionListOutSchema, InstitutionCreateSchema
- from .crud import InstitutionCRUD
- from .enums import InstitutionStatusEnum
- from alipay.aop.api.request.AlipayEbppInvoiceInstitutionCreateRequest import (
- AlipayEbppInvoiceInstitutionCreateRequest,
- )
- from alipay.aop.api.domain.AlipayEbppInvoiceInstitutionCreateModel import (
- AlipayEbppInvoiceInstitutionCreateModel,
- )
- from alipay.aop.api.response.AlipayEbppInvoiceInstitutionCreateResponse import (
- AlipayEbppInvoiceInstitutionCreateResponse,
- )
- from alipay.aop.api.request.AlipayEbppInvoiceInstitutionPageinfoQueryRequest import (
- AlipayEbppInvoiceInstitutionPageinfoQueryRequest,
- )
- from alipay.aop.api.domain.AlipayEbppInvoiceInstitutionPageinfoQueryModel import (
- AlipayEbppInvoiceInstitutionPageinfoQueryModel,
- )
- from alipay.aop.api.response.AlipayEbppInvoiceInstitutionPageinfoQueryResponse import (
- AlipayEbppInvoiceInstitutionPageinfoQueryResponse,
- )
- from alipay.aop.api.request.AlipayEbppInvoiceInstitutionDeleteRequest import (
- AlipayEbppInvoiceInstitutionDeleteRequest,
- )
- from alipay.aop.api.domain.AlipayEbppInvoiceInstitutionDeleteModel import (
- AlipayEbppInvoiceInstitutionDeleteModel,
- )
- from alipay.aop.api.response.AlipayEbppInvoiceInstitutionDeleteResponse import (
- AlipayEbppInvoiceInstitutionDeleteResponse,
- )
- from alipay.aop.api.request.AlipayEbppInvoiceInstitutionModifyRequest import (
- AlipayEbppInvoiceInstitutionModifyRequest,
- )
- from alipay.aop.api.domain.AlipayEbppInvoiceInstitutionModifyModel import (
- AlipayEbppInvoiceInstitutionModifyModel,
- )
- from alipay.aop.api.response.AlipayEbppInvoiceInstitutionModifyResponse import (
- AlipayEbppInvoiceInstitutionModifyResponse,
- )
- class InstitutionService:
- """费控制度服务层"""
- @classmethod
- async def create_institution_service(
- cls, auth: AuthSchema, data: AlipayEbppInvoiceInstitutionCreateModel
- ) -> AlipayEbppInvoiceInstitutionCreateResponse:
- """
- 创建费控制度
- 调用: alipay.ebpp.invoice.institution.create
- """
- if data.enterprise_id is None:
- raise CustomException(msg="创建费控制度失败: 企业ID不能为空")
- if data.outer_source_id:
- data.outer_source_id = None
- data.currency = 'CNY'
- request = AlipayEbppInvoiceInstitutionCreateRequest()
- request.biz_model = data
- client = AlipayClient.get_client()
- response = client.execute(request)
- if not response:
- raise CustomException(msg="创建费控制度失败: 无响应")
- result = AlipayEbppInvoiceInstitutionCreateResponse()
- result.parse_response_content(response)
- if not result.is_success():
- log.error(f"支付宝接口调用失败: {result.code} - {result.msg}")
- raise CustomException(msg=f"创建费控制度失败: {result.msg}")
- # 构建创建数据
- create_data = InstitutionCreateSchema(
- enterprise_id=data.enterprise_id,
- institution_id=result.institution_id,
- institution_name=getattr(data, 'institution_name', None),
- institution_desc=getattr(data, 'institution_desc', None),
- scene_type=getattr(data, 'scene_type', None),
- expense_type=getattr(data, 'expense_type', None),
- expense_sub_type=getattr(data, 'expense_sub_type', None),
- status=InstitutionStatusEnum.INSTITUTION_CREATE.value, # 初始状态
- effective=getattr(data, 'effective', None),
- effective_start_date=getattr(data, 'effective_start_date', None),
- effective_end_date=getattr(data, 'effective_end_date', None),
- consult_mode=getattr(data, 'consult_mode', None),
- multi_employee_share_mode=getattr(data, 'multi_employee_share_mode', None),
- currency=getattr(data, 'currency', None)
- )
- # 转换为字典并添加额外字段
- create_data_dict = create_data.model_dump(exclude_unset=True)
- crud = InstitutionCRUD(auth)
- await crud.create(create_data_dict)
- return result
- @classmethod
- async def list_service(
- cls,
- auth: AuthSchema,
- page_no: int = 1,
- page_size: int = 20,
- search: dict | None = None,
- ) -> dict:
- """
- 查询费控制度列表
- """
- crud = InstitutionCRUD(auth)
- offset = (page_no - 1) * page_size
- return await crud.page(
- offset=offset,
- limit=page_size,
- order_by=[{"id": "desc"}],
- search=search or {},
- out_schema=InstitutionListOutSchema,
- )
- @classmethod
- async def delete_institution_service(
- cls, auth: AuthSchema, data: AlipayEbppInvoiceInstitutionDeleteModel
- ) -> AlipayEbppInvoiceInstitutionDeleteResponse:
- """
- 删除费控制度
- 调用: alipay.ebpp.invoice.institution.delete
- """
- request = AlipayEbppInvoiceInstitutionDeleteRequest()
- request.biz_model = data
- client = AlipayClient.get_client()
- response = client.execute(request)
- if not response:
- raise CustomException(msg="删除费控制度失败: 无响应")
- result = AlipayEbppInvoiceInstitutionDeleteResponse()
- result.parse_response_content(response)
- if not result.is_success():
- log.error(f"支付宝接口调用失败: {result.code} - {result.msg}")
- raise CustomException(msg=f"删除费控制度失败: {result.msg}")
- return result
- @classmethod
- async def modify_institution_service(
- cls, auth: AuthSchema, data: AlipayEbppInvoiceInstitutionModifyModel
- ) -> AlipayEbppInvoiceInstitutionModifyResponse:
- """
- 编辑费控制度
- 调用: alipay.ebpp.invoice.institution.modify
- """
- if data.institution_id is None:
- raise CustomException(msg="编辑费控制度失败: 制度ID不能为空")
- request = AlipayEbppInvoiceInstitutionModifyRequest()
- request.biz_model = data
- client = AlipayClient.get_client()
- response = client.execute(request)
- if not response:
- raise CustomException(msg="编辑费控制度失败: 无响应")
- result = AlipayEbppInvoiceInstitutionModifyResponse()
- result.parse_response_content(response)
- if not result.is_success():
- log.error(f"支付宝接口调用失败: {result.code} - {result.msg}")
- raise CustomException(msg=f"编辑费控制度失败: {result.msg}")
- # 更新本地数据库状态
- # crud = InstitutionCRUD(auth)
- # update_data = {}
- # if hasattr(data, 'institution_name') and data.institution_name:
- # update_data['institution_name'] = data.institution_name
- # if hasattr(data, 'institution_desc') and data.institution_desc:
- # update_data['institution_desc'] = data.institution_desc
- # if hasattr(data, 'effective') and data.effective is not None:
- # update_data['effective'] = data.effective
- # if hasattr(data, 'effective_start_date') and data.effective_start_date:
- # update_data['effective_start_date'] = data.effective_start_date
- # if hasattr(data, 'effective_end_date') and data.effective_end_date:
- # update_data['effective_end_date'] = data.effective_end_date
- # if hasattr(data, 'consult_mode') and data.consult_mode:
- # update_data['consult_mode'] = data.consult_mode
- # if update_data:
- # await crud.update({'institution_id': data.institution_id}, update_data)
- return result
|