From 8ab0aededafa7388d3b54233e54996e39ef93857 Mon Sep 17 00:00:00 2001 From: yeuimu <2197651308@qq.com> Date: Thu, 23 Jul 2026 16:05:46 +0000 Subject: [PATCH] =?UTF-8?q?feat:=20Orders=20=E5=8A=A0=2010=20=E5=9C=B0?= =?UTF-8?q?=E5=9D=80/=E5=BA=97=E9=93=BA=E5=AD=97=E6=AE=B5=20+=20labelPdfUr?= =?UTF-8?q?l(SDS/RIIN=20mapper+db)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/sds/models.py | 4 ++++ flows/shared/db.py | 14 ++++++++++++-- flows/shared/mappers.py | 31 +++++++++++++++++++++++++++++-- 3 files changed, 45 insertions(+), 4 deletions(-) diff --git a/api/sds/models.py b/api/sds/models.py index 46c37a8..a15ca50 100644 --- a/api/sds/models.py +++ b/api/sds/models.py @@ -49,6 +49,10 @@ class Address(_SdsModel): 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): diff --git a/flows/shared/db.py b/flows/shared/db.py index 225cebb..53c4657 100644 --- a/flows/shared/db.py +++ b/flows/shared/db.py @@ -231,7 +231,9 @@ class SyncDB: '''INSERT INTO "Orders" ( "orderNo","outOrderNo","courierSource","courierName","courierNo","merchantId", "countryRegion","factoryName","systemName","systemStatus","platformName","platformStatus", - "createdAt","orderedAt","confirmedAt","completedAt","shipDeadline" + "createdAt","orderedAt","confirmedAt","completedAt","shipDeadline", + "consigneeName","destinationCountry","stateProvince","city", + "addressLine1","addressLine2","addressLine3","postalCode","storeName","labelPdfUrl" ) VALUES %s ON CONFLICT ("orderNo","createdAt") DO UPDATE SET "outOrderNo"=EXCLUDED."outOrderNo","courierSource"=EXCLUDED."courierSource", @@ -241,11 +243,19 @@ class SyncDB: "systemStatus"=EXCLUDED."systemStatus","platformName"=EXCLUDED."platformName", "platformStatus"=EXCLUDED."platformStatus","orderedAt"=EXCLUDED."orderedAt", "confirmedAt"=EXCLUDED."confirmedAt","completedAt"=EXCLUDED."completedAt", - "shipDeadline"=EXCLUDED."shipDeadline"''', + "shipDeadline"=EXCLUDED."shipDeadline", + "consigneeName"=EXCLUDED."consigneeName", + "destinationCountry"=EXCLUDED."destinationCountry", + "stateProvince"=EXCLUDED."stateProvince","city"=EXCLUDED."city", + "addressLine1"=EXCLUDED."addressLine1","addressLine2"=EXCLUDED."addressLine2", + "addressLine3"=EXCLUDED."addressLine3","postalCode"=EXCLUDED."postalCode", + "storeName"=EXCLUDED."storeName","labelPdfUrl"=EXCLUDED."labelPdfUrl"''', [( o.orderNo, o.outOrderNo, o.courierSource, o.courierName, o.courierNo, o.merchantId, o.countryRegion, o.factoryName, o.systemName, o.systemStatus, o.platformName, o.platformStatus, o.createdAt, o.orderedAt, o.confirmedAt, o.completedAt, o.shipDeadline, + o.consigneeName, o.destinationCountry, o.stateProvince, o.city, + o.addressLine1, o.addressLine2, o.addressLine3, o.postalCode, o.storeName, o.labelPdfUrl, ) for o in orders], page_size=ORDER_CHUNK, ) diff --git a/flows/shared/mappers.py b/flows/shared/mappers.py index 30c60a4..7e37678 100644 --- a/flows/shared/mappers.py +++ b/flows/shared/mappers.py @@ -128,6 +128,9 @@ class OrderUpsertInput: "merchantId", "countryRegion", "factoryName", "systemName", "systemStatus", "platformName", "platformStatus", "createdAt", "orderedAt", "confirmedAt", "completedAt", "shipDeadline", + "consigneeName", "destinationCountry", "stateProvince", "city", + "addressLine1", "addressLine2", "addressLine3", "postalCode", "storeName", + "labelPdfUrl", ) def __init__(self, **kwargs: Any) -> None: @@ -183,6 +186,16 @@ def map_riin_order(raw: Any) -> OrderUpsertInput: confirmedAt=confirmed_at, completedAt=completed_at, shipDeadline=ship_deadline, + consigneeName=raw.consignee_name, + destinationCountry=raw.receiver_country, + stateProvince=raw.receiver_province, + city=raw.receiver_city, + addressLine1=raw.address, + addressLine2=raw.receiver_district, + addressLine3=raw.receiver_town, + postalCode=raw.post_code, + storeName=raw.platform_shop_name, + labelPdfUrl=None, ) @@ -234,12 +247,15 @@ def map_sds_order(raw: Any, channel_type_map: dict[int, str | None], pre_courier courier_source = channel_type_map[lid] courier_no: str | None = None + label_pdf_url: str | None = None if raw.parcel_list: first = raw.parcel_list[0] try: - courier_no = first["logistics"]["carriage"]["no"] + carriage = first["logistics"]["carriage"] + courier_no = carriage.get("no") + label_pdf_url = carriage.get("laberPdf") or carriage.get("labelPdf") except (TypeError, KeyError, IndexError): - courier_no = None + pass factory_name: str | None = None for item in raw.items or []: @@ -251,6 +267,7 @@ def map_sds_order(raw: Any, channel_type_map: dict[int, str | None], pre_courier confirmed_at = _parse(getattr(raw, "gmt_confirm_time", None), f"SDS order {raw.no} gmtConfirmTime") area_name = raw.issuing_bay_area.name if raw.issuing_bay_area else None + addr = raw.address return OrderUpsertInput( orderNo=raw.no, outOrderNo=raw.out_order_no, @@ -269,6 +286,16 @@ def map_sds_order(raw: Any, channel_type_map: dict[int, str | None], pre_courier confirmedAt=confirmed_at, completedAt=completed_at, shipDeadline=ship_deadline, + consigneeName=addr.consignee if addr else None, + destinationCountry=addr.country if addr else None, + stateProvince=addr.province if addr else None, + city=addr.city if addr else None, + addressLine1=addr.address_detail1 if addr else None, + addressLine2=addr.address_detail2 if addr else None, + addressLine3=addr.address_detail3 if addr else None, + postalCode=addr.postcode if addr else None, + storeName=raw.merchant_store.name if raw.merchant_store else None, + labelPdfUrl=label_pdf_url, )