hejianhao
2026-05-25 f3c199537d5ab1f4880e5fdcaa1f0a3672a6be67
refactor(robotaxi): 提取共享的getOrderId工具并统一订单ID获取逻辑
1个文件已添加
10个文件已修改
71 ■■■■■ 已修改文件
src/robotaxi/pages/begin-route/components/calling-car-modules/door-trunk-control.tsx 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/robotaxi/pages/begin-route/components/calling-car-modules/evaluation-card.tsx 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/robotaxi/pages/begin-route/components/calling-car-modules/temperature-control.tsx 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/robotaxi/pages/begin-route/components/calling-car-modules/use-trip-countdown.ts 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/robotaxi/pages/begin-route/components/evaluate-popup.tsx 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/robotaxi/pages/begin-route/hooks/use-order-cancel.ts 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/robotaxi/pages/begin-route/hooks/use-order-payment.ts 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/robotaxi/pages/begin-route/hooks/use-web-socket-events.ts 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/robotaxi/pages/begin-route/index.tsx 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/robotaxi/pages/order/detail/index.tsx 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/robotaxi/utils/order.ts 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/robotaxi/pages/begin-route/components/calling-car-modules/door-trunk-control.tsx
@@ -2,6 +2,7 @@
import { View, Image } from "@tarojs/components";
import { useState, useRef, useEffect } from "react";
import { unlockVehicle, queryVehicleTrunkOpenStatus } from '../../../../api/begin-route';
import { getOrderId } from '../../../../utils/order';
import { TripStatus } from '../../constants/trip-status';
type Props = {
@@ -68,7 +69,7 @@
    // 解锁车门/后备箱,后备箱场景会轮询确认结果
    const handleUnlock = async (doorType: 'door' | 'trunk', onSuccess?: () => void) => {
        const targetOrderId = orderId || Taro.getStorageSync('orderId');
        const targetOrderId = getOrderId(orderId);
        if (!targetOrderId) return;
        
        const locationPayload = await getUnlockLocationPayload();
src/robotaxi/pages/begin-route/components/calling-car-modules/evaluation-card.tsx
@@ -2,6 +2,7 @@
import { View, Image, Text } from "@tarojs/components";
import { useState, useEffect, useRef } from "react";
import { submitOrderComment } from '../../../../api/begin-route';
import { getOrderId } from '../../../../utils/order';
import { TripStatus } from '../../constants/trip-status';
type Props = {
@@ -57,7 +58,7 @@
            handleOpenEvaluatePopup?.();
            return;
        }
        const targetOrderId = orderId || Taro.getStorageSync('orderId');
        const targetOrderId = getOrderId(orderId);
        if (!targetOrderId) {
            Taro.showToast({ title: '订单信息缺失,无法提交评价', icon: 'none' });
            return;
src/robotaxi/pages/begin-route/components/calling-car-modules/temperature-control.tsx
@@ -7,6 +7,7 @@
    queryVehicleAirConditionerSwitch,
    setTemperature
} from '../../../../api/begin-route';
import { getOrderId } from '../../../../utils/order';
import { TripStatus } from '../../constants/trip-status';
import { MODIFY_DESTINATION_SKIP_AC_QUERY_ON_RETURN_KEY } from '../../constants/modify-destination';
@@ -105,7 +106,7 @@
        if (skipQueryOnThisCycleRef.current) {
            return;
        }
        const targetOrderId = orderId || Taro.getStorageSync('orderId');
        const targetOrderId = getOrderId(orderId);
        if (!targetOrderId) {
            return;
        }
@@ -126,7 +127,7 @@
        if (skipQueryOnThisCycleRef.current) {
            return;
        }
        const targetOrderId = String(orderId || Taro.getStorageSync('orderId') || '');
        const targetOrderId = getOrderId(orderId);
        if (!targetOrderId) {
            return;
        }
@@ -150,7 +151,7 @@
            clearTimeout(tempTimerRef.current);
        }
        tempTimerRef.current = setTimeout(() => {
            const targetOrderId = orderId || Taro.getStorageSync('orderId');
            const targetOrderId = getOrderId(orderId);
            if (!targetOrderId) {
                return;
            }
@@ -209,7 +210,7 @@
        if (!canToggleSwitch) {
            return;
        }
        const targetOrderId = String(orderId || Taro.getStorageSync('orderId') || '');
        const targetOrderId = getOrderId(orderId);
        if (!targetOrderId) {
            return;
        }
src/robotaxi/pages/begin-route/components/calling-car-modules/use-trip-countdown.ts
@@ -2,6 +2,7 @@
import { useState, useEffect, useRef, useCallback } from 'react';
import { getRemainingSeconds, parseFlexibleEndTimeMs } from '../../../../../utils/Robotaxi-public-method';
import { getWaitTime, queryOrderFinishTime, cancelOrder, queryFareBreakdown } from '../../../../api/begin-route';
import { getOrderId } from '../../../../utils/order';
import { TripStatus } from '../../constants/trip-status';
type Props = {
@@ -17,7 +18,7 @@
const PICKUP_END_TIME_KEY = 'pickupEndTime';
const FINISH_END_TIME_KEY = 'finishEndTime';
const getTargetOrderId = (orderId?: string) => orderId || Taro.getStorageSync('orderId');
const getTargetOrderId = (orderId?: string) => getOrderId(orderId);
export default function useTripCountdown({
    tripStatus,
src/robotaxi/pages/begin-route/components/evaluate-popup.tsx
@@ -4,6 +4,7 @@
import './css-folder/evaluate-popup.less'
import { getOrderCommentType, submitComplaint, submitOrderComment } from '../../../api/begin-route';
import { _ROBOTAXI_HOST } from '../../../../constants/api';
import { getOrderId } from '../../../utils/order';
type Props = {
    show?: boolean;
@@ -64,7 +65,7 @@
            });
            return;
        }
        const targetOrderId = orderId || Taro.getStorageSync('orderId');
        const targetOrderId = getOrderId(orderId);
        if (!targetOrderId) {
            Taro.showToast({
                title: '订单信息缺失,无法提交评价',
src/robotaxi/pages/begin-route/hooks/use-order-cancel.ts
@@ -1,6 +1,7 @@
import Taro from '@tarojs/taro';
import { clearOrderTripStorage } from '../../../../utils/Robotaxi-public-method';
import { cancelOrder } from '../../../api/begin-route';
import { getOrderId } from '../../../utils/order';
import { TripStatus } from '../constants/trip-status';
import { OrderActionsDeps } from './use-order-actions.shared';
@@ -71,7 +72,7 @@
   * 上车倒计时超时后发起自动取消,并记录取消前真实状态供 socket 确认时复用。
   */
  const handlePickupTimeoutAutoCancel = () => {
    const targetOrderId = String(deps.orderId || Taro.getStorageSync('orderId') || '');
    const targetOrderId = getOrderId(deps.orderId);
    deps.pendingCancelContextRef.current = {
      orderId: targetOrderId,
      tripStatus: deps.tripStatus,
@@ -120,7 +121,7 @@
      return;
    }
    const targetOrderId = deps.orderId || Taro.getStorageSync('orderId');
    const targetOrderId = getOrderId(deps.orderId);
    if (!targetOrderId) {
      restartPlanningRoute();
      return;
src/robotaxi/pages/begin-route/hooks/use-order-payment.ts
@@ -1,6 +1,7 @@
import Taro from '@tarojs/taro';
import { getOrderPayment, endOrder } from '../../../api/begin-route';
import { getOrderDistance } from '../../../api/select-map-site';
import { getOrderId } from '../../../utils/order';
import { TripStatus } from '../constants/trip-status';
import { OrderActionsDeps } from './use-order-actions.shared';
@@ -21,7 +22,7 @@
  /**
   * 读取当前订单 ID。
   */
  const getTargetOrderId = () => deps.orderId || Taro.getStorageSync('orderId');
  const getTargetOrderId = () => getOrderId(deps.orderId);
  /**
   * 同步支付成功态。
src/robotaxi/pages/begin-route/hooks/use-web-socket-events.ts
@@ -4,6 +4,7 @@
import { queryVehicleByOrderId } from '../../../api/begin-route';
import { clearOrderTripStorage, safeParse } from '../../../../utils/Robotaxi-public-method';
import { normalizeDistanceKm, normalizeDurationSeconds } from '../../../../robotaxi/utils/format';
import { getOrderId } from '../../../utils/order';
import { toTripStatus, TripStatus } from '../constants/trip-status';
import { PENDING_CANCEL_CONTEXT_TTL_MS, PendingCancelContext } from './use-order-actions.shared';
import { normalizeSocketRouteSnapshot, normalizeSpeedMps } from './runtime-sync';
@@ -62,7 +63,7 @@
};
const resolveOrderId = (payload: any, fallbackOrderId: string) =>
    payload?.content?.orderId || payload?.orderId || fallbackOrderId || Taro.getStorageSync('orderId');
    getOrderId(payload?.content?.orderId || payload?.orderId || fallbackOrderId);
// 解析“上一单乘客下车点”坐标,兼容顶层字段、content 字段与历史大小写差异。
const parseBeforeUserEndSite = (payload: any) => {
@@ -242,7 +243,7 @@
) => {
    const changeStatusOld = deps.tripStatusRef.current;
    const pendingCancelContext = getValidPendingCancelContext(deps);
    const currentOrderId = deps.orderId || Taro.getStorageSync('orderId') || pendingCancelContext?.orderId || '';
    const currentOrderId = getOrderId(deps.orderId) || pendingCancelContext?.orderId || '';
    const incomingOrderId = payload?.content?.orderId || payload?.orderId;
    if (!isSameOrder(incomingOrderId, currentOrderId)) {
        return;
@@ -335,7 +336,7 @@
        syncVehiclePointOnly(routeSnapshot, deps);
        return;
    }
    const currentOrderId = String(deps.orderId || Taro.getStorageSync('orderId') || '');
    const currentOrderId = getOrderId(deps.orderId);
    if (routeSnapshot.vehicleMoveAlongPoints.length > 1) {
        writePassedRouteCache(currentOrderId, routeSnapshot.vehicleMoveAlongPoints);
    }
@@ -395,8 +396,8 @@
        };
        orderUpdatePriceHandlerRef.current = (payload) => {
            const currentDeps = depsRef.current;
            const incomingOrderId = payload?.orderId || payload?.content?.orderId || Taro.getStorageSync('orderId');
            const currentOrderId = currentDeps.orderId || Taro.getStorageSync('orderId');
            const incomingOrderId = getOrderId(payload?.orderId || payload?.content?.orderId);
            const currentOrderId = getOrderId(currentDeps.orderId);
            if (!isSameOrder(incomingOrderId, currentOrderId)) {
                return;
            }
@@ -404,8 +405,8 @@
        };
        orderReassignHandlerRef.current = (payload) => {
            const currentDeps = depsRef.current;
            const incomingOrderId = payload?.orderId || payload?.content?.orderId || Taro.getStorageSync('orderId');
            const currentOrderId = currentDeps.orderId || Taro.getStorageSync('orderId');
            const incomingOrderId = getOrderId(payload?.orderId || payload?.content?.orderId);
            const currentOrderId = getOrderId(currentDeps.orderId);
            if (!isSameOrder(incomingOrderId, currentOrderId)) {
                return;
            }
@@ -413,7 +414,7 @@
            const requestedOrderId = String(currentOrderId || '');
            queryVehicleByOrderId({ orderId: currentOrderId })
                .then((res: any) => {
                    const latestOrderId = String((depsRef.current.orderId || Taro.getStorageSync('orderId') || ''));
                    const latestOrderId = getOrderId(depsRef.current.orderId);
                    if (!requestedOrderId || latestOrderId !== requestedOrderId) {
                        return;
                    }
@@ -423,8 +424,8 @@
        };
        updateEndAddressStatusHandlerRef.current = (payload) => {
            const currentDeps = depsRef.current;
            const incomingOrderId = payload?.content?.orderId || Taro.getStorageSync('orderId');
            const currentOrderId = currentDeps.orderId || Taro.getStorageSync('orderId');
            const incomingOrderId = getOrderId(payload?.content?.orderId);
            const currentOrderId = getOrderId(currentDeps.orderId);
            if (!isSameOrder(incomingOrderId, currentOrderId)) {
                return;
            }
src/robotaxi/pages/begin-route/index.tsx
@@ -51,6 +51,7 @@
import { getDistance } from '../../../utils/Robotaxi-public-method';
import { CurrentUserLocation } from './hooks/use-route-manager.shared';
import { MODIFY_DESTINATION_SESSION_KEY } from './constants/modify-destination';
import { getOrderId } from '../../utils/order';
import { _ROBOTAXI_WS_HOST } from '../../../constants/api';
@@ -835,7 +836,7 @@
    pageDidShowVersion,
    requestRouteAndFare: routeRequestRouteAndFare
  });
  const shareOrderId = orderId || Taro.getStorageSync('orderId') || '';
  const shareOrderId = getOrderId(orderId);
  const onShareAppMessage = () => ({
    title: `我正在使用小鹏Robotaxi,车牌号[${vehicleInfo?.plateNumber || ''}]`,
src/robotaxi/pages/order/detail/index.tsx
@@ -6,6 +6,7 @@
import EvaluatePopup from '../../begin-route/components/evaluate-popup';
import { submitOrderComment } from '../../../api/begin-route';
import { formatTripDistance, formatTripDurationFromSeconds, safeParse } from '../../../../utils/Robotaxi-public-method';
import { getOrderId } from '../../../utils/order';
export default function orderDetailPage() {
  const router = useRouter();
@@ -229,7 +230,7 @@
      handleOpenEvaluatePopup();
      return;
    }
    const targetOrderId = orderId || Taro.getStorageSync('orderId');
    const targetOrderId = getOrderId(orderId);
    if (!targetOrderId) {
      Taro.showToast({ title: '订单信息缺失,无法提交评价', icon: 'none' });
      return;
src/robotaxi/utils/order.ts
New file
@@ -0,0 +1,15 @@
import Taro from '@tarojs/taro';
/**
 * 获取当前订单 ID,优先使用显式传入值,缺失时再从本地缓存兜底读取。
 */
export function getOrderId(explicitId?: string): string {
  if (explicitId) {
    return explicitId;
  }
  try {
    return Taro.getStorageSync('orderId') || '';
  } catch {
    return '';
  }
}