from app.api.v1.module_system.auth.schema import AuthSchema from app.core.exceptions import CustomException from app.core.logger import log from app.utils.snowflake import get_snowflake_id_str from typing import Optional from .crud import OpenConfCRUD, OpenTransferCRUD from .schema import OpenConfOutSchema, OpenConfUpdateSchema, OpenTransferSchema, OpenTransferOutSchema, \ OpenTransferQuerySchema from app.plugin.module_payment.account import AccountService class OpenTransferService: @classmethod async def open_query_service( cls, auth: AuthSchema, query: OpenTransferQuerySchema ) -> dict: crud = OpenTransferCRUD(auth) transfer_data = await crud.get(third_biz_no=query.third_biz_no) if transfer_data is None: raise CustomException("三方订单号不存在") result = await AccountService.transfer_detail_service(auth=auth, out_biz_no=transfer_data.out_biz_no) return result.model_dump(exclude_none=True) @classmethod async def open_transfer_service( cls, auth: AuthSchema, data: OpenTransferSchema ) -> OpenTransferOutSchema: third_biz_no = data.third_biz_no if not third_biz_no: raise CustomException("三方订单号不能为空") # 先查询是否存在三方订单号 crud = OpenTransferCRUD(auth) existing = await crud.get(third_biz_no=third_biz_no) if existing: raise CustomException("三方订单号已存在") # 执行转账记录创建 result = await AccountService.transfer_service(auth=auth, data=data) log.info(f"租户资金专户转账发起成功: 企业: {data.enterprise_id}, 金额: {data.amount}") # 保存三方订单号关联记录 create_data = { "third_biz_no": third_biz_no, "out_biz_no": result.out_biz_no, } await crud.create(create_data) return OpenTransferOutSchema( status=result.status, order_no=result.order_no, third_biz_no=third_biz_no, ) class OpenConfService: """开放配置服务层""" @classmethod async def get_conf_service( cls, auth: AuthSchema, ) -> Optional[OpenConfOutSchema]: """ 查询开放配置 """ crud = OpenConfCRUD(auth) result = await crud.get_first() if result is not None: return OpenConfOutSchema.model_validate(result) return None @classmethod async def save_conf_service( cls, auth: AuthSchema, data: OpenConfUpdateSchema, ) -> OpenConfOutSchema: """ 创建/更新开放配置(前端只允许配置回调地址) """ # 先查询是否存在配置 update_data = { "notify_url": data.notify_url, "return_url": data.return_url, } crud = OpenConfCRUD(auth) existing = await crud.get_first() if not existing: update_data["app_id"] = get_snowflake_id_str(auth.tenant_id) update_data["gateway_url"] = "https://api.qcsj88888.com" result = await crud.create(update_data) log.info(f"开放配置创建成功: 租户ID: {auth.tenant_id}") else: result = await crud.update(existing.id, update_data) log.info(f"开放配置更新成功: 租户ID: {auth.tenant_id}") return OpenConfOutSchema.model_validate(result)