From 2e0e840e24f3427723aa9ac87212d8b5f36247ad Mon Sep 17 00:00:00 2001 From: wx Date: Mon, 27 Jul 2026 16:36:46 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E4=BA=A4=E6=8E=A5=E6=B4=BE=E8=BD=A6?= =?UTF-8?q?=E5=80=99=E9=80=89=E5=88=B7=E6=96=B0=E6=B8=85=E7=A9=BA=E9=97=AE?= =?UTF-8?q?=E9=A2=98=20(#5283)=20(#47)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...¦å€™é€‰å“应被订å•刷新清空-修改接å£-管ç†åŽå°.md | 106 ++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 changelogs-v2/2026-07/27_5283_派车候选å“应被订å•刷新清空-修改接å£-管ç†åŽå°.md diff --git a/changelogs-v2/2026-07/27_5283_派车候选å“应被订å•刷新清空-修改接å£-管ç†åŽå°.md b/changelogs-v2/2026-07/27_5283_派车候选å“应被订å•刷新清空-修改接å£-管ç†åŽå°.md new file mode 100644 index 0000000..c495b85 --- /dev/null +++ b/changelogs-v2/2026-07/27_5283_派车候选å“应被订å•刷新清空-修改接å£-管ç†åŽå°.md @@ -0,0 +1,106 @@ +--- +schema: "hl-changelog/v2" +ticket: "5283" +title: "车务派车候选å“应被订å•刷新清空" +consumer: "admin" +change_type: "修改接å£" +backend_status: "deployed" +gateway_status: "verified" +frontend_status: "pending" +frontend_owner: "" +frontend_ref: "" +target_release: "" +verified_at: "" +status_note: "åŽç«¯å€™é€‰æŽ¥å£å¥‘约与日期冲çªå£å¾„正常;å‰ç«¯ AssignModal å› åŒè®¢å•对象刷新而é‡å¤åˆå§‹åŒ–,清空已æˆåŠŸè¿”å›žçš„å€™é€‰ã€‚" +updated_at: "2026-07-27" +base: "dev-v3" +--- + +# 车务派车候选å“应被订å•刷新清空 + +> **æœåŠ¡**: `hl-fleet-service` +> +> **åŽç«¯å·¥å•**: [wx/HL#5283](https://git.1814.love:8443/wx/HL/issues/5283) +> +> **å‰ç«¯æ¶ˆè´¹ç«¯**: `mmg/hl-ui v2.1` +> +> **å½±å“页é¢**: è½¦åŠ¡ç®¡ç† â†’ 派车看æ¿/矩阵 → 派车弹窗 `AssignModal` + +## 结论 + +æœ¬æ¬¡ä¸æ˜¯åŽç«¯å€™é€‰è¿‡æ»¤æˆ– API å¥‘çº¦ç¼ºé™·ï¼Œä¸æ–°å¢žæˆ–修改接å£ã€å­—段ã€ç±»åž‹ã€å¿…填性ã€é”™è¯¯ç åŠæ´¾å•çŠ¶æ€æœºï¼š + +- åŒä¸€çœŸå®žè¯·æ±‚ç»æµ‹è¯•网关返回 `vehicleTotal=19`,其中 11 辆 `AVAILABLE`,其余车辆因真实日期冲çªä¸å¯ç”¨ï¼› +- 专用测试车辆在目标日期区间å‡è¿”回 `AVAILABLE`,车辆ã€è½¦åž‹ã€è½¦é˜Ÿå’Œç»´ä¿çŠ¶æ€æœªé€ æˆé”™è¯¯æŽ’除; +- 页颿˜¾ç¤ºâ€œå…± 0 辆â€å‘生在å“应æˆåŠŸä¹‹åŽï¼šçœ‹æ¿åˆ·æ–°/SSE 以新对象替æ¢åŒä¸€è®¢å•,`AssignModal` 冿¬¡æ‰§è¡Œ `resetOptionPages()` 并递增 `requestSeq`,从而清空候选并丢弃已返回结果; +- ä¸å¾—通过放宽åŽç«¯è½¦è¾†/车队/车型或冲çªè¿‡æ»¤æ¥æŽ©ç›–å‰ç«¯çжæ€é‡ç½®é—®é¢˜ã€‚ + +该问题也属于 [#5279 车务派å•全链路 E2E å‰ç«¯ç¼ºé™·äº¤æŽ¥](./27_5279_车务派å•全链路E2Eå‰ç«¯ç¼ºé™·äº¤æŽ¥-修改接å£-管ç†åŽå°.md)“åŽå°åˆ·æ–°ä¸å¾—é‡ç½®æ­£åœ¨ç¼–辑的派车è‰ç¨¿â€çš„åŒç±»æ¶ˆè´¹ç¼ºé™·ï¼›#5283 补充了候选 19/11 çš„ç‹¬ç«‹ç½‘å…³è¯æ®å’Œç¨³å®šåˆå§‹åŒ–é”®è¦æ±‚。 + +## å˜æ›´æŽ¥å£ + +```http +POST /admin/fleet/assignments/candidates +Content-Type: application/json +Authorization: Bearer +``` + +接å£ç»§ç»­è¿”回车辆ã€å¸æœºä¸¤å¥—独立分页候选。å‰ç«¯åº”消费 `vehicles.records/total` 与 `drivers.records/total`(兼容别å `list` ä»ä¿ç•™ï¼‰ï¼Œå¹¶ä»¥ `available`ã€`availabilityReasonCode`ã€`conflicts[]` å’Œ `availabilityWindows[]` 展示å¯ç”¨æ€§ï¼›æœ¬æ¬¡æ²¡æœ‰åŽç«¯å¥‘约å˜åŒ–。 + +## å‰ç«¯ä¿®å¤å£å¾„ + +### 1. 以稳定业务身份决定是å¦é‡æ–°åˆå§‹åŒ– + +ä¸å¾—ä»…ç›‘å¬ `props.order` 对象身份。应使用 `initializationIdentity` 或等价稳定键,至少覆盖: + +- `orderId`ï¼› +- å½“å‰ `requirementId`ï¼› +- 目标 `assignmentSlotId/fleetItemIndex`ï¼› +- `assign/change` 模å¼åŠå¿…è¦å…¥å£ä¸Šä¸‹æ–‡ã€‚ + +åªæœ‰ä¸Šè¿°ä¸šåŠ¡èº«ä»½çœŸæ­£å˜åŒ–,或用户主动关闭åŽé‡æ–°æ‰“开弹窗时,æ‰å…许执行 `resetOptionPages()` å’Œé‡å»ºæ´¾è½¦è‰ç¨¿ã€‚åŒä¸€è®¢å•仅因列表刷新或 SSE ç”Ÿæˆæ–°å¯¹è±¡æ—¶ä¸å¾—é‡ç½®ã€‚ + +### 2. ä¿ç•™å€™é€‰ä¸Žç¼–辑è‰ç¨¿ + +åŒä¸€ç¨³å®šä¸šåŠ¡èº«ä»½ä¸‹åˆ·æ–°è®¢å•对象时,必须ä¿ç•™ï¼š + +- 车辆/叿œºå€™é€‰ `records/total/page/pageSize`ï¼› +- 车队ã€è½¦åž‹ã€å…³é”®å­—å’Œå¯ç”¨æ€§ç­›é€‰ï¼› +- 已选车辆ã€å¸æœºã€æ—¥æœŸå’Œç¨³å®šæ§½ä½ï¼› +- æ”¶è´¹æœåŠ¡æ—¥ã€é€æ—¥ä»·æ ¼ã€è°ƒä»·/å…费原因; +- è·¨å¸¸é©»ç¡®è®¤ä»¥åŠ `HOLD/DIRECT` 模å¼ã€‚ + +è‹¥æœåŠ¡ç«¯åŸºçº¿ç¡®å®žå˜åŒ–,继续使用现有 baseline-difference 强æç¤ºï¼Œç”±ç”¨æˆ·å†³å®šå¦‚何处ç†ï¼›ä¸å¾—é™é»˜æ¸…空或改写è‰ç¨¿ã€‚ + +### 3. ä¿ç•™å¹¶å‘å“åº”ä¿æŠ¤ï¼Œä½†ä¸å¾—误æ€å½“å‰è¯·æ±‚ + +ç»§ç»­ä¿ç•™ `requestSeq` 或等价的旧å“åº”éš”ç¦»æœºåˆ¶ã€‚åªæœ‰æ–°ä¸šåŠ¡èº«ä»½æˆ–æ–°æŸ¥è¯¢çœŸæ­£å¼€å§‹æ—¶æ‰é€’增åºå·ï¼›åŒä¸€è®¢å•对象替æ¢ä¸å¾—æŠŠå·²ç»æˆåŠŸè¿”å›žçš„å½“å‰å€™é€‰æ ‡è®°ä¸ºè¿‡æœŸã€‚快速连续刷新时,旧请求ä¸èƒ½è¦†ç›–新请求,新请求æˆåŠŸç»“æžœä¹Ÿä¸èƒ½è¢«æ— å…³åˆå§‹åŒ–清空。 + +## å‰ç«¯éªŒæ”¶æ¸…å• + +- [ ] ä¸“ç”¨æµ‹è¯•è®¢å• `26-4700`ã€`2026-08-04..2026-08-07`ã€SUVã€3 人请求返回åŽï¼Œé¡µé¢å€™é€‰æ•°é‡ä¸ŽæŽ¥å£ä¸€è‡´ï¼Œä¸å†é”™è¯¯æ˜¾ç¤º 0。 +- [ ] 相åŒè®¢å•ã€éœ€æ±‚ã€æ§½ä½å’Œæ¨¡å¼ä¸‹ï¼Œåˆ—表/SSE 替æ¢è®¢å•对象åŽï¼Œè½¦è¾†å’Œå¸æœºå€™é€‰ä»ä¿ç•™ã€‚ +- [ ] 候选分页总数ã€ç­›é€‰æ¡ä»¶ã€å·²é€‰é¡¹å’Œè´¹ç”¨è‰ç¨¿ä¸è¢«åŽå°åˆ·æ–°æ¸…空。 +- [ ] 已切æ¢çš„ `HOLD/DIRECT` 模å¼ä¸ä¼šå› åŒè®¢å•刷新æ¢å¤é»˜è®¤å€¼ã€‚ +- [ ] 订å•ã€éœ€æ±‚ã€æ§½ä½æˆ–模å¼çœŸå®žå˜åŒ–æ—¶ä»èƒ½æ­£ç¡®é‡æ–°åˆå§‹åŒ–。 +- [ ] 快速连续刷新时,旧å“应ä¸èƒ½è¦†ç›–æ–°å“åº”ï¼Œå½“å‰æˆåŠŸå“应也ä¸ä¼šè¢«è¯¯åˆ¤è¿‡æœŸã€‚ +- [ ] Network 记录ä»ä½¿ç”¨çŽ°æœ‰å€™é€‰æŽ¥å£ï¼Œæ— æ–°å¢žæˆ–修改åŽç«¯è¯·æ±‚契约。 + +## 验è¯è¯æ® + +- 测试网关与 Fleet åŒå®žä¾‹åŒå£å¾„å“应:`code=200`ã€è½¦è¾†æ€»æ•° 19ã€å¯ç”¨ 11ã€çœŸå®žå†²çª 8ï¼› +- 目标测试车辆å‡ä¸º `AVAILABLE`ï¼Œç›®æ ‡æ—¥æœŸå†²çªæ•°ä¸º 0ï¼› +- åŽç«¯ worktree é›¶ä»£ç æ”¹åŠ¨ï¼Œå½“å‰å€™é€‰è¿‡æ»¤ã€æ—¥æœŸé—­åŒºé—´å†²çªå’Œ API å¥‘çº¦ä¿æŒä¸å˜ï¼› +- å‰ç«¯ HMR 现场曾出现稳定 `initializationIdentity` æ–¹å‘的修正,但尚无 `mmg/hl-ui v2.1` 远端æäº¤ä¸Žå‘å¸ƒéªŒæ”¶ä¾æ®ï¼Œå› æ­¤æœ¬æ–‡ä»¶ä¿æŒ `frontend_status: "pending"`。 + +## 契约审查 + +- Frontend APIï¼šçŽ°æœ‰æŽ¥å£æ¶ˆè´¹çº é”™ï¼Œæ—  Controller/DTO/VO/字段å˜åŒ–,OpenAPI diff 为 `not_required`ï¼› +- Internal Feign / shared Java:无å˜åŒ–,Consumer Contract 为 `not_required`ï¼› +- åŽç«¯çœŸå€¼ç”±å·²éƒ¨ç½²æµ‹è¯•环境网关å“应和现有 Fleet æºç ç¡®è®¤ï¼›changelog å‘布ä¸ä»£è¡¨å‰ç«¯å·²å®žçŽ°æˆ–å·²å‘布。 + +## ä¸å½±å“范围 + +- ä¸ä¿®æ”¹ `hl-ui`,ä¸åœ¨ `mmg/hl-ui` 创建工å•ï¼› +- ä¸ä¿®æ”¹åŽç«¯å€™é€‰è¿‡æ»¤ã€æ—¥æœŸå†²çªã€è½¦è¾†/叿œºå ç”¨ã€æ´¾å•çŠ¶æ€æœºã€è®¡è´¹ã€ä¿é™©ã€é€šçŸ¥æˆ–æ•°æ®åº“ï¼› +- ä¸æŠŠå‰ç«¯å®žçްã€å‘布和页é¢éªŒæ”¶å†’充为本次åŽç«¯ä»£ç äº¤ä»˜ã€‚