"""RIIN 分销平台 —— 数据模型(pydantic v2)。 忠实还原 @inkreach/riin-dis 的 TypeScript 类型,extra='allow' 兼容未知字段。 """ from __future__ import annotations from enum import IntEnum from typing import Any from pydantic import BaseModel, ConfigDict from pydantic.alias_generators import to_camel class PlatformType(IntEnum): TIKTOK = 11 TEMU = 13 SHEIN = 17 WALMART = 19 class ShopType(IntEnum): TIKTOK = 11 TEMU = 13 SHEIN = 17 WALMART = 19 class OrderStatusValue(IntEnum): NOT_PUSHED = -4 PENDING_REVIEW = -5 ASSIGN_FAILED = -6 UNDER_REVIEW = -3 PENDING_PUSH = 1 UNDER_REVIEW_DISTRIBUTOR = 3 PUSHED = 4 IN_PRODUCTION = 5 SHIPPED = 12 COMPLETED = 13 CANCELLED = 14 CLOSED = 15 DAY_RANGE_3 = 101 DAY_RANGE_3_7 = 102 DAY_RANGE_7_15 = 103 DAY_RANGE_15_PLUS = 104 class ExpressSource(IntEnum): FACTORY = 1 PLATFORM_LABEL = 2 SELF_LABEL = 3 class TimeType(IntEnum): ORDER_CREATE = 1 PUSH_FACTORY = 5 MERCHANT_PUSH = 3 SHIP = 4 class _RiinModel(BaseModel): model_config = ConfigDict( extra="allow", populate_by_name=True, alias_generator=to_camel, ) # ----- 认证 ----- class LoginResult(_RiinModel): id: str | None = None tenant_id: str | None = None sub_id: str | None = None tenant_name: str | None = None username: str | None = None nickname: str | None = None user_type: str | None = None token: str token_flag: str | None = None invite_code: str | None = None main_account: bool | None = None factory: bool | None = None distribution: bool | None = None sub_distribution: bool | None = None # ----- 订单 ----- class ExpressItem(_RiinModel): express_name: str | None = None ship_logistics_type: str | None = None class Order(_RiinModel): id: str tenant_id: str | None = None sub_id: str | None = None sub_name: str | None = None source_platform_oid: str | None = None platform_oid: str | None = None platform_order_name: str | None = None order_status: int | None = None order_type: int | None = None goods_total_qty: int | None = None platform_order_status: str | None = None platform_refund_status: str | None = None platform_shop_code: str | None = None platform_shop_id: str | None = None platform_shop_name: str | None = None platform_type: int | None = None sub_platform_type: int | None = None seller_flag: str | None = None factory_remark: str | None = None distributor_remark: str | None = None seller_remark: str | None = None buyer_remark: str | None = None delivery_courier: str | None = None express_code: str | None = None express_fee: float | None = None express_source: int | None = None courier_number: str | None = None consignee_name: str | None = None phone: str | None = None email: str | None = None address: str | None = None receiver_country: str | None = None receiver_province: str | None = None receiver_city: str | None = None receiver_district: str | None = None receiver_town: str | None = None post_code: str | None = None currency: str | None = None currency_type: str | None = None total_fee: float | None = None payment: float | None = None received_payment: float | None = None total_price: float | None = None total_sell_price: float | None = None post_fee: float | None = None order_create_time: str | None = None pre_shipping_time: str | None = None shipping_time: str | None = None order_pay_time: str | None = None order_time: str | None = None finish_time: str | None = None cancel_time: str | None = None audit_time: str | None = None push_time: str | None = None distributor_push_time: str | None = None distributor_push_target_name: str | None = None except_last_shipping_time: str | None = None push_msg: str | None = None pushed_failed: str | None = None assigned_fail_reason: str | None = None urgent_order: int | None = None is_third_flag: bool | None = None is_custom_product: bool | None = None express_list: list[ExpressItem] = [] class OrderPageData(_RiinModel): records: list[Order] = [] total: int = 0 class OrderPageResponse(_RiinModel): successful: bool | None = None message: str | None = None error_code: str | None = None data: OrderPageData = OrderPageData() class PrintingImage(_RiinModel): id: str | None = None type: int | None = None url: str | None = None name: str | None = None code: str | None = None class OrderGoodsImageObjs(_RiinModel): sku_image: str | None = None printing_image: str | None = None printing_images: list[PrintingImage] = [] sku_images: list[str] | None = None print_urls: list[str] = [] sku_urls: list[str] = [] class OrderGoods(_RiinModel): id: str order_id: str | None = None platform_oid: str | None = None platform_spu_id: str | None = None platform_sku_id: str | None = None title: str | None = None specification: str | None = None goods_status: str | None = None refund_status: str | None = None price: float | None = None sell_price: float | None = None num: int | None = None total_price: float | None = None total_sell_price: float | None = None sku_image: str | None = None mapping_sku_code: str | None = None factory_mapping_sku_code: str | None = None style_code: str | None = None image_code: str | None = None size_code: str | None = None color_code: str | None = None style_name: str | None = None image_name: str | None = None size_name: str | None = None color_name: str | None = None product_code: str | None = None craft_type: int | None = None print_position: str | None = None image_objs: Any | None = None class OrderGoodsResponse(_RiinModel): successful: bool | None = None message: str | None = None error_code: str | None = None data: list[OrderGoods] = [] class OrderListCount(_RiinModel): assigned_suceessed: int = 0 factory_auditing: int = 0 in_producing: int = 0 shipped: int = 0 closed: int = 0 refunding: int = 0 refunded: int = 0 rejecting: int = 0 rejected_to_shop: int = 0 day_range_group1: int = 0 day_range_group2: int = 0 day_range_group3: int = 0 day_range_group4: int = 0 class OrderListCountResponse(_RiinModel): successful: bool | None = None message: str | None = None error_code: str | None = None data: OrderListCount = OrderListCount() class OrderLog(_RiinModel): id: str | None = None order_id: str | None = None platform_oid: str | None = None operate_type: str | None = None operate_msg: str | None = None operator_name: str | None = None operate_time: str | None = None class OrderLogResponse(_RiinModel): successful: bool | None = None message: str | None = None error_code: str | None = None data: list[OrderLog] = [] # ----- 店铺 / 工厂 / 客户 ----- class CustomerShop(_RiinModel): tenant_id: str | None = None tenant_name: str | None = None shop_id: str | None = None shop_code: str | None = None shop_name: str | None = None shop_type: int | None = None sub_id: str | None = None class CustomerShopListResponse(_RiinModel): successful: bool | None = None message: str | None = None error_code: str | None = None data: list[CustomerShop] = [] class FactoryInfo(_RiinModel): factory_id: str | None = None phone: str | None = None contact: str | None = None address: str | None = None name: str | None = None logo_url: str | None = None class FactoryInfoListResponse(_RiinModel): successful: bool | None = None message: str | None = None error_code: str | None = None data: list[FactoryInfo] = [] class Customer(_RiinModel): id: str | None = None tenant_id: str | None = None customer_tenant_id: str | None = None customer_name: str | None = None username: str | None = None contacts: str | None = None mobile: str | None = None settlement_currency: int | None = None disable: int | None = None class CustomerListResponse(_RiinModel): successful: bool | None = None message: str | None = None error_code: str | None = None data: list[Customer] = [] # ----- 辅助主数据 ----- class Article(_RiinModel): id: str | None = None code: str | None = None name: str | None = None class Size(_RiinModel): id: str | None = None code: str | None = None name: str | None = None class Color(_RiinModel): id: str | None = None code: str | None = None name: str | None = None class ThirdInterfaceCustomer(_RiinModel): id: str | None = None name: str | None = None class ExpressInfo(_RiinModel): id: str | None = None name: str | None = None code: str | None = None class PageData(_RiinModel): records: list[Any] = [] total: int = 0 # ----- 查询参数(请求 schema)----- class OrderPageRequest(BaseModel): """RIIN 订单分页查询参数。timeType/startTime/endTime 等可选。""" model_config = ConfigDict(extra="allow") time_type: int | None = None start_time: str | None = None end_time: str | None = None platform_oid_list: str | None = None shop_code_list: list[str] | None = None courier_number_list: str | None = None sub_id_list: list[str] | None = None goods_title: str | None = None mapping_sku_code: str | None = None platform_type: int | None = None order_source: int | None = None factory_ids: list[str] | None = None express_source: int | None = None delivery_courier: str | None = None receiver_country: str | None = None region: str | None = None receiver_province: str | None = None craft_type: int | None = None style_code_list: list[str] | None = None color_code_list: list[str] | None = None size_code_list: list[str] | None = None seller_remark: str | None = None urgent_order: int | None = None third_interface_customer_id: str | None = None platform_status_list: list[str] | None = None is_third_flag: bool | None = None page_index: int | None = None page_size: int | None = None order_status: int | None = None day_range_group: int | None = None has_refund: bool | None = None push_failed: bool | None = None assigned_fail_reason: str | None = None push_fail_reason: str | None = None factory_remark_param: str | None = None distributor_remark_param: str | None = None limit: int | None = None all: bool | None = None