| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- import logging
- from fastapi import APIRouter, Depends
- from typing import Any, Union
- from pydantic import ValidationError
- from alien_store.api.deps import get_contract_center_service
- from alien_contract.schemas.request.contract import BundleCreateRequest
- from alien_contract.services.contract_server import ContractCenterService
- from alien_store.schemas.request.contract_store import TemplatesCreate
- from alien_store.schemas.response.contract_store import (
- ModuleStatusResponse,
- TemplatesCreateResponse,
- ErrorResponse,
- )
- router = APIRouter()
- logger = logging.getLogger("alien_store")
- def _format_validation_errors(exc: ValidationError) -> list[dict[str, str]]:
- errors = []
- for err in exc.errors():
- loc = err.get("loc", ())
- field = ".".join(str(item) for item in loc if item != "body")
- errors.append(
- {
- "field": field or "body",
- "type": err.get("type", "validation_error"),
- "message": err.get("msg", "参数校验失败"),
- }
- )
- return errors
- @router.get("/", response_model=ModuleStatusResponse)
- async def index() -> ModuleStatusResponse:
- return ModuleStatusResponse(module="Contract", status="Ok")
- @router.post("/get_esign_templates", response_model=Union[TemplatesCreateResponse, ErrorResponse])
- async def create_esign_templates(
- templates_data_raw: dict[str, Any],
- templates_server: ContractCenterService = Depends(get_contract_center_service)
- ) -> Union[TemplatesCreateResponse, ErrorResponse]:
- """AI审核完调用 e签宝生成文件(统一走合同中心)"""
- try:
- templates_data = TemplatesCreate.model_validate(templates_data_raw)
- except ValidationError as e:
- detail = _format_validation_errors(e)
- logger.error("get_esign_templates validation failed: %s", detail)
- return ErrorResponse(
- success=False,
- message="请求参数校验失败",
- raw={"errors": detail},
- )
- request = BundleCreateRequest(
- subject_type="store",
- subject_id=templates_data.store_id,
- subject_name=templates_data.store_name,
- business_segment=templates_data.business_segment,
- contact_name=templates_data.merchant_name,
- contact_phone=templates_data.contact_phone,
- ord_id=templates_data.ord_id,
- )
- result = await templates_server.create_bundle(request)
- if not result.get("success"):
- return ErrorResponse(**result)
- return TemplatesCreateResponse(
- success=True,
- message=result["message"],
- sign_flow_id=result.get("primary_sign_flow_id"),
- file_id=result.get("created_contracts", [{}])[0].get("file_id") if result.get("created_contracts") else None,
- contract_url=result.get("created_contracts", [{}])[0].get("contract_url") if result.get("created_contracts") else None,
- created_contracts=result.get("created_contracts"),
- )
|