From 3847d19b20dd229a10dae588a37dce90af08a1af Mon Sep 17 00:00:00 2001 From: API Changelog Bot Date: Thu, 23 Jul 2026 09:32:15 +0800 Subject: [PATCH] docs: add dated fleet chat frontend handoff --- .tmp-user-62_4938.md | 507 ++++++++++++++++++ ...Š¡è®¢å•èŠå¤©_定制师车务团队_新接å£_管ç†åŽå°.md | 6 - ...å•èŠå¤©å‰ç«¯å…¥å£ä¸Žæœªè¯»æé†’-修改接å£-管ç†åŽå°.md | 10 + 3 files changed, 517 insertions(+), 6 deletions(-) create mode 100644 .tmp-user-62_4938.md create mode 100644 changelogs-v2/2026-07/23_4689_车务订å•èŠå¤©å‰ç«¯å…¥å£ä¸Žæœªè¯»æé†’-修改接å£-管ç†åŽå°.md diff --git a/.tmp-user-62_4938.md b/.tmp-user-62_4938.md new file mode 100644 index 0000000..8943ee5 --- /dev/null +++ b/.tmp-user-62_4938.md @@ -0,0 +1,507 @@ +# ã€#4938 å‰ç«¯å¯¹æŽ¥Â·ç®¡ç†åŽå°ã€‘车务创建ã€ä¿®æ”¹ä¸Žæœ€ç»ˆç¡®è®¤è¿”回订å•调整基线差异 + +> Issue: [wx/HL#4938](https://git.1814.love:8443/wx/HL/issues/4938) +> +> PR: 待补充 +> +> æœåŠ¡: `hl-fleet-service` +> +> 日期: 2026-07-19 +> +> å½±å“范围: 车务直接派车ã€ç›´æŽ¥æ”¹æ´¾ã€`holding → assigned` 最终确认,以åŠè®¢å•调整åŽçš„æ—¥æœŸã€äººæ•°ã€è½¦è¾†å®¹é‡å·®å¼‚å¤„ç† +> +> 状æ€: æºç é™æ€å¥‘约已核对,待代ç è¯„审ã€åˆå¹¶ã€éƒ¨ç½²ä¸Žæµ‹è¯•环境验收 + +## 一ã€å‰ç«¯å¯¹æŽ¥ç»“论 + +以下三个既有管ç†åŽå°æŽ¥å£çŽ°åœ¨å…±ç”¨ä¸šåŠ¡ç  `605041` è¿”å›žç»“æž„åŒ–é€æ—¥å·®å¼‚: + +| æ“作 | æŽ¥å£ | è§¦å‘ 605041 çš„æ¡ä»¶ | +|---|---|---| +| åˆ›å»ºæ´¾å• | `POST /admin/fleet/assignments` | `holdMode=0` 直接派车时最终基线ä¸ä¸€è‡´ | +| ä¿®æ”¹æ´¾å• | `POST /admin/fleet/assignments/{assignmentId}/change` | `holdMode=0` 直接改派时最终基线ä¸ä¸€è‡´ | +| 最终确认 | `POST /admin/fleet/assignments/{assignmentId}/confirm` | 订å•ã€éœ€æ±‚ã€è¡Œç¨‹ã€é€æ—¥æ´¾å•ã€äººæ•°æˆ–容é‡åŸºçº¿ä¸ä¸€è‡´ | + +å‰ç«¯å¿…é¡»éµå®ˆä»¥ä¸‹åˆ¤æ–­ï¼š + +1. 三个接å£çš„ `605041` 当å‰å‡è¿”回 HTTP 200,但统一å“应体为 `code=605041`ã€`success=false`,ä¸èƒ½åªåˆ¤æ–­ HTTP 状æ€ã€‚ +2. `605041` çš„ `data` ä¸ä¸ºç©ºï¼š + - create 返回 `AssignmentWriteRespVO`,ä¿è¯ `data.dailyDifferences` å¯è¯»ï¼› + - change 返回 `ChangeAssignmentRespVO`,ä¿è¯ `data.dailyDifferences` å¯è¯»ï¼› + - confirm 返回 `ConfirmRespVO`,ä¿è¯ `data.confirmed=false` å’Œ `data.dailyDifferences` å¯è¯»ã€‚ +3. `605041` ä¸ä¼šæäº¤æ´¾å•åŠå…¶å…³è”业务状æ€å†™å…¥ï¼š + - create ä¸ä¼šæ–°å¢žæˆ–激活派å•ï¼› + - change ä¸ä¼šå–消旧派å•,也ä¸ä¼šç”Ÿæˆå¯ç”¨çš„æ–°æ´¾è½¦ç‰ˆæœ¬ï¼› + - confirm ä¸ä¼šæŽ¨è¿›æ´¾å•çŠ¶æ€æˆ–确认时间; + - 三者都ä¸ä¼šè§¦å‘车辆/叿œºå ç”¨ã€ä¿é™©ã€å¯¹è´¦æˆ–è®¢å•æ´¾å®šç»“æžœå˜åŒ–。 +4. 收到 `605041` åŽä¿æŒæ“作å‰é¡µé¢çжæ€ï¼Œå±•ç¤ºé€æ—¥å·®å¼‚ï¼Œå¹¶é‡æ–°æ‹‰å–最新订å•和车务详情。 +5. 所有派å•ã€è½¦è¾†æ§½ä½ã€æ´¾è½¦ç»„ã€è®¢å•ã€è½¦è¾†å’Œå¸æœºé›ªèб ID 凿Œ‰ JSON String å‘é€å’Œè¯»å–ï¼Œç¦æ­¢è½¬ä¸º JavaScript `Number`。金é¢å­—段也按 String 读å–。 + +## 二ã€605041 公共å“应契约 + +### 2.1 统一å“应外层 + +```json +{ + "code": 605041, + "message": "订å•行程或用车派å•å·²å˜åŒ–ï¼Œè¯·æŒ‰é€æ—¥å·®å¼‚处ç†åŽé‡è¯•", + "data": { + "dailyDifferences": [ + { + "serviceDate": "2026-07-22", + "differenceType": "CAPACITY_INSUFFICIENT", + "assignmentId": null, + "assignmentSlotId": null, + "passengerCount": 8, + "passengerCapacity": 5, + "capacityGap": 3, + "message": "车辆载客é‡ä¸è¶³ï¼Œå·²æŒ‰æ¯è½¦å¸æœºå ä¸€åº§è®¡ç®—" + } + ] + }, + "traceId": "7db459fd-0b8e-4f29-9c46-4938f09a001", + "success": false +} +``` + +注æ„: + +- `data` 的完整类型å–决于调用的是 createã€change 还是 confirm,ä¸èƒ½è·¨æŽ¥å£å¤ç”¨æˆåŠŸå“应模型。 +- 除本文件明确ä¿è¯çš„失败字段外,其余æˆåŠŸæ€å­—段在 `605041` 时为空,å‰ç«¯ä¸å¾—用它们推断写入结果。 +- `traceId` 用于å馈和日志定ä½ï¼Œä¸å‚与业务判断。 + +### 2.2 `dailyDifferences[]` + +| 字段 | 类型 | 说明 | +|---|---|---| +| `serviceDate` | String/null | å‘生差异的æœåŠ¡æ—¥ï¼Œæ ¼å¼ `yyyy-MM-dd`;无法定ä½åˆ°å•日时为空 | +| `differenceType` | String | 差异类型,å–值è§ä¸‹è¡¨ | +| `assignmentId` | String/null | å¯å®šä½åˆ°å…·ä½“æ´¾å•æ—¶è¿”回;仅用于定ä½å·®å¼‚,ä¸ä»£è¡¨æœ¬æ¬¡å†™å…¥æˆåŠŸ | +| `assignmentSlotId` | String/null | å¯å®šä½åˆ°ç¨³å®šè½¦è¾†æ§½ä½æ—¶è¿”回 | +| `passengerCount` | Integer/null | 当剿¯”对使用的乘客人数,ä¸å«å¸æœº | +| `passengerCapacity` | Integer/null | 当日车辆åˆè®¡å¯è½½å®¢äººæ•°ï¼Œæ¯è¾†è½¦å·²æ‰£é™¤å¸æœºä¸€åº§ | +| `capacityGap` | Integer/null | ç¼ºå°‘åº§ä½æ•°ï¼Œç­‰äºŽ `passengerCount - passengerCapacity` | +| `message` | String | åŽç«¯ç”Ÿæˆçš„差异说明,å¯ç›´æŽ¥è¾…助展示 | + +差异类型: + +| `differenceType` | å«ä¹‰ | +|---|---| +| `REQUIREMENT_VERSION_MISMATCH` | 当å‰ç”Ÿæ•ˆç”¨è½¦éœ€æ±‚å·²å˜åŒ–,或订å•/需求已ä¸å¯ç»§ç»­æ´¾å• | +| `ORDER_DATE_MISMATCH` | 订å•当剿—¥æœŸä¸Žç”¨è½¦éœ€æ±‚冻结日期ä¸ä¸€è‡´ | +| `ITINERARY_DATE_MISMATCH` | 逿—¥è¡Œç¨‹æ—¥æœŸä¸Žç”¨è½¦éœ€æ±‚冻结日期ä¸ä¸€è‡´ï¼Œæˆ–ç¼ºå°‘é€æ—¥è¡Œç¨‹ | +| `ASSIGNMENT_DATE_MISSING` | æŸæœåŠ¡æ—¥ç¼ºå°‘æœ‰æ•ˆæ´¾å•æˆ–è½¦è¾†æ§½ä½ | +| `ASSIGNMENT_DATE_EXTRA` | æ´¾å•ä»åŒ…å«å·²ä¸å±žäºŽå½“å‰éœ€æ±‚çš„æœåŠ¡æ—¥ | +| `HEADCOUNT_BASELINE_MISMATCH` | 订å•当å‰äººæ•°ã€éœ€æ±‚冻结人数或派å•人数快照ä¸ä¸€è‡´ | +| `CAPACITY_INSUFFICIENT` | 当日所有车辆åˆè®¡è½½å®¢é‡ä¸è¶³ | + +`dailyDifferences` å¯èƒ½åŒæ—¶åŒ…å«å¤šç§ç±»åž‹ã€å¤šæ¡æœåŠ¡æ—¥è®°å½•ã€‚å‰ç«¯åº”é历数组展示,ä¸å¾—åªå–第一æ¡ï¼Œä¹Ÿä¸å¾—自行é‡ç®—人数或车辆容é‡ã€‚ + +## 三ã€åˆ›å»ºæ´¾å• create + +### 3.1 请求 + +```http +POST /admin/fleet/assignments +Authorization: Bearer +Content-Type: application/json +``` + +```json +{ + "orderId": "2078001000000000101", + "orderNo": "26-0719", + "requirementId": "2078001000000000201", + "fleetItemIndex": 1, + "vehicleId": "2078001000000000301", + "driverId": "2078001000000000401", + "startDate": "2026-07-21", + "endDate": "2026-07-23", + "pickupAt": "海拉尔", + "dropoffAt": "满洲里", + "headcount": 8, + "protocolPrice": "1300.00", + "holdMode": 0, + "fromEntry": "from-board", + "skipCityJunctionException": false, + "strictSeats": true, + "confirmCrossResident": false, + "requestId": "fleet-create-4938-20260719-001" +} +``` + +`605041` åªé€‚用于 `holdMode=0`。原有 `holdMode=1` 排车é”定æµç¨‹ä¸æ‰§è¡Œæœ¬æ¬¡æœ€ç»ˆåŸºçº¿é—¨ç¦ã€‚ + +### 3.2 holdMode=0 æˆåŠŸå“应 + +```json +{ + "code": 200, + "message": "æˆåŠŸ", + "data": { + "id": "2078001000000000501", + "assignmentGroupId": "2078001000000000601", + "assignmentSlotId": "2078001000000000701", + "assignmentStatus": "assigned", + "stageCode": "assigned", + "stageLabel": "已派车", + "currentStep": 4, + "skippedStepCodes": [ + "DRIVER_CONFIRMATION", + "DRIVER_CONFIRMATION_EVIDENCE" + ], + "protocolPrice": "1300.00", + "holdSentAt": null, + "confirmedAt": "2026-07-19 14:20:00", + "sideEffects": { + "vehicleStatusUpdated": "busy", + "driverStatusUpdated": "busy", + "reconPrepRowsCreated": 0, + "reconPrepMarkedCanceled": null + }, + "dailyDifferences": null + }, + "traceId": "7db459fd-0b8e-4f29-9c46-4938c200001", + "success": true +} +``` + +仅在 `code=200` 时把新派å•加入页é¢ï¼›`id`ã€`assignmentGroupId`ã€`assignmentSlotId` 凿Œ‰ String ä¿å­˜ã€‚ + +### 3.3 605041 失败å“应 + +```json +{ + "code": 605041, + "message": "订å•行程或用车派å•å·²å˜åŒ–ï¼Œè¯·æŒ‰é€æ—¥å·®å¼‚处ç†åŽé‡è¯•", + "data": { + "id": null, + "assignmentGroupId": null, + "assignmentSlotId": null, + "assignmentStatus": null, + "stageCode": null, + "stageLabel": null, + "currentStep": null, + "skippedStepCodes": null, + "protocolPrice": null, + "holdSentAt": null, + "confirmedAt": null, + "sideEffects": null, + "dailyDifferences": [ + { + "serviceDate": "2026-07-22", + "differenceType": "CAPACITY_INSUFFICIENT", + "assignmentId": null, + "assignmentSlotId": null, + "passengerCount": 8, + "passengerCapacity": 5, + "capacityGap": 3, + "message": "车辆载客é‡ä¸è¶³ï¼Œå·²æŒ‰æ¯è½¦å¸æœºå ä¸€åº§è®¡ç®—" + } + ] + }, + "traceId": "7db459fd-0b8e-4f29-9c46-4938c605041", + "success": false +} +``` + +此时ä¸å¾—把临时å“应内容加入派å•列表,ä¸å¾—本地å ç”¨è½¦è¾†/叿œºï¼›åˆ·æ–°åŽä»ä»¥æœåŠ¡ç«¯æœ€æ–°è¯¦æƒ…ä¸ºå‡†ã€‚ + +## å››ã€ä¿®æ”¹æ´¾å• change + +### 4.1 请求 + +```http +POST /admin/fleet/assignments/2078001000000000501/change +Authorization: Bearer +Content-Type: application/json +``` + +```json +{ + "effectiveDate": "2026-07-22", + "newVehicleId": "2078001000000000302", + "newDriverId": "2078001000000000402", + "holdMode": 0, + "protocolPrice": "1688.00", + "confirmCrossResident": false, + "reason": "订å•è°ƒæ•´åŽæ›´æ¢è½¦è¾†å’Œå¸æœº", + "requestId": "fleet-change-4938-20260719-001" +} +``` + +`newVehicleId`ã€`newDriverId` 至少传一个。`605041` åªé€‚用于 `holdMode=0`ï¼›`holdMode=1` 仿Œ‰æŽ’è½¦å¾…å¸æœºç¡®è®¤æµç¨‹å¤„ç†ã€‚ + +### 4.2 holdMode=0 æˆåŠŸå“应 + +```json +{ + "code": 200, + "message": "æˆåŠŸ", + "data": { + "assignmentId": "2078001000000000502", + "assignmentSlotId": "2078001000000000701", + "previousAssignmentGroupId": "2078001000000000601", + "newAssignmentGroupId": "2078001000000000602", + "assignmentStatus": "assigned", + "effectiveDate": "2026-07-22", + "affectedDays": 2, + "protocolPrice": "1688.00", + "otherVehicleCount": 1, + "warningCode": "ORDER_HAS_OTHER_VEHICLES", + "warningMessage": "该订å•妿œ‰1个车辆槽ä½ï¼Œå½“å‰ä»…修改本车辆,请核对其它车辆安排", + "otherVehicles": [ + { + "assignmentSlotId": "2078001000000000702", + "vehiclePlate": "è’™B-66666", + "driverName": "æŽå¸ˆå‚…", + "startDate": "2026-07-21", + "endDate": "2026-07-23" + } + ], + "dailyDifferences": null + }, + "traceId": "7db459fd-0b8e-4f29-9c46-4938a200001", + "success": true +} +``` + +change æˆåŠŸå“应没有 `confirmed` å’Œ `sideEffects` å­—æ®µã€‚åªæœ‰ `code=200` æ—¶æ‰èƒ½ç”¨æ–°æ´¾è½¦ç»„替æ¢é¡µé¢ä¸­çš„æ—§ç‰ˆæœ¬ï¼›`warningCode=ORDER_HAS_OTHER_VEHICLES` æ—¶ç»§ç»­ä¿ç•™æ—¢æœ‰å¼ºæç¤ºã€‚ + +### 4.3 605041 失败å“应 + +```json +{ + "code": 605041, + "message": "订å•行程或用车派å•å·²å˜åŒ–ï¼Œè¯·æŒ‰é€æ—¥å·®å¼‚处ç†åŽé‡è¯•", + "data": { + "assignmentId": null, + "assignmentSlotId": null, + "previousAssignmentGroupId": null, + "newAssignmentGroupId": null, + "assignmentStatus": null, + "effectiveDate": null, + "affectedDays": null, + "protocolPrice": null, + "otherVehicleCount": null, + "warningCode": null, + "warningMessage": null, + "otherVehicles": null, + "dailyDifferences": [ + { + "serviceDate": null, + "differenceType": "HEADCOUNT_BASELINE_MISMATCH", + "assignmentId": null, + "assignmentSlotId": null, + "passengerCount": 8, + "passengerCapacity": null, + "capacityGap": null, + "message": "订å•当å‰äººæ•°ä¸Žç”¨è½¦éœ€æ±‚冻结人数ä¸ä¸€è‡´" + }, + { + "serviceDate": "2026-07-22", + "differenceType": "CAPACITY_INSUFFICIENT", + "assignmentId": null, + "assignmentSlotId": null, + "passengerCount": 8, + "passengerCapacity": 5, + "capacityGap": 3, + "message": "车辆载客é‡ä¸è¶³ï¼Œå·²æŒ‰æ¯è½¦å¸æœºå ä¸€åº§è®¡ç®—" + } + ] + }, + "traceId": "7db459fd-0b8e-4f29-9c46-4938a605041", + "success": false +} +``` + +此时旧派å•å’ŒåŽŸæ´¾è½¦ç»„ä»æ˜¯æœ‰æ•ˆä¸šåŠ¡çŠ¶æ€ã€‚ä¸å¾—用 `dailyDifferences[].assignmentId` 替æ¢é¡µé¢ä¸»é”®ï¼Œä¹Ÿä¸å¾—本地切æ¢è½¦è¾†ã€å¸æœºæˆ–状æ€ã€‚ + +## äº”ã€æœ€ç»ˆç¡®è®¤ confirm + +### 5.1 请求 + +```http +POST /admin/fleet/assignments/2078001000000000501/confirm +Authorization: Bearer +Content-Type: application/json +``` + +```json +{ + "requestId": "fleet-final-confirm-4938-20260719-001" +} +``` + +| 字段 | ä½ç½® | 类型 | å¿…å¡« | çº¦æŸ | 说明 | +|---|---|---|---|---|---| +| `assignmentId` | Path | String | 是 | æœ‰æ•ˆæ´¾å• ID | 当剿´¾è½¦ç»„ä¸­çš„ä»»ä¸€æ´¾å• ID | +| `requestId` | Body | String | 是 | éžç©ºï¼Œæœ€é•¿ 64 | 最终确认幂等标识 | + +### 5.2 æˆåŠŸå“应 + +```json +{ + "code": 200, + "message": "æˆåŠŸ", + "data": { + "confirmed": true, + "assignmentStatus": "assigned", + "stageCode": "assigned", + "stageLabel": "已派车", + "currentStep": 4, + "assignmentGroupId": "2078001000000000601", + "confirmedAt": "2026-07-19 14:30:00", + "itineraryUrl": "https://h5.example.com/#/itinerary/", + "sideEffects": { + "vehicleStatusUpdated": "busy", + "driverStatusUpdated": "busy", + "reconPrepRowsCreated": 0, + "reconPrepMarkedCanceled": null + }, + "dailyDifferences": null + }, + "traceId": "7db459fd-0b8e-4f29-9c46-4938f200001", + "success": true +} +``` + +`itineraryUrl` ç­¾å‘é…ç½®ä¸å¯ç”¨æ—¶å…许为空,ä¸å½±å“确认æˆåŠŸã€‚å‰ç«¯åªæœ‰åœ¨ `code=200 && data.confirmed===true` 时展示最终确认æˆåŠŸï¼Œå¹¶åˆ·æ–°æ´¾å•详情ã€çœ‹æ¿åˆ—表和汇总。 + +### 5.3 日期ã€äººæ•°ä¸Žå®¹é‡åŒæ—¶å­˜åœ¨å·®å¼‚ + +```json +{ + "code": 605041, + "message": "订å•行程或用车派å•å·²å˜åŒ–ï¼Œè¯·æŒ‰é€æ—¥å·®å¼‚处ç†åŽé‡è¯•", + "data": { + "confirmed": false, + "assignmentStatus": null, + "stageCode": null, + "stageLabel": null, + "currentStep": null, + "assignmentGroupId": null, + "confirmedAt": null, + "itineraryUrl": null, + "sideEffects": null, + "dailyDifferences": [ + { + "serviceDate": "2026-07-21", + "differenceType": "ORDER_DATE_MISMATCH", + "assignmentId": null, + "assignmentSlotId": null, + "passengerCount": null, + "passengerCapacity": null, + "capacityGap": null, + "message": "订å•当剿—¥æœŸä¸Žç”¨è½¦éœ€æ±‚冻结日期ä¸ä¸€è‡´" + }, + { + "serviceDate": null, + "differenceType": "HEADCOUNT_BASELINE_MISMATCH", + "assignmentId": null, + "assignmentSlotId": null, + "passengerCount": 8, + "passengerCapacity": null, + "capacityGap": null, + "message": "订å•当å‰äººæ•°ä¸Žç”¨è½¦éœ€æ±‚冻结人数ä¸ä¸€è‡´" + }, + { + "serviceDate": "2026-07-22", + "differenceType": "CAPACITY_INSUFFICIENT", + "assignmentId": null, + "assignmentSlotId": null, + "passengerCount": 8, + "passengerCapacity": 5, + "capacityGap": 3, + "message": "车辆载客é‡ä¸è¶³ï¼Œå·²æŒ‰æ¯è½¦å¸æœºå ä¸€åº§è®¡ç®—" + } + ] + }, + "traceId": "7db459fd-0b8e-4f29-9c46-4938f605041", + "success": false +} +``` + +### 5.4 ç¼ºå°‘æŸæ—¥è½¦è¾†æ§½ä½ + +```json +{ + "code": 605041, + "message": "订å•行程或用车派å•å·²å˜åŒ–ï¼Œè¯·æŒ‰é€æ—¥å·®å¼‚处ç†åŽé‡è¯•", + "data": { + "confirmed": false, + "assignmentStatus": null, + "stageCode": null, + "stageLabel": null, + "currentStep": null, + "assignmentGroupId": null, + "confirmedAt": null, + "itineraryUrl": null, + "sideEffects": null, + "dailyDifferences": [ + { + "serviceDate": "2026-07-23", + "differenceType": "ASSIGNMENT_DATE_MISSING", + "assignmentId": null, + "assignmentSlotId": null, + "passengerCount": null, + "passengerCapacity": null, + "capacityGap": null, + "message": "该æœåŠ¡æ—¥ç¼ºå°‘ç¬¬2ä¸ªè½¦è¾†æ§½ä½æ´¾å•" + } + ] + }, + "traceId": "7db459fd-0b8e-4f29-9c46-4938f605042", + "success": false +} +``` + +## å…­ã€å‰ç«¯ç»Ÿä¸€å¤„ç†é¡ºåº + +1. 先判断业务 `code`,å†è¯»å–端点自己的 `data`: + - `code=200`:按对应æˆåŠŸæ¨¡åž‹å¤„ç†ï¼› + - `code=605041`ï¼šæŒ‰å¯¹åº”å¤±è´¥æ¨¡åž‹è¯»å– `dailyDifferences`ï¼› + - 其他业务ç ï¼šç»§ç»­èµ°æ—¢æœ‰é”™è¯¯å¤„ç†ã€‚ +2. `605041` æ—¶ä¸è¦ä¹è§‚更新: + - create 䏿–°å¢žæœ¬åœ°æ´¾å•ï¼› + - change 䏿›¿æ¢æ—§æ´¾å•ï¼› + - confirm 䏿”¹ä¸º `assigned` 或“已确认â€ã€‚ +3. 展示顶层 `message`,并按 `dailyDifferences` 列出æœåŠ¡æ—¥ã€å·®å¼‚类型ã€äººæ•°ã€å®¹é‡å’Œç¼ºå£ï¼›å­—段为空时éšè—对应展示项。 +4. 釿–°è¯·æ±‚最新订å•和车务详情,é¿å…继续使用æ“作å‰ç¼“存。 +5. ç”¨æˆ·ä¿®æ­£è®¢å•æ—¥æœŸã€è¡Œç¨‹ã€äººæ•°æˆ–æ´¾å•åŽï¼Œç”Ÿæˆæ–°çš„ `requestId` å†æäº¤æ–°åŠ¨ä½œï¼›ä»…åœ¨åŒä¸€æ¬¡åŠ¨ä½œç½‘ç»œç»“æžœä¸ç¡®å®šæ—¶å¤ç”¨åŽŸ `requestId`。 + +## 七ã€å…¶ä»–直接错误分支 + +| ä¸šåŠ¡ç  | 常è§åœºæ™¯ | å‰ç«¯å¤„ç† | +|---|---|---| +| `605009` | æ´¾å•ä¸å­˜åœ¨ | 刷新详情和看æ¿ï¼Œåœæ­¢æ“作旧记录 | +| `605020` | 当å‰çжæ€ä¸å…许æ“作 | 刷新最新生命周期与æ“作能力 | +| `605025` | 最终确认å‰ç¼ºå°‘叿œºç¡®è®¤æˆ–æœ‰æ•ˆå‡­è¯ | 引导先完æˆå¸æœºç¡®è®¤ä¸Žå‡­è¯ç™»è®° | +| `605001` / `605003` | è½¦è¾†æˆ–å¸æœºæ¡£æœŸå†²çª | 展示åŽç«¯é”™è¯¯å¹¶é‡æ–°é€‰è½¦/叿œº | +| `605036` | 跨常驻车未显å¼ç¡®è®¤ | 二次æç¤ºåŽæºå¸¦ `confirmCrossResident=true` é‡è¯• | +| `605041` | 订å•ã€éœ€æ±‚ã€è¡Œç¨‹ã€é€æ—¥æ´¾å•ã€äººæ•°æˆ–容é‡åŸºçº¿ä¸ä¸€è‡´ | 使用当å‰ç«¯ç‚¹çš„ `data.dailyDifferences` å±•ç¤ºå¹¶å¤„ç† | + +è¯·æ±‚å­—æ®µä¸ºç©ºã€æ ¼å¼ä¸æ­£ç¡®æˆ–超过长度é™åˆ¶æ—¶èµ°ç»Ÿä¸€å‚数校验错误,å‰ç«¯åº”在å‘请求å‰å®ŒæˆåŒæ ·çº¦æŸã€‚ + +## å…«ã€ä¸å½±å“范围 + +- 䏿–°å¢žç®¡ç†åŽå°æŽ¥å£ï¼Œä¸‰ä¸ªæŽ¥å£çš„è¯·æ±‚å­—æ®µç»“æž„ä¿æŒä¸å˜ã€‚ +- `holdMode=1` 的排车é”定ã€å¸æœºç¡®è®¤ä¸Žå‡­è¯ç™»è®°æµç¨‹ä¿æŒä¸å˜ã€‚ +- 䏿”¹å˜å–消ã€å¸æœºæ‹’接ã€é©³å›žéœ€æ±‚ã€æ’¤é”€å–消和æå‰å®Œç»“çš„å‰ç«¯è°ƒç”¨å¥‘约。 +- ä¸è¦æ±‚å‰ç«¯è®¡ç®—订å•人数ã€é€æ—¥æœåŠ¡æ—¥æœŸæˆ–è½¦è¾†è½½å®¢é‡ï¼Œè¿™äº›å‡ç”±åŽç«¯æƒå¨æ ¡éªŒå¹¶è¿”回差异。 +- æœ¬æ–‡ä»¶åªæè¿°ç®¡ç†åŽå°ç›´æŽ¥æ¶ˆè´¹çš„ HTTP 契约,ä¸åŒ…嫿œåŠ¡é—´è°ƒç”¨æˆ–å‘布实现细节。 + +## ä¹ã€éªŒæ”¶çжæ€ä¸Žå¾…è¡¥è¯æ® + +已完æˆï¼š + +- å½“å‰ worktree 中 createã€changeã€confirm Controller çš„ `605041` 强类型 `data` 陿€æ ¸å¯¹ã€‚ +- `AssignmentWriteRespVO`ã€`ChangeAssignmentRespVO`ã€`ConfirmRespVO` 与 `dailyDifferences` å­—æ®µé™æ€æ ¸å¯¹ã€‚ +- 三æ¡å¤±è´¥è·¯å¾„ä¸æäº¤æ´¾å•åŠå…¶å…³è”业务状æ€å˜åŒ–çš„æºç é¡ºåºæ ¸å¯¹ã€‚ + +åˆå¹¶å’Œéƒ¨ç½²åŽä»éœ€è¡¥å……: + +- 三个接å£åœ¨æµ‹è¯•环境 OpenAPI 中的请求/å“应模型截图或导出差异。 +- ç»ç½‘关分别å–å¾— createã€changeã€confirm çš„æˆåŠŸå“应和 `605041` 真实å“应,记录 HTTP 状æ€ã€ä¸šåŠ¡ç ã€`traceId` 与完整 `data`。 +- 对 `605041` å‰åŽåšæµ‹è¯•ä¸šåŠ¡æ•°æ®å¯¹ç…§ï¼Œç¡®è®¤æ´¾å•版本/状æ€ã€è½¦è¾†å¸æœºå ç”¨ã€ä¿é™©ã€å¯¹è´¦å’Œè®¢å•派定结果未å‘生å˜åŒ–。 +- 管ç†åŽå°é¡µé¢è”è°ƒè¯æ®ï¼šå·®å¼‚列表展示ã€ç©ºå­—段处ç†ã€åˆ·æ–°è¡Œä¸ºã€ç¦æ­¢ä¹è§‚更新,以åŠä¿®æ­£åŽé‡æ–°æäº¤æˆåŠŸã€‚ diff --git a/changelogs-v2/2026-07/02_4689_车务订å•èŠå¤©_定制师车务团队_新接å£_管ç†åŽå°.md b/changelogs-v2/2026-07/02_4689_车务订å•èŠå¤©_定制师车务团队_新接å£_管ç†åŽå°.md index 17346f4..7e3d6ab 100644 --- a/changelogs-v2/2026-07/02_4689_车务订å•èŠå¤©_定制师车务团队_新接å£_管ç†åŽå°.md +++ b/changelogs-v2/2026-07/02_4689_车务订å•èŠå¤©_定制师车务团队_新接å£_管ç†åŽå°.md @@ -45,9 +45,3 @@ body:`{"orderId": 2071784830965620737}`(å¿…å¡«;å¯é€‰ `peer`) - 啿µ‹ user-service 3099 绿(房务基线零回归)。 - **看æ¿åˆ—表红点(PR #4698)实测**:`/admin/fleet/board/orders` 74 啿¯è¡Œå« `orderId`(真数字雪花)+ `unreadMessageCount`;å®šåˆ¶å¸ˆå‘æŸå•广播一æ¡â†’釿Ÿ¥è¯¥è¡Œ `unreadMessageCount=1`(团队未读è”动看æ¿);user-service 软é™çº§è·¯å¾„ä¸é˜»æ–­åˆ—表。fleet-service å…¨é‡ 1307 测试绿ã€ArchTest 11/11。 -## ã€å‰ç«¯å¾…办·2026-07-23 截图å馈】 - -- æ´¾å•看æ¿è®¢å•å¡å¿…须接入 `unreadMessageCount`:大于 0 显示消æ¯çº¢ç‚¹ï¼Œè¶…过 9 显示 `9+`ï¼›ä¸èƒ½åªæ˜¾ç¤ºè®¢å•状æ€ã€‚ -- æ´¾å•看æ¿è®¢å•å¡å¢žåŠ ã€Œè”ç³»å®šåˆ¶å¸ˆã€æŒ‰é’®ï¼Œä½¿ç”¨è¯¥è¡Œ `orderId` 调用 `POST /admin/message/chat/open-fleet`,ä¸è¦ä½¿ç”¨å±•ç¤ºå· `id`。 -- 订å•详情弹窗增加「è”ç³»å®šåˆ¶å¸ˆã€æŒ‰é’®ï¼Œå¤ç”¨æˆ¿åŠ¡èŠå¤©æŠ½å±‰å’ŒåŒä¸€ `open-fleet` 接å£ï¼›æ‰“开会è¯åŽæŒ‰æŽ¥å£è¯­ä¹‰è‡ªåŠ¨æ ‡è®°å·²è¯»ã€‚ -- å³ä¸Šè§’æ¶ˆæ¯æé†’æ²¿ç”¨ `/admin/message/unread-count` åˆå§‹æ‹‰å– + SSE åˆ·æ–°ï¼Œå’Œæˆ¿åŠ¡ä¿æŒä¸€è‡´ã€‚ diff --git a/changelogs-v2/2026-07/23_4689_车务订å•èŠå¤©å‰ç«¯å…¥å£ä¸Žæœªè¯»æé†’-修改接å£-管ç†åŽå°.md b/changelogs-v2/2026-07/23_4689_车务订å•èŠå¤©å‰ç«¯å…¥å£ä¸Žæœªè¯»æé†’-修改接å£-管ç†åŽå°.md new file mode 100644 index 0000000..12e26d6 --- /dev/null +++ b/changelogs-v2/2026-07/23_4689_车务订å•èŠå¤©å‰ç«¯å…¥å£ä¸Žæœªè¯»æé†’-修改接å£-管ç†åŽå°.md @@ -0,0 +1,10 @@ +# 车务订å•èŠå¤©å‰ç«¯å…¥å£ä¸Žæœªè¯»æé†’ + +## å‰ç«¯äº¤æŽ¥ï¼ˆæˆªå›¾å馈) + +- æ´¾å•看æ¿è®¢å•塿ޥ入 `unreadMessageCount`:大于 0 显示消æ¯çº¢ç‚¹ï¼Œè¶…过 9 显示 `9+`。 +- æ´¾å•看æ¿è®¢å•å¡å¢žåŠ ã€Œè”ç³»å®šåˆ¶å¸ˆã€æŒ‰é’®ï¼Œä½¿ç”¨è¯¥è¡Œ `orderId` 调用 `POST /admin/message/chat/open-fleet`,ä¸è¦ä½¿ç”¨å±•ç¤ºå· `id`。 +- 订å•详情弹窗增加「è”ç³»å®šåˆ¶å¸ˆã€æŒ‰é’®ï¼Œå¤ç”¨æˆ¿åŠ¡èŠå¤©æŠ½å±‰å’ŒåŒä¸€ `open-fleet` 接å£ï¼›æ‰“开会è¯åŽè‡ªåŠ¨æ ‡è®°å·²è¯»ã€‚ +- å³ä¸Šè§’æ¶ˆæ¯æé†’æ²¿ç”¨ `/admin/message/unread-count` åˆå§‹æ‹‰å– + SSE åˆ·æ–°ï¼Œå’Œæˆ¿åŠ¡ä¿æŒä¸€è‡´ã€‚ + +详细接å£å¥‘约è§åŒç›®å½• `02_4689_车务订å•èŠå¤©_定制师车务团队_新接å£_管ç†åŽå°.md`。