feat(trade): complete order on courier signed callback (v3.4.13)
When XFX route callback reports status=5 or statusName containing 签收, map to COMPLETED instead of PENDING_RECEIVE; document in v3.4.13 docs. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -73,7 +73,10 @@ export class DeliveryCallbackService {
|
||||
return this.courier.buildTrackCallbackResponse(false);
|
||||
}
|
||||
|
||||
const targetStatus = this.xiaofeixiaProvider.mapTrackStatus(payload.status);
|
||||
const targetStatus = this.xiaofeixiaProvider.mapTrackStatus(
|
||||
payload.status,
|
||||
payload.statusName,
|
||||
);
|
||||
let applied = false;
|
||||
if (targetStatus && targetStatus !== order.status) {
|
||||
await this.tradeService.applyStatusTransition(
|
||||
|
||||
@@ -67,7 +67,7 @@ export class CourierService {
|
||||
return this.provider.parseTrackCallback(body);
|
||||
}
|
||||
|
||||
mapTrackStatus(status: string): CourierMappedOrderStatus | null {
|
||||
return this.provider.mapTrackStatus(status);
|
||||
mapTrackStatus(status: string, statusName?: string): CourierMappedOrderStatus | null {
|
||||
return this.provider.mapTrackStatus(status, statusName);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -128,6 +128,6 @@ export interface ICourierProvider {
|
||||
checkDeliveryCoverage(toAddress: string, options?: CourierCallOptions): Promise<DeliveryCoverageResult>;
|
||||
estimateFreight(weight: number, options?: CourierCallOptions): Promise<FreightEstimateResult>;
|
||||
parseTrackCallback(body: unknown): TrackCallbackPayload | null;
|
||||
mapTrackStatus(status: string): CourierMappedOrderStatus | null;
|
||||
mapTrackStatus(status: string, statusName?: string): CourierMappedOrderStatus | null;
|
||||
buildTrackCallbackResponse(success?: boolean): TrackCallbackResponse;
|
||||
}
|
||||
|
||||
@@ -157,7 +157,11 @@ export class XiaofeixiaProvider implements ICourierProvider {
|
||||
};
|
||||
}
|
||||
|
||||
mapTrackStatus(status: string): CourierMappedOrderStatus | null {
|
||||
mapTrackStatus(status: string, statusName?: string): CourierMappedOrderStatus | null {
|
||||
const name = (statusName || '').trim();
|
||||
if (status === '5' || /签收/.test(name)) {
|
||||
return 'COMPLETED';
|
||||
}
|
||||
switch (String(status).trim()) {
|
||||
case '1':
|
||||
return 'OUT_WAREHOUSE';
|
||||
@@ -165,8 +169,6 @@ export class XiaofeixiaProvider implements ICourierProvider {
|
||||
case '3':
|
||||
case '4':
|
||||
return 'SHIPPING';
|
||||
case '5':
|
||||
return 'PENDING_RECEIVE';
|
||||
case '7':
|
||||
return null;
|
||||
default:
|
||||
|
||||
Reference in New Issue
Block a user