370 lines
11 KiB
Python
370 lines
11 KiB
Python
"""SDS POD 平台 —— 数据模型(pydantic v2)。
|
|
|
|
移植自 @inkreach/sds-mng。订单域为 camelCase;物流域混用 snake_case,
|
|
对 snake_case 字段显式标注 alias(alias 优先于 alias_generator)。
|
|
所有模型 extra='allow',不丢字段。
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import Any
|
|
|
|
from pydantic import BaseModel, ConfigDict, Field
|
|
from pydantic.alias_generators import to_camel
|
|
|
|
|
|
class _SdsModel(BaseModel):
|
|
model_config = ConfigDict(
|
|
extra="allow",
|
|
populate_by_name=True,
|
|
alias_generator=to_camel,
|
|
)
|
|
|
|
|
|
# ----- 认证 -----
|
|
|
|
|
|
class LoginResult(_SdsModel):
|
|
access_token: str
|
|
|
|
|
|
# ----- 订单域(camelCase)-----
|
|
|
|
|
|
class MerchantStore(_SdsModel):
|
|
id: int | None = None
|
|
name: str | None = None
|
|
platform_name: str | None = None
|
|
platform_code: str | None = None
|
|
status: int | None = None
|
|
|
|
|
|
class Address(_SdsModel):
|
|
id: int | None = None
|
|
country: str | None = None
|
|
consignee: str | None = None
|
|
city: str | None = None
|
|
detail: str | None = None
|
|
province: str | None = None
|
|
mobile_phone: str | None = None
|
|
postcode: str | None = None
|
|
email: str | None = None
|
|
country_name: str | None = Field(default=None, alias="countryName")
|
|
address_detail1: str | None = Field(default=None, alias="addressDetail1")
|
|
address_detail2: str | None = Field(default=None, alias="addressDetail2")
|
|
address_detail3: str | None = Field(default=None, alias="addressDetail3")
|
|
|
|
|
|
class IssuingBayArea(_SdsModel):
|
|
name: str | None = None
|
|
type: str | None = None
|
|
id: int | None = None
|
|
|
|
|
|
class IssuingBayRef(_SdsModel):
|
|
id: int | None = None
|
|
name: str | None = None
|
|
city: str | None = None
|
|
province: str | None = None
|
|
detail: str | None = None
|
|
|
|
|
|
class ImportProduct(_SdsModel):
|
|
id: str | None = None
|
|
import_sku: str | None = None
|
|
import_product_name: str | None = None
|
|
import_color: str | None = None
|
|
import_size: str | None = None
|
|
import_img: str | None = None
|
|
import_style_number: str | None = None
|
|
import_sku_id: str | None = None
|
|
|
|
|
|
class OrderItem(_SdsModel):
|
|
id: str | None = None
|
|
order_id: str | None = None
|
|
no: str | None = None
|
|
out_order_item_id: str | None = None
|
|
import_product: ImportProduct | None = None
|
|
product_id: int | None = None
|
|
factory_id: int | None = None
|
|
factory: Any | None = None
|
|
seller_sku: str | None = None
|
|
product_name: str | None = None
|
|
img_url: str | None = None
|
|
product_color_block: Any | None = None
|
|
product_size: str | None = None
|
|
num: int | None = None
|
|
status: int | None = None
|
|
origin_price: float | None = None
|
|
price: float | None = None
|
|
supply_price: float | None = None
|
|
amount: float | None = None
|
|
profit: float | None = None
|
|
refund_status: str | None = None
|
|
design_status: str | None = None
|
|
|
|
|
|
class Merchant(_SdsModel):
|
|
id: int | None = None
|
|
name: str | None = None
|
|
|
|
|
|
class StatusHistory(_SdsModel):
|
|
status: int | None = None
|
|
gmt_update_time: str | None = None
|
|
|
|
|
|
class Compensation(_SdsModel):
|
|
status: int | None = None
|
|
amount: float | None = None
|
|
|
|
|
|
class Order(_SdsModel):
|
|
id: str
|
|
store_id: int | None = None
|
|
customer_id: int | None = None
|
|
no: str | None = None
|
|
out_order_no: str | None = None
|
|
username: str | None = None
|
|
origin: str | None = None
|
|
total_amount: float | None = None
|
|
product_amount: float | None = None
|
|
cost_amount: float | None = None
|
|
status: int | None = None
|
|
online_order_status_name: str | None = None
|
|
online_order_status_code: str | None = None
|
|
gmt_created: str | None = None
|
|
gmt_pay: str | None = None
|
|
gmt_confirm_time: str | None = Field(default=None, alias="gmtConfirmTime")
|
|
pay_status: int | None = None
|
|
latest_ship_time: Any | None = None
|
|
refund_status: int | None = None
|
|
be_after_service_order: bool | None = None
|
|
fba_type: str | None = None
|
|
remark: str | None = None
|
|
carriage_name: str | None = None
|
|
parcel_list: list[Any] = []
|
|
merchant_store: MerchantStore | None = None
|
|
address: Address | None = None
|
|
issuing_bay_area: IssuingBayArea | None = None
|
|
issuing_bay: IssuingBayRef | None = None
|
|
items: list[OrderItem] = []
|
|
logistics_id: int | None = None
|
|
delivery_type: int | None = None
|
|
merchant: Merchant | None = None
|
|
finish_time: Any | None = None
|
|
status_history: list[StatusHistory] = []
|
|
compensation: Compensation | None = None
|
|
compensation_status: int | None = None
|
|
express_type: int | None = None
|
|
|
|
|
|
class OrderPageResponse(_SdsModel):
|
|
total_count: int = Field(default=0, alias="totalCount")
|
|
current_page: int | None = None
|
|
page_size: int | None = None
|
|
records: list[Order] = Field(default=[], alias="list")
|
|
|
|
|
|
class OrderStatus(_SdsModel):
|
|
name: str | None = None
|
|
order_status_code: str | None = None
|
|
sort: int | None = None
|
|
|
|
|
|
class OrderStatistics(_SdsModel):
|
|
name: str | None = None
|
|
order_num: int | None = None
|
|
order_status_code: str | None = None
|
|
sort: int | None = None
|
|
|
|
|
|
# ----- 产品域(camelCase)-----
|
|
|
|
|
|
class ProductCategory(_SdsModel):
|
|
id: int | None = None
|
|
name: str | None = None
|
|
|
|
|
|
class ProductSupply(_SdsModel):
|
|
factory_id: int | None = None
|
|
name: str | None = None
|
|
supply_price: str | None = None
|
|
max_price: float | None = None
|
|
min_price: float | None = None
|
|
online_supply_num: int | None = None
|
|
|
|
|
|
class Product(_SdsModel):
|
|
id: int
|
|
img_url: str | None = None
|
|
thumb_img_url: str | None = None
|
|
category_id: int | None = None
|
|
category_list: list[ProductCategory] = []
|
|
on_sale_status: int | None = None
|
|
public_status: int | None = None
|
|
platform_price: str | None = None
|
|
on_sale_price: str | None = None
|
|
status: int | None = None
|
|
sku: str | None = None
|
|
name: str | None = None
|
|
english_name: str | None = None
|
|
product_supply: list[ProductSupply] = []
|
|
|
|
|
|
class ProductListResponse(_SdsModel):
|
|
total_count: int = Field(default=0, alias="totalCount")
|
|
records: list[Product] = Field(default=[], alias="list")
|
|
|
|
|
|
# ----- 物流域(混用 snake_case,显式 alias)-----
|
|
|
|
|
|
class IssuingBay(_SdsModel):
|
|
id: int | None = None
|
|
name: str | None = None
|
|
type: str | None = None
|
|
country: str | None = None
|
|
country_name: str | None = Field(default=None, alias="country_name")
|
|
province: str | None = None
|
|
province_code: str | None = Field(default=None, alias="province_code")
|
|
city: str | None = None
|
|
city_code: str | None = Field(default=None, alias="city_code")
|
|
detail: str | None = None
|
|
priority: int | None = None
|
|
status: int | None = None
|
|
issuing_bay_area_id: int | None = Field(default=None, alias="issuing_bay_area_id")
|
|
created_time: int | None = Field(default=None, alias="created_time")
|
|
updated_time: int | None = Field(default=None, alias="updated_time")
|
|
|
|
|
|
class IssuingBayAreaDetail(_SdsModel):
|
|
id: int | None = None
|
|
name: str | None = None
|
|
type: str | None = None
|
|
country_code: str | None = None
|
|
address: str | None = None
|
|
icon_url: str | None = None
|
|
status: int | None = None
|
|
priority: int | None = None
|
|
created_time: int | None = Field(default=None, alias="created_time")
|
|
updated_time: int | None = Field(default=None, alias="updated_time")
|
|
issuing_bays: list[IssuingBay] = []
|
|
|
|
|
|
class IssuingBayAreaResponse(_SdsModel):
|
|
items: list[IssuingBayAreaDetail] = []
|
|
|
|
|
|
class LogisticsItem(IssuingBay):
|
|
factory_num: int | None = None
|
|
account_num: int | None = None
|
|
|
|
|
|
class LogisticsPageResponse(_SdsModel):
|
|
items: list[LogisticsItem] = []
|
|
page: int | None = None
|
|
size: int | None = None
|
|
total_count: int = Field(default=0, alias="totalCount")
|
|
total_count_alt: int | None = Field(default=None, alias="total_count")
|
|
|
|
|
|
# ----- 筛选面板(camelCase)-----
|
|
|
|
|
|
class FilterItem(_SdsModel):
|
|
name: str | None = None
|
|
id: Any | None = None
|
|
fp: Any | None = None
|
|
|
|
|
|
class FiltratePanelResponse(_SdsModel):
|
|
factory_list: list[FilterItem] = []
|
|
merchant_list: list[FilterItem] = []
|
|
logistics_list: list[FilterItem] = []
|
|
early_warning_list: list[FilterItem] = []
|
|
issuing_bay_area_list: list[FilterItem] = []
|
|
extend_status_list: list[FilterItem] = []
|
|
|
|
|
|
# ----- 查询参数(请求 schema)-----
|
|
|
|
|
|
class OrderPageRequest(BaseModel):
|
|
"""SDS 订单分页查询参数。keywords(换行分隔订单号)/时间范围/状态等可选。"""
|
|
|
|
model_config = ConfigDict(extra="allow")
|
|
|
|
size: int | None = None
|
|
page: int | None = None
|
|
keywords: str | None = None
|
|
created_date_begin: str | None = None
|
|
created_date_end: str | None = None
|
|
pay_date_begin: str | None = None
|
|
pay_date_end: str | None = None
|
|
confirm_date_begin: str | None = None
|
|
confirm_date_end: str | None = None
|
|
finish_date_begin: str | None = None
|
|
finish_date_end: str | None = None
|
|
order_status_code: str | None = None
|
|
product_keywords: str | None = None
|
|
order_time_range_type: str | None = None
|
|
factory_ids: list[int] | None = None
|
|
merchant_ids: list[int] | None = None
|
|
logistics_ids: list[int] | None = None
|
|
issuing_bay_area_id: int | None = None
|
|
extend_status: str | None = None
|
|
early_warning_type: str | None = None
|
|
item_num_type: str | None = None
|
|
limit: int | None = None
|
|
all: bool | None = None
|
|
|
|
|
|
class OrderQueryParams(BaseModel):
|
|
"""SDS 订单筛选/状态/统计查询参数(不含分页)。"""
|
|
|
|
model_config = ConfigDict(extra="allow")
|
|
|
|
created_date_begin: str | None = None
|
|
created_date_end: str | None = None
|
|
pay_date_begin: str | None = None
|
|
pay_date_end: str | None = None
|
|
confirm_date_begin: str | None = None
|
|
confirm_date_end: str | None = None
|
|
finish_date_begin: str | None = None
|
|
finish_date_end: str | None = None
|
|
order_time_range_type: str | None = None
|
|
product_keywords: str | None = None
|
|
factory_ids: list[int] | None = None
|
|
merchant_ids: list[int] | None = None
|
|
logistics_ids: list[int] | None = None
|
|
issuing_bay_area_id: int | None = None
|
|
extend_status: str | None = None
|
|
early_warning_type: str | None = None
|
|
item_num_type: str | None = None
|
|
|
|
|
|
class ProductListRequest(BaseModel):
|
|
model_config = ConfigDict(extra="allow")
|
|
|
|
keyword: str | None = None
|
|
page: int | None = None
|
|
size: int | None = None
|
|
public_status: int | None = None
|
|
limit: int | None = None
|
|
all: bool | None = None
|
|
|
|
|
|
class LogisticsPageRequest(BaseModel):
|
|
model_config = ConfigDict(extra="allow")
|
|
|
|
keyword: str | None = None
|
|
delivery_method: str | None = None
|
|
issuing_bay_area_id: int
|
|
page: int | None = None
|
|
size: int | None = None
|
|
limit: int | None = None
|
|
all: bool | None = None
|