更新
This commit is contained in:
@@ -162,6 +162,76 @@ class ExpressTrackingService
|
||||
return $stats;
|
||||
}
|
||||
|
||||
/**
|
||||
* 甘草路由不可用时的降级:按业务订单运单号走快递100 查询并落库(自发货等场景)
|
||||
*
|
||||
* @return array{
|
||||
* success: bool,
|
||||
* message: string,
|
||||
* traces_count: int,
|
||||
* state: string,
|
||||
* source: string,
|
||||
* assistant_sync?: array|null
|
||||
* }
|
||||
*/
|
||||
public static function queryKuaidiForPrescriptionOrder(PrescriptionOrder $order, bool $isAuto = true): array
|
||||
{
|
||||
$fail = static fn (string $msg): array => [
|
||||
'success' => false,
|
||||
'message' => $msg,
|
||||
'traces_count' => 0,
|
||||
'state' => '',
|
||||
'source' => 'kuaidi100_fallback',
|
||||
'assistant_sync' => null,
|
||||
];
|
||||
|
||||
$tn = trim((string) ($order->tracking_number ?? ''));
|
||||
if ($tn === '') {
|
||||
return $fail('甘草无快递任务且业务单未填写快递单号,无法走快递100');
|
||||
}
|
||||
|
||||
$tracking = self::resolveTrackingByNumber($tn);
|
||||
if (!$tracking) {
|
||||
return $fail('未找到运单对应的物流追踪记录');
|
||||
}
|
||||
|
||||
self::backfillRecipientPhoneFromPrescriptionOrder($tracking);
|
||||
self::syncTrackingExpressCompanyFromNumber($tracking);
|
||||
|
||||
try {
|
||||
$result = self::queryAndUpdate((int) $tracking->id, $isAuto);
|
||||
$ok = self::isKuaidiQuerySuccessful($result);
|
||||
$tracking = ExpressTracking::where('id', (int) $tracking->id)->whereNull('delete_time')->find();
|
||||
$state = $tracking ? (string) ($tracking->current_state ?? '') : '';
|
||||
$hint = trim((string) ($result['hint'] ?? ''));
|
||||
$message = $ok
|
||||
? 'ok(甘草无快递任务,已降级快递100)'
|
||||
: ($hint !== '' ? $hint : '快递100 查询未返回有效轨迹');
|
||||
|
||||
$assistantSync = null;
|
||||
if (is_array($result) && isset($result['_assistant_sync']) && is_array($result['_assistant_sync'])) {
|
||||
$assistantSync = $result['_assistant_sync'];
|
||||
}
|
||||
|
||||
return [
|
||||
'success' => $ok,
|
||||
'message' => $message,
|
||||
'traces_count' => count($result['traces'] ?? []),
|
||||
'state' => $state,
|
||||
'source' => 'kuaidi100_fallback',
|
||||
'assistant_sync' => $assistantSync,
|
||||
];
|
||||
} catch (\Throwable $e) {
|
||||
Log::error('queryKuaidiForPrescriptionOrder failed', [
|
||||
'order_id' => (int) $order->id,
|
||||
'tracking_number' => $tn,
|
||||
'error' => $e->getMessage(),
|
||||
]);
|
||||
|
||||
return $fail('快递100 降级异常:' . $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 确保 express_tracking 存在(不发起查询)
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user