- 添加FastAPI应用基础结构,包括主入口、路由和模型定义
- 实现Webhook接收端点(/webhook/{namespace})和健康检查(/health)
- 添加管理后台路由和模板,支持端点、目标、渠道和模板管理
- 包含SQLite数据库模型定义和初始化逻辑
- 添加日志记录和统计服务
- 包含Dockerfile和配置示例文件
- 添加项目文档,包括设计、流程图和验收标准
33 lines
1.2 KiB
Python
33 lines
1.2 KiB
Python
from typing import Optional, Dict, Any
|
|
from pydantic import BaseModel
|
|
|
|
class IncomingOrderInfo(BaseModel):
|
|
cash_resp_desc: Optional[str] = None
|
|
ref_amt: Optional[float] = None
|
|
|
|
class IncomingPayload(BaseModel):
|
|
remark: Optional[str] = None
|
|
event_define_no: Optional[str] = None
|
|
trans_amt: Optional[float] = None
|
|
settlement_amt: Optional[float] = None
|
|
out_trans_id: Optional[str] = None
|
|
hf_seq_id: Optional[str] = None
|
|
namespace: Optional[str] = None
|
|
trans_order_info: Optional[IncomingOrderInfo] = None
|
|
extra: Optional[Dict[str, Any]] = None
|
|
|
|
def idempotent_key(self) -> Optional[str]:
|
|
return self.out_trans_id or self.hf_seq_id
|
|
|
|
def cash_resp_desc(self) -> str:
|
|
v = None
|
|
if self.trans_order_info:
|
|
v = self.trans_order_info.cash_resp_desc
|
|
return v or ""
|
|
|
|
def actual_ref_amt(self) -> Optional[float]:
|
|
extra_val = None
|
|
if self.extra and isinstance(self.extra, dict):
|
|
extra_val = self.extra.get("actual_ref_amt")
|
|
return extra_val or (self.trans_order_info.ref_amt if self.trans_order_info and self.trans_order_info.ref_amt is not None else self.settlement_amt)
|