puzhibing
2026-08-21 3f6d5b788670170da195be8d8cee814069b3b224
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
package com.xiaopeng.admin.support;
 
import com.xiaopeng.api.vo.commandCenter.CommandCenterRouteInfoVo;
import com.xiaopeng.api.vo.commandCenter.CommandCenterVehicleDetailVo;
 
/**
 * 指挥中心 Mock 单车详情
 *
 * @ClassName CommandCenterMockDetailSupport
 * @Description mock 车辆 99901~99908 详情数据
 */
public final class CommandCenterMockDetailSupport {
 
    private static final long MOCK_VEHICLE_ID_MIN = 99901L;
    private static final long MOCK_VEHICLE_ID_MAX = 99908L;
 
    private CommandCenterMockDetailSupport() {
    }
 
    /**
     * 是否为 mock 车辆 ID
     *
     * @param vehicleId 车辆 ID
     * @return 是否 mock
     */
    public static boolean isMockVehicleId(Long vehicleId) {
        return vehicleId != null && vehicleId >= MOCK_VEHICLE_ID_MIN && vehicleId <= MOCK_VEHICLE_ID_MAX;
    }
 
    /**
     * 构建 mock 单车详情
     *
     * @param vehicleId 车辆 ID
     * @return 详情,非 mock ID 返回 null
     */
    public static CommandCenterVehicleDetailVo buildMockVehicleDetail(Long vehicleId) {
        if (!isMockVehicleId(vehicleId)) {
            return null;
        }
        switch (vehicleId.intValue()) {
            case 99901:
                return build(99901L, "MOCK_VIN_CRUISING", "粤A MOCK01",
                        "CRUISING", "巡游中", "CRUISING", 113.3245, 23.1091, 85, 3, null);
            case 99902:
                return build(99902L, "MOCK_VIN_PICKUP", "粤A MOCK02",
                        "HAS_ORDER", "接驾中", "PICK_UP", 113.3210, 23.1190, 72, 2,
                        route(113.3245, 23.1091, 113.3210, 23.1190, "广州塔", "珠江新城"));
            case 99903:
                return build(99903L, "MOCK_VIN_DROPOFF", "粤A MOCK03",
                        "HAS_ORDER", "送驾中", "DROP_OFF", 113.3500, 23.1020, 65, 6,
                        route(113.3500, 23.1020, 113.3560, 23.1270, "琶洲西", "天河公园"));
            case 99904:
                return build(99904L, "MOCK_VIN_CHARGING", "粤A MOCK04",
                        "OCCUPIED", "充电中", "CHARGING", 113.3180, 23.0985, 45, 1, null);
            case 99905:
                return build(99905L, "MOCK_VIN_PREPARING", "粤A MOCK05",
                        "OCCUPIED", "整备中", "PREPARING", 113.3150, 23.1380, 90, 0, null);
            case 99906:
                return build(99906L, "MOCK_VIN_RETURNING", "粤A MOCK06",
                        "OCCUPIED", "回场中", "RETURNING", 113.2690, 23.0028, 55, 4, null);
            case 99907:
                return build(99907L, "MOCK_VIN_ABNORMAL", "粤A MOCK07",
                        "ABNORMAL", "车辆异常", "ABNORMAL", 113.2730, 23.1650, 30, 2, null);
            case 99908:
                return build(99908L, "MOCK_VIN_ODDOUT", "粤A MOCK08",
                        "ABNORMAL", "ODD越界", "ODD_OUT", 113.3560, 23.1270, 60, 0, null);
            default:
                return null;
        }
    }
 
    private static CommandCenterVehicleDetailVo build(Long vehicleId, String vin, String plateNumber,
                                                      String monitorGroup, String monitorStatus, String stateCode,
                                                      double lon, double lat, int electricity,
                                                      int todayCompletedOrders, CommandCenterRouteInfoVo routeInfo) {
        CommandCenterVehicleDetailVo detail = new CommandCenterVehicleDetailVo();
        detail.setVehicleId(vehicleId);
        detail.setVin(vin);
        detail.setPlateNumber(plateNumber);
        detail.setMonitorGroup(monitorGroup);
        detail.setMonitorStatus(monitorStatus);
        detail.setStateCode(stateCode);
        detail.setCurrentElectricity(electricity);
        detail.setCurrentLon(lon);
        detail.setCurrentLat(lat);
        detail.setTodayCompletedOrders(todayCompletedOrders);
        detail.setRouteInfo(routeInfo);
        return detail;
    }
 
    private static CommandCenterRouteInfoVo route(double startLon, double startLat, double endLon, double endLat,
                                                  String startAddress, String endAddress) {
        CommandCenterRouteInfoVo routeInfo = new CommandCenterRouteInfoVo();
        routeInfo.setStartLon(startLon);
        routeInfo.setStartLat(startLat);
        routeInfo.setEndLon(endLon);
        routeInfo.setEndLat(endLat);
        routeInfo.setStartAddress(startAddress);
        routeInfo.setEndAddress(endAddress);
        return routeInfo;
    }
}