feat: Orders 加 10 地址/店铺字段 + labelPdfUrl(SDS/RIIN mapper+db)

This commit is contained in:
yeuimu
2026-07-23 16:05:46 +00:00
parent 2b8a2b65f4
commit 8ab0aededa
3 changed files with 45 additions and 4 deletions
+4
View File
@@ -49,6 +49,10 @@ class Address(_SdsModel):
mobile_phone: str | None = None mobile_phone: str | None = None
postcode: str | None = None postcode: str | None = None
email: 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): class IssuingBayArea(_SdsModel):
+12 -2
View File
@@ -231,7 +231,9 @@ class SyncDB:
'''INSERT INTO "Orders" ( '''INSERT INTO "Orders" (
"orderNo","outOrderNo","courierSource","courierName","courierNo","merchantId", "orderNo","outOrderNo","courierSource","courierName","courierNo","merchantId",
"countryRegion","factoryName","systemName","systemStatus","platformName","platformStatus", "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 ) VALUES %s
ON CONFLICT ("orderNo","createdAt") DO UPDATE SET ON CONFLICT ("orderNo","createdAt") DO UPDATE SET
"outOrderNo"=EXCLUDED."outOrderNo","courierSource"=EXCLUDED."courierSource", "outOrderNo"=EXCLUDED."outOrderNo","courierSource"=EXCLUDED."courierSource",
@@ -241,11 +243,19 @@ class SyncDB:
"systemStatus"=EXCLUDED."systemStatus","platformName"=EXCLUDED."platformName", "systemStatus"=EXCLUDED."systemStatus","platformName"=EXCLUDED."platformName",
"platformStatus"=EXCLUDED."platformStatus","orderedAt"=EXCLUDED."orderedAt", "platformStatus"=EXCLUDED."platformStatus","orderedAt"=EXCLUDED."orderedAt",
"confirmedAt"=EXCLUDED."confirmedAt","completedAt"=EXCLUDED."completedAt", "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.orderNo, o.outOrderNo, o.courierSource, o.courierName, o.courierNo, o.merchantId,
o.countryRegion, o.factoryName, o.systemName, o.systemStatus, o.platformName, o.platformStatus, o.countryRegion, o.factoryName, o.systemName, o.systemStatus, o.platformName, o.platformStatus,
o.createdAt, o.orderedAt, o.confirmedAt, o.completedAt, o.shipDeadline, 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], ) for o in orders],
page_size=ORDER_CHUNK, page_size=ORDER_CHUNK,
) )
+29 -2
View File
@@ -128,6 +128,9 @@ class OrderUpsertInput:
"merchantId", "countryRegion", "factoryName", "systemName", "systemStatus", "merchantId", "countryRegion", "factoryName", "systemName", "systemStatus",
"platformName", "platformStatus", "createdAt", "orderedAt", "confirmedAt", "platformName", "platformStatus", "createdAt", "orderedAt", "confirmedAt",
"completedAt", "shipDeadline", "completedAt", "shipDeadline",
"consigneeName", "destinationCountry", "stateProvince", "city",
"addressLine1", "addressLine2", "addressLine3", "postalCode", "storeName",
"labelPdfUrl",
) )
def __init__(self, **kwargs: Any) -> None: def __init__(self, **kwargs: Any) -> None:
@@ -183,6 +186,16 @@ def map_riin_order(raw: Any) -> OrderUpsertInput:
confirmedAt=confirmed_at, confirmedAt=confirmed_at,
completedAt=completed_at, completedAt=completed_at,
shipDeadline=ship_deadline, 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_source = channel_type_map[lid]
courier_no: str | None = None courier_no: str | None = None
label_pdf_url: str | None = None
if raw.parcel_list: if raw.parcel_list:
first = raw.parcel_list[0] first = raw.parcel_list[0]
try: 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): except (TypeError, KeyError, IndexError):
courier_no = None pass
factory_name: str | None = None factory_name: str | None = None
for item in raw.items or []: 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") 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 area_name = raw.issuing_bay_area.name if raw.issuing_bay_area else None
addr = raw.address
return OrderUpsertInput( return OrderUpsertInput(
orderNo=raw.no, orderNo=raw.no,
outOrderNo=raw.out_order_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, confirmedAt=confirmed_at,
completedAt=completed_at, completedAt=completed_at,
shipDeadline=ship_deadline, 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,
) )