From ccbe2026374ad2d69ec94f8bc0eae0b0d33ac88a Mon Sep 17 00:00:00 2001 From: API Changelog Bot Date: Sun, 12 Jul 2026 17:29:01 +0800 Subject: [PATCH] =?UTF-8?q?docs(fleet):=20=E8=A1=A5=E9=BD=904882=E6=B4=BE?= =?UTF-8?q?=E5=8D=95=E7=9C=8B=E6=9D=BF=E5=A5=91=E7=BA=A6=E4=B8=8E=E9=AA=8C?= =?UTF-8?q?=E6=94=B6=E8=AF=81=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...¿å½“å‰è®¢å•字段统计行程与ä¿é™©äº‹åŠ¡æ”¶å£-管ç†åŽå°.md | 529 ++++++++++++++++++ 1 file changed, 529 insertions(+) create mode 100644 changelogs-v2/2026-07/57_4882_车务派å•看æ¿å½“å‰è®¢å•字段统计行程与ä¿é™©äº‹åŠ¡æ”¶å£-管ç†åŽå°.md diff --git a/changelogs-v2/2026-07/57_4882_车务派å•看æ¿å½“å‰è®¢å•字段统计行程与ä¿é™©äº‹åŠ¡æ”¶å£-管ç†åŽå°.md b/changelogs-v2/2026-07/57_4882_车务派å•看æ¿å½“å‰è®¢å•字段统计行程与ä¿é™©äº‹åŠ¡æ”¶å£-管ç†åŽå°.md new file mode 100644 index 0000000..7a62ed9 --- /dev/null +++ b/changelogs-v2/2026-07/57_4882_车务派å•看æ¿å½“å‰è®¢å•字段统计行程与ä¿é™©äº‹åŠ¡æ”¶å£-管ç†åŽå°.md @@ -0,0 +1,529 @@ +# ã€å‰ç«¯å¯¹æŽ¥Â·ç®¡ç†åŽå°ã€‘车务派å•看æ¿å½“å‰è®¢å•字段ã€ç»Ÿè®¡ã€è¡Œç¨‹ä¸Žä¿é™©äº‹åŠ¡æ”¶å£ + +> Issue: [wx/HL#4882](https://git.1814.love:8443/wx/HL/issues/4882) +> PR: [wx/HL#4897](https://git.1814.love:8443/wx/HL/pulls/4897) / [wx/HL#4898](https://git.1814.love:8443/wx/HL/pulls/4898) / [wx/HL#4920](https://git.1814.love:8443/wx/HL/pulls/4920) +> æœåŠ¡: `hl-fleet-service` / `hl-order-service-v3` / `hl-user-service` +> 日期: 2026-07-12 +> å½±å“范围: 车务派å•看æ¿ã€æ´¾å•弹窗详情ã€çжæ€ç»Ÿè®¡ã€ç­›é€‰ã€é€æ—¥è¡Œç¨‹ã€å¸æœºé™©è‡ªåŠ¨æŠ•é€€ä¿å¯é æ€§ + +## 1. 对接结论 + +- æ´¾å•看æ¿ç»§ç»­ä½¿ç”¨åˆ†é¡µæŽ¥å£ï¼Œé»˜è®¤ `page=1&pageSize=20`,`pageSize` 最大 100ï¼›ä¸è¦ä¸€æ¬¡æ€§å…¨é‡æ‹‰å–。 +- 看æ¿å¡ç‰‡ã€ç­›é€‰å’Œè¯¦æƒ…以 order-v3 çš„**当å‰è®¢å•**åŠ**å½“å‰ active 用车需求**为æƒå¨æ•°æ®æºï¼Œä¸å†ä½¿ç”¨æ—§æ´¾å•快照覆盖当å‰å›¢å·ã€è”系人ã€å®šåˆ¶å¸ˆã€æ—¥æœŸæˆ–诉求。 +- 汇总和列表使用åŒä¸€å¥—“当å‰éœ€æ±‚ + 派车组状æ€â€æŠ•影。`summary.statusOptions[].count` 必须和对应状æ€åˆ—表的 `total` 一致。 +- 日期筛选ã€ç´§æ€¥æ€ã€æŽ’åºã€è¯¦æƒ…èµ·æ­¢æ—¥æœŸå’Œé€æ—¥è¡Œç¨‹å‡ä½¿ç”¨å½“å‰è®¢å•档期;改期åŽä¸å¾—展示旧日期。 +- `itinerary.days` æ¥è‡ª `order_itinerary_day`,一天一æ¡ï¼›æ— æœ‰æ•ˆé€æ—¥è¡Œç¨‹æ—¶è¿”回空数组,ä¸ç”Ÿæˆä¼ªæ•°æ®ã€‚ +- 定制师显示优先使用 `consultantDisplayName`ï¼›åŽç«¯å·²æŒ‰ä¼ä¸šå¾®ä¿¡æ˜µç§°ä¼˜å…ˆã€ç”¨æˆ·å兜底处ç†ã€‚ +- å‰ç«¯ä¸è¦è‡ªå·±æ˜ å°„车务状æ€ä¸­æ–‡ï¼Œä¹Ÿä¸è¦è‡ªè¡Œè®¡ç®—èƒ½å¦æ´¾è½¦/驳回;直接使用åŽç«¯è¿”回的 `statusOptions`ã€`assignmentStatusLabel`ã€`canAssign`ã€`canRejectRequirement`。 +- 叿œºé™©å¯é æ€§æœ¬è½®æ²¡æœ‰æ–°å¢žç®¡ç†åŽå°è¯·æ±‚å­—æ®µã€‚æ´¾å• `ASSIGNED/RESTORED/CANCELED/COMPLETED` 与ä¿é™©åŠ¨ä½œæ”¹ä¸ºäº‹åŠ¡ Outbox,并由 user å¾®æœåŠ¡æ—¢æœ‰ Quartz æ¡†æž¶é‡æ”¾å…œåº•。 + +## 2. æŽ¥å£æ¸…å• + +| # | æŽ¥å£ | 方法 | 路径 | 本轮契约 | +|---|------|------|------|----------| +| 1 | æ´¾å•çœ‹æ¿æ±‡æ€» | GET | `/admin/fleet/board/summary` | 六项概览ã€å…¨çжæ€è®¡æ•°å’ŒçŠ¶æ€æ–‡æ¡ˆç»Ÿä¸€ç”±åŽç«¯è¿”回 | +| 2 | æ´¾å•看æ¿åˆ—表 | GET | `/admin/fleet/board/orders` | 当å‰è®¢å•字段ã€ç»„åˆç­›é€‰ã€ç¡®å®šæ€§æŽ’åºã€åˆ†é¡µæ€»æ•°æ”¶å£ | +| 3 | æ´¾å•看æ¿è¯¦æƒ… | GET | `/admin/fleet/board/orders/{orderId}` | 当å‰è®¢å•ã€å½“å‰éœ€æ±‚ã€é€æ—¥è¡Œç¨‹ã€å¤§äº¤é€šã€åŠ¨æ€æ­¥éª¤å’Œæ“作记录一次返回 | +| 4 | æ´¾å•æ—¶é—´çº¿ | GET | `/admin/fleet/board/orders/{orderId}/timeline` | 派车域已å‘生事件,按时间å‡åºè¿”回 | +| 5 | Outbox 釿”¾ | POST | `/internal/fleet/jobs/assignment-insurance-outbox/replay` | ä»… user Quartz ç»å†…部 Feign 调用,ä¸å¯¹å‰ç«¯å¼€æ”¾ | + +## 3. æ´¾å•çœ‹æ¿æ±‡æ€» + +### 3.1 请求 + +```http +GET /admin/fleet/board/summary +Authorization: Bearer +``` + +æ— è¯·æ±‚å‚æ•°ã€‚ + +### 3.2 å“应示例 + +```json +{ + "code": 200, + "message": "æˆåŠŸ", + "success": true, + "data": { + "pendingCount": 26, + "pendingUrgentCount": 4, + "todayDepartCount": 2, + "idleVehicleCount": 9, + "idleDriverCount": 5, + "holdingTimeoutCount": 1, + "statusCounts": { + "unassigned": 26, + "holding": 2, + "assigned": 8, + "changeRequested": 0, + "completed": 32, + "canceled": 43, + "unassignedUrgent": 4, + "holdingUrgent": 1 + }, + "statusOptions": [ + { + "value": "unassigned", + "label": "待派车", + "description": "å·²æå‡ºæœ‰æ•ˆç”¨è½¦éœ€æ±‚,车务尚未派车", + "count": 26, + "urgentCount": 4 + }, + { + "value": "holding", + "label": "排车中", + "description": "è½¦åŠ¡å·²æ´¾è½¦ï¼Œå¸æœºæœªå›žå¤ç¡®è®¤", + "count": 2, + "urgentCount": 1 + }, + { + "value": "assigned", + "label": "已派车", + "description": "叿œºå·²ç¡®è®¤ï¼Œæ´¾è½¦å·²ç”Ÿæ•ˆ", + "count": 8, + "urgentCount": 0 + }, + { + "value": "change_requested", + "label": "æ¢è½¦è¯·æ±‚", + "description": "客户或车务æå‡ºæ¢è½¦å¾…处ç†", + "count": 0, + "urgentCount": 0 + }, + { + "value": "completed", + "label": "已完结", + "description": "用车行程已完结", + "count": 32, + "urgentCount": 0 + }, + { + "value": "canceled", + "label": "已喿¶ˆ", + "description": "æ´¾è½¦éœ€æ±‚å·²å–æ¶ˆ", + "count": 43, + "urgentCount": 0 + } + ] + } +} +``` + +> 上述数字仅用于说明å“åº”ç»“æž„ï¼Œä¸æ˜¯å›ºå®šä¸šåŠ¡å€¼ã€‚é¡µé¢æ¯æ¬¡è¯»å–接å£å®žæ—¶ç»“果。 + +### 3.3 一致性规则 + +```text +statusOptions[value=unassigned].count + == 未附加其他筛选时 GET /admin/fleet/board/orders?statuses=unassigned 返回的 data.total +``` + +- ç»Ÿè®¡ç»´åº¦æ˜¯æ´¾è½¦ç»„ï¼Œä¸æ˜¯æ•°æ®åº“逿—¥åˆ‡ç‰‡è¡Œæ•°ã€‚ +- åŒè®¢å•旧需求ã€å·²å¤±æ•ˆéœ€æ±‚和孤儿派å•ä¸è®¡å…¥å½“å‰çœ‹æ¿ã€‚ +- `pendingCount` 与 `statusCounts.unassigned` 是åŒä¸€ä¸šåŠ¡å£å¾„ï¼›å‰ç«¯å¯äºŒé€‰ä¸€å±•示,ä¸è¦ç›¸åŠ ã€‚ +- 状æ€ç­›é€‰å€¼ã€ä¸­æ–‡åå’Œæ€¥å•æ•°ç›´æŽ¥è¯»å– `statusOptions`,å‰ç«¯ä¸å¾—维护独立枚举文案。 + +## 4. æ´¾å•看æ¿åˆ—表 + +### 4.1 请求示例 + +```http +GET /admin/fleet/board/orders?page=1&pageSize=20&statuses=unassigned,holding&startDate=2026-07-01&endDate=2026-07-31&typeKeys=suv&keyword=7218&consultantId=2021059720172838914 +Authorization: Bearer +``` + +### 4.2 æŸ¥è¯¢å‚æ•° + +| 傿•° | 类型 | å¿…å¡« | 规则 | +|------|------|------|------| +| `page` | int | å¦ | 默认 1。 | +| `pageSize` | int | å¦ | 默认 20,最大 100。 | +| `statuses` | string[] | å¦ | 多状æ€ä»»ä¸€å‘½ä¸­ï¼›æ”¯æŒé‡å¤ query 傿•°æˆ–逗å·åˆ†éš”。 | +| `status` | string | å¦ | 兼容å•状æ€/逗å·åˆ†éš”写法,与 `statuses` åˆå¹¶ã€‚ | +| `startDayFrom` / `startDate` | date | å¦ | æ—¥æœŸèµ·ï¼Œä¸¤ä¸ªå‚æ•°æ˜¯åˆ«å;与当å‰è¡Œç¨‹åŒºé—´åšé‡å åŒ¹é…。 | +| `startDayTo` / `endDate` | date | å¦ | æ—¥æœŸæ­¢ï¼Œä¸¤ä¸ªå‚æ•°æ˜¯åˆ«å;与当å‰è¡Œç¨‹åŒºé—´åšé‡å åŒ¹é…。 | +| `vehicleTypeKeys` / `typeKeys` | string[] | å¦ | 车型大类多选。未派按当å‰éœ€æ±‚车型,已派按实际车辆大类。 | +| `driverName` | string | å¦ | 叿œºå§“忍¡ç³ŠåŒ¹é…。 | +| `keyword` | string | å¦ | 统一包å«åŒ¹é…ï¼šå¸æœºã€è”系人/客户ã€å›¢å·ã€è®¢å•å·ã€‚ | +| `contactName` / `contactKeyword` | string | å¦ | è”系人/å®¢æˆ·åæ¨¡ç³ŠåŒ¹é…。 | +| `teamNo` | string | å¦ | 团å·åŒ…å«åŒ¹é…,例如 `7218` å¯å‘½ä¸­ `26-7218`。 | +| `consultantId` | string | å¦ | 当å‰è´Ÿè´£å®šåˆ¶å¸ˆ ID 精确匹é…,值æ¥è‡ªå®šåˆ¶å¸ˆä¸‹æ‹‰ã€‚ | +| `plannerName` / `consultantName` | string | å¦ | æ—§å‰ç«¯å…¼å®¹çš„定制师文本筛选;新页é¢ä½¿ç”¨ `consultantId`。 | +| `variant` | string | å¦ | `list`(默认)或 `grid`ï¼›å…¶ä»–å€¼è¿”å›žå‚æ•°é”™è¯¯ã€‚ | + +状æ€å€¼ï¼š + +```text +unassigned / unassigned_urgent / holding / holding_urgent / +assigned / change_requested / canceled / completed +``` + +其中: + +- `holding` 的业务å«ä¹‰æ˜¯â€œæŽ’车中â€ï¼Œå³è½¦åŠ¡å·²æ´¾å¸æœºã€å¸æœºå°šæœªç¡®è®¤ã€‚ +- `unassigned_urgent` å’Œ `holding_urgent` 是åŽç«¯å®žæ—¶æ´¾ç”Ÿæ€ï¼Œä¸æ˜¯ç‹¬ç«‹è½åº“状æ€ã€‚ +- `change_requested` 当剿— ç‹¬ç«‹æ¢è½¦è¯·æ±‚表时å¯èƒ½æ’为空;å‰ç«¯ä»æŒ‰ `statusOptions` 渲染。 + +### 4.3 å“应示例 + +```json +{ + "code": 200, + "message": "æˆåŠŸ", + "success": true, + "data": { + "page": 1, + "pageSize": 20, + "total": 1, + "records": [ + { + "id": "HL20260708144557879", + "orderNo": "HL20260708144557879", + "orderId": "2074746808742928386", + "teamNo": "26-7218", + "unreadMessageCount": 0, + "assignmentId": "2075001000000000001", + "assignmentGroupId": "2075001000000000001", + "fleetItemIndex": 0, + "customerName": "何å­å¢¨", + "contactName": "何å­å¢¨", + "productName": "测试核心产å“-啿¡£-固定订金", + "headcount": 2, + "adultCount": 2, + "childCount": 0, + "youngChildCount": 0, + "babyCount": 0, + "startDate": "2026-07-20", + "endDate": "2026-07-22", + "days": 3, + "pickupAt": "海拉尔东山机场", + "dropoffAt": "海拉尔站", + "isHailarPickup": true, + "isHailarDropoff": true, + "consultantId": "2021059720172838914", + "plannerName": "王éª", + "consultantName": "王éª", + "consultantDisplayName": "王éª", + "customerNote": "éœ€è¦æŽ¥é€æœº", + "vehicleAdvice": null, + "specialTags": ["大行æŽç©ºé—´", "有 WiFi"], + "requirementRemark": "接机åŽç›´æŽ¥å‰å¾€é…’店", + "requiredVehicles": [ + { + "vehicleType": "suv", + "categoryLabel": "SUV系列", + "seats": 5, + "count": 1 + } + ], + "assignmentStatus": "unassigned_urgent", + "assignmentStatusLabel": "待派车", + "currentVehiclePlate": null, + "currentVehicleModel": null, + "currentVehicleSeats": null, + "currentVehicleFleet": null, + "currentDriverName": null, + "currentDriverPhone": null, + "urgentBadge": "T-2", + "canAssign": true, + "canRejectRequirement": true + } + ] + } +} +``` + +### 4.4 å­—æ®µæ¥æºä¸Žå‰ç«¯ç”¨æ³• + +| å“应字段 | æƒå¨æ¥æº | å‰ç«¯è§„则 | +|----------|----------|----------| +| `orderNo/orderId` | å½“å‰ `order_main` | 雪花 ID 按字符串处ç†ã€‚ | +| `teamNo` | å½“å‰ `order_main.team_no` | æ²¡æœ‰å›¢å·æ—¶ä¸º `null`,ä¸è¦æ˜¾ç¤ºæ—§å¿«ç…§å›¢å·ã€‚ | +| `customerName/contactName` | 当å‰è®¢å•è”系人 | 两字段åŒå£å¾„,å¡ç‰‡ä¼˜å…ˆè¯» `contactName`。 | +| `headcount` 与四类人数 | 当å‰è®¢å•出行人统计 | ä¸ä»Žæ´¾å•æ•°é‡å推。 | +| `startDate/endDate/days` | 当å‰è®¢å•档期 | `days=endDate-startDate+1`,å«é¦–尾。 | +| `consultantId` | å½“å‰ `order_main.consultant_id` | 定制师下拉筛选值。 | +| `consultantDisplayName` | 当å‰å®šåˆ¶å¸ˆï¼Œä¼å¾®æ˜µç§°ä¼˜å…ˆ | å¡ç‰‡æ— æ¡ä»¶ç‹¬ç«‹å±•示,ä¸å¾—å—客户留言/车辆建议是å¦å­˜åœ¨å½±å“。 | +| `specialTags/requirementRemark` | å½“å‰ active 用车需求 | ä¸è¯»å–旧需求或派å•快照。 | +| `requiredVehicles` | 当å‰éœ€æ±‚车型项 | 车型筛选和å¡ç‰‡ chip 使用。 | +| `assignmentStatusLabel` | åŽç«¯çŠ¶æ€æŠ•å½± | å‰ç«¯ç›´æŽ¥å±•示。 | +| `canAssign` | åŽç«¯èƒ½åŠ›åˆ¤æ–­ | `true` æ‰æ˜¾ç¤ºæ´¾è½¦å…¥å£ã€‚ | +| `canRejectRequirement` | åŽç«¯èƒ½åŠ›åˆ¤æ–­ | `true` æ‰æ˜¾ç¤ºé©³å›žéœ€æ±‚;已产生有效派å•åŽä¸º `false`。 | + +排åºå›ºå®šä¸ºï¼šç´§æ€¥å¾…处ç†ç»„ç½®é¡¶ï¼Œæ™®é€šè¿›è¡Œä¸­æ¬¡ä¹‹ï¼Œç»ˆæ€æ²‰åº•,åŒä¼˜å…ˆçº§ä½¿ç”¨ç¨³å®š ID 兜底。å‰ç«¯ä¸è¦äºŒæ¬¡æ”¹åºï¼Œå¦åˆ™åˆ†é¡µé—´ä¼šå‡ºçŽ°è·³è¡Œæˆ–é‡å¤ã€‚ + +## 5. æ´¾å•看æ¿è¯¦æƒ… + +### 5.1 请求 + +```http +GET /admin/fleet/board/orders/2074746808742928386 +Authorization: Bearer +``` + +`orderId` æ˜¯æ•°å­—è®¢å• IDï¼Œä¸æ˜¯è®¢å•å·ã€‚ + +打开详情åŽï¼ŒåŽç«¯ä¼šå°è¯•æŠŠå½“å‰ active ç”¨è½¦éœ€æ±‚ä»Žå¾…å¤„ç†æŽ¨è¿›ä¸º `PROCESSING`ã€‚è½¦åŠ¡æ²¡æœ‰æŠ¢å•æ± ï¼Œä»»ä½•车务管ç†å‘˜éƒ½èƒ½å¤„ç†å…¨éƒ¨è½¦åŠ¡è®¢å•。 + +### 5.2 å“应示例 + +```json +{ + "code": 200, + "message": "æˆåŠŸ", + "success": true, + "data": { + "id": "HL20260708144557879", + "orderNo": "HL20260708144557879", + "teamNo": "26-7218", + "customerName": "何å­å¢¨", + "headcount": 2, + "adultCount": 2, + "childCount": 0, + "youngChildCount": 0, + "babyCount": 0, + "startDate": "2026-07-20", + "endDate": "2026-07-22", + "pickupAt": "海拉尔东山机场", + "dropoffAt": "海拉尔站", + "productName": "测试核心产å“-啿¡£-固定订金", + "plannerName": "王éª", + "consultantId": "2021059720172838914", + "consultantName": "王éª", + "consultantDisplayName": "王éª", + "plannerNote": null, + "customerNote": "éœ€è¦æŽ¥é€æœº", + "requirements": "接机åŽç›´æŽ¥å‰å¾€é…’店", + "vehicleAdvice": null, + "specialTags": ["大行æŽç©ºé—´", "有 WiFi"], + "requirementRemark": "接机åŽç›´æŽ¥å‰å¾€é…’店", + "itinerary": { + "theme": "è‰åŽŸæ·±åº¦ 3 æ—¥", + "route": "海拉尔 → é¢å°”å¤çº³ → 满洲里", + "days": [ + { + "dayNumber": 1, + "date": "2026-07-20", + "title": "海拉尔集åˆ", + "detail": "接机åŽå…¥ä½é…’店" + }, + { + "dayNumber": 2, + "date": "2026-07-21", + "title": "è‰åŽŸè¡Œç¨‹", + "detail": "å‰å¾€é¢å°”å¤çº³" + }, + { + "dayNumber": 3, + "date": "2026-07-22", + "title": "返程é€ç«™", + "detail": "é€å¾€æµ·æ‹‰å°”ç«™" + } + ] + }, + "transport": { + "transferTimeHint": null, + "arrive": null, + "depart": null, + "batches": [ + { + "travelerNames": "何å­å¢¨, æŽé™", + "transportNo": "CA1234", + "time": "2026-07-20 10:45:00", + "station": "海拉尔东山机场" + }, + { + "travelerNames": "何å­å¢¨, æŽé™", + "transportNo": "K1234", + "time": "2026-07-22 16:30:00", + "station": "海拉尔站" + } + ], + "pickupRequired": true + }, + "progressSteps": [ + { + "step": 1, + "code": "ORDER_DETAIL", + "label": "订å•详情", + "status": "DONE", + "statusLabel": "已完æˆ", + "active": false, + "time": "2026-07-12 16:22:14" + }, + { + "step": 2, + "code": "DISPATCH", + "label": "排车", + "status": "PROCESSING", + "statusLabel": "进行中", + "active": true, + "time": "2026-07-12 16:22:14" + } + ], + "operationLog": { + "records": [], + "total": 0, + "summary": { "totalCount": 0 } + }, + "currentAssignment": null, + "relatedDetailReady": true + } +} +``` + +### 5.3 逿—¥è¡Œç¨‹è§„则 + +- `itinerary.days[].date` å¿…é¡»è½åœ¨å½“å‰ `[startDate,endDate]` 内。 +- 改期åŽç”¨å½“å‰ `startDate + dayNumber - 1` 坹齿—¥æœŸï¼Œåކ岿—§æ¡£æœŸè¡Œä¸èƒ½ç»§ç»­å±•示。 +- `order_itinerary_day` 中越界ã€éžæ³• `dayNumber` 或é‡å¤æ—§ç‰ˆæœ¬æ•°æ®ä¼šè¢«è¿‡æ»¤ã€‚ +- ç»“æŸæ—¥å½“天是有效行程日,ä¸èƒ½è¯¯åˆ ã€‚ +- æ²¡æœ‰æœ‰æ•ˆé€æ—¥è¡Œç¨‹æ—¶ï¼š + +```json +{ + "itinerary": { + "theme": null, + "route": null, + "days": [] + } +} +``` + +å‰ç«¯æ˜¾ç¤ºâ€œæš‚æ— æ¯æ—¥è¡Œç¨‹â€ï¼Œä¸å¾—按总天数生æˆå‡è¡Œç¨‹ã€‚ + +### 5.4 大交通空值规则 + +有到达ã€è¿”ç¨‹æˆ–åˆ†æ‰¹æŽ¥é€æ•°æ®æ—¶ï¼Œè¯»å– `arrive/depart/batches`ã€‚å®Œå…¨æ²¡æœ‰æ—¶é—´æ•°æ®æ—¶ï¼š + +```json +{ + "transport": { + "transferTimeHint": "æš‚æ— æŽ¥é€æœºæ—¶é—´", + "arrive": null, + "depart": null, + "batches": [], + "pickupRequired": false + } +} +``` + +### 5.5 é™çº§è§„则 + +- order-v3 正常:`relatedDetailReady=true`,返回当å‰è®¢å•ã€å½“å‰éœ€æ±‚ã€é€æ—¥è¡Œç¨‹å’Œå¤§äº¤é€šã€‚ +- order-v3 整体ä¸å¯è¾¾ï¼šfleet æ‰å›žé€€æœ¬åœ°æ´¾å•快照,`relatedDetailReady=false`ï¼›å‰ç«¯æ˜¾ç¤ºâ€œè®¢å•详情暂ä¸å¯ç”¨â€ï¼Œä¸è¦æŠŠç©ºå­—段当æˆçœŸå®žæ— æ•°æ®ã€‚ +- `currentAssignment=null` è¡¨ç¤ºå½“å‰æ²¡æœ‰æœ‰æ•ˆæ´¾å•,ä¸è¡¨ç¤ºæŽ¥å£å¤±è´¥ã€‚ + +## 6. æ´¾å•æ—¶é—´çº¿ + +### 6.1 请求 + +```http +GET /admin/fleet/board/orders/2074746808742928386/timeline +Authorization: Bearer +``` + +### 6.2 å“应示例 + +```json +{ + "code": 200, + "message": "æˆåŠŸ", + "success": true, + "data": [ + { + "time": "2026-07-12 15:30:00", + "type": "requirement_received", + "actor": "系统", + "desc": "收到用车需求:SUV系列,5座,1辆" + }, + { + "time": "2026-07-12 15:35:00", + "type": "hold_sent", + "actor": "车务", + "desc": "å¾®ä¿¡é€šçŸ¥å¸æœºï¼Œç­‰å¾…确认" + } + ] +} +``` + +- åªè¿”回已ç»å‘生的车务事件,ä¸è¡¥ç©ºæ­¥éª¤ã€‚ +- åŒä¸€æ´¾è½¦ç»„的组级动作去é‡ï¼Œé€æ—¥å®Œæˆäº‹ä»¶æŒ‰å®žé™…日期ä¿ç•™ã€‚ +- 无事件返回 `data=[]`。 + +## 7. ä¿é™©äº‹åŠ¡å¯é æ€§ + +本节用于说明åŽç«¯è¡Œä¸ºï¼Œä¸éœ€è¦ç®¡ç†åŽå°æ–°å¢žè°ƒç”¨ã€‚ + +### 7.1 触å‘关系 + +| æ´¾å•动作 | Outbox 事件 | ä¿é™©ç»“æžœ | +|----------|-------------|----------| +| 叿œºç¡®è®¤æ´¾å• | `ASSIGNED` | 按当å‰å¸æœºä¿é™©ç±»åž‹é€æœåŠ¡æ—¥æ£€æŸ¥/è´­ä¹° | +| æ¢å¤å·²å–æ¶ˆæ´¾å• | `RESTORED` | æ¢å¤ä¿éšœï¼Œä¸”åŒå¸æœºåŒæ—¥ä¸é‡å¤è´­ä¹° | +| å–æ¶ˆæ´¾å• | `CANCELED` | å½“å¤©æ²¡æœ‰å…¶ä»–æœ‰æ•ˆæ´¾å•æ—¶é€€ä¿ï¼›ä»æœ‰æœ‰æ•ˆæ´¾å•æ—¶ä¿ç•™ | +| æå‰å®Œç»“ | `COMPLETED` | åªé€€å®Œç»“截止日之åŽä¸å†æœåŠ¡çš„ä¿å• | + +### 7.2 一致性ä¿è¯ + +- æ´¾å•状æ€å˜æ›´ä¸Ž Outbox 事件åŒäº‹åŠ¡è½åº“,é¿å…æ´¾å•æˆåŠŸä½†ä¿é™©äº‹ä»¶ä¸¢å¤±ã€‚ +- åŒä¸€æ´¾å•按事件 ID 顺åºå¤„ç†ï¼›åŽç»§äº‹ä»¶ä¸ä¼šè¶Šè¿‡æœªå®Œæˆå‰é©±ã€‚ +- å¤±è´¥æŒ‰é€€é¿æ—¶é—´é‡è¯•,超时 `PROCESSING` å¯é‡æ–°é¢†å–。 +- å•轮最多扫æ 100 æ¡ï¼Œé¿å…任务无界执行;这是åŽç«¯æŠ€æœ¯ä¿æŠ¤ï¼Œä¸æ˜¯å‰ç«¯åˆ†é¡µè§„则。 +- å®šæ—¶é‡æ”¾å¤ç”¨ `hl-user-service` çš„ `sys_job`/Quartz:`assignmentInsuranceOutboxJob.execute()`,æ¯åˆ†é’Ÿæ‰§è¡Œä¸€æ¬¡ã€‚ +- å†…éƒ¨é‡æ”¾æŽ¥å£å— `X-Internal-Token` ä¿æŠ¤ï¼Œä¸é…置网关路由,å‰ç«¯/admin token ä¸åº”直接调用。 + +## 8. å‰ç«¯å¿…é¡»å¤„ç† + +1. 看æ¿ä¿æŒåˆ†é¡µï¼ŒæŒ‰ `data.total/page/pageSize` 驱动分页器。 +2. 状æ€ç­›é€‰è¯»å– `summary.statusOptions`,ä¸è¦ç»´æŠ¤ç‹¬ç«‹çŠ¶æ€æ˜ å°„或独立计数。 +3. å¡ç‰‡å§‹ç»ˆç‹¬ç«‹å±•示 `consultantDisplayName`,ä¸è¦æ”¾è¿› `vehicleAdvice/customerNote` çš„æ¡ä»¶å—。 +4. å¡ç‰‡å±•ç¤ºå½“å‰ `teamNo`ã€`contactName`ã€`headcount`ã€`startDate/endDate`ã€`specialTags`ã€`requirementRemark`。 +5. 定制师筛选使用 `/admin/user/customizers` 下拉的 `adminId`,传 `consultantId`。 +6. 文本æœç´¢æ¡†å¯ç»Ÿä¸€ä¼  `keyword`ï¼›è”系人ã€å›¢å·å’Œå®šåˆ¶å¸ˆä¸‹æ‹‰ä»å¯ä½œä¸ºé«˜çº§ç²¾ç¡®ç­›é€‰ã€‚ +7. 派车/驳回按钮åªçœ‹ `canAssign/canRejectRequirement`ï¼›æ€¥å•æ ·å¼ä¸èƒ½éšè—æ“作按钮。 +8. æ´¾å•è¯¦æƒ…é€æ—¥è¡Œç¨‹ç›´æŽ¥æ¸²æŸ“ `itinerary.days`;空数组显示空æ€ï¼Œä¸é€ å‡ã€‚ +9. 大交通完全为空时展示 `transport.transferTimeHint`。 +10. 所有雪花 ID 按字符串处ç†ï¼Œç¦æ­¢è½¬ JavaScript `Number`。 + +## 9. ä¸å½±å“范围 + +- ä¸ä¿®æ”¹å‰ç«¯ä»“库,本文件仅åšåŽç«¯å¥‘约告知。 +- 䏿–°å¢žâ€œä¸åˆ†é¡µå…¨é‡çœ‹æ¿â€æŽ¥å£ã€‚ +- 䏿”¹å˜è½¦åž‹å¤§ç±»ã€åº§ä½æ•°ã€å¸æœºå ä¸€åº§ç­‰æ—¢æœ‰ä¸šåŠ¡è§„åˆ™ã€‚ +- ä¸æŠŠå¸æœºé™©æˆæœ¬è®¡å…¥å®¢æˆ·é€€æ¬¾ï¼›å¸æœºé™©ä»åªè®¡è½¦é˜Ÿæˆæœ¬ã€‚ +- 团期é…车本轮ä¸åšã€‚ + +## 10. æµ‹è¯•çŽ¯å¢ƒéªŒæ”¶è¯æ® + +环境:`https://api.test.1814.love:9443`ï¼ŒçœŸå®žè§’è‰²è´¦å· `fleet_mgr_4760 / VEHICLE_MANAGER`ã€`designer_4760 / CUSTOMIZER`。 + +```text +代ç éªŒè¯ +- hl-fleet-service verify: 1537/1537 +- hl-user-service verify: 3168/3168 +- 独立å¤å®¡: P0/P1=0 + +部署 +- hl-fleet-service: task 77d19165,8087/8187 åŒå®žä¾‹å¥åº· +- hl-user-service: task 0c32a732,8081/8181 åŒå®žä¾‹å¥åº· +- hl-order-service-v3: task 06023fb6,8086/8186 åŒå®žä¾‹å¥åº· + +部署åŽçœŸå®žç½‘å…³æµç¨‹ +- 126/126 通过,失败 0 +- 覆盖新建订å•ã€è¡¥å…¨ä¸¤å出行人ã€è¡¥å…¨å¤§äº¤é€šã€æäº¤ç”¨è½¦éœ€æ±‚ã€è½¦åŠ¡æŸ¥çœ‹ã€æ´¾å•预检〠+ 排车ã€å¸æœºç¡®è®¤ã€å–消(已/æœªé€šçŸ¥å¸æœºï¼‰ã€æ¢å¤ã€æ¢å¸æœºã€æå‰å®Œç»“ã€å¸æœºæ‹’æŽ¥ã€æœªæ´¾é©³å›žã€ + å·²æ´¾ç¦æ­¢é©³å›žã€çŸ©é˜µã€è½¦è¾†/叿œºã€ä»·æ ¼æ—¥åކã€å¯¹è´¦ã€ä¿é™©ä»»åŠ¡ä¸Žè½¦ç®¡æ¨¡æ¿ + +æ•°æ®åº“地é¢çœŸç›¸ +- 本轮 3 个真实派å•产生 8 æ¡ä¿é™© Outbox 事件 +- ASSIGNED/CANCELED/RESTORED/COMPLETED 全部 SUCCESS,retryCount=0 +- sys_job 1037 为 ACTIVE,Quartz trigger 为 WAITING,最近 10 次执行全部 SUCCESS +``` + +## 11. 与既有文档关系 + +- 本文补充并纠正 `53_4871_车务æéœ€æ±‚æ´¾å•看æ¿é—­çŽ¯å¥‘çº¦-管ç†åŽå°.md` 的当å‰è®¢å•/当å‰éœ€æ±‚ã€ç»Ÿè®¡ä¸€è‡´æ€§å’Œé€æ—¥è¡Œç¨‹å£å¾„。 +- 定制师下拉ä»ä»¥ `54_4876_æ´¾å•看æ¿å›¢å·ä¸Žå®šåˆ¶å¸ˆä¸‹æ‹‰ç­›é€‰-管ç†åŽå°.md` 为准。 +- 叿œºé™©ä¸šåŠ¡è§„åˆ™ä»ä»¥ `26_4760_è½¦åŠ¡å¸æœºé™©è‡ªåŠ¨æŠ•é€€ä¿é—­çŽ¯ä¸Žä¿é™©èœå•契约-管ç†åŽå°.md` 为准;本文åªè¡¥å……事务å¯é æ€§å®žçŽ°å’ŒéªŒæ”¶è¯æ®ã€‚